Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Flexit Ventil med Servo Åpning og PC Vifte


Fermate

12 989 visninger

Kona vil ha frisk luft på soverommet, mens jeg synes det blir for kaldt i løpet av natta.
Jeg forsøkte meg med en Fakro ZWS230 for å lukke vinduet automatisk, men den bråket for mye (WAF=0).

 

Jeg ønsket derfor å forsøke meg på en servostyrt ventil med en vifte i som kunne blåse frisk luft inn, men lukkes automatisk dersom det blir for kaldt.

Vifta skulle være en lydsvak PC vifte med høyt volum, og hastigheten skulle kunne reguleres trinnløst med PWM.

 

Siden dette skulle gå på fast strøm, valgte jeg WiFi som kommunikasjon. Arduino MRK WiFi 1010 er en kompakt og grei microprosessor som hadde alt jeg trengte. Siden jeg hadde pinner til overs, slang jeg på en temperatursensor og en RGB LED for å kunne kommunisere med omverdenen. Dette er greit for debugging, men også for å kunne vise status under konfigurasjon. 

 

Utgangspunktet er en Flexit ventil med snortrekk for å få en blank (ikke 3D printet) front.
Har du en slik eksisterende ventil, kan du altså oppgradere med denne :) 

image.png

 

Jeg hadde ikke ventil på soverommet fra før og måtte derfor sette inn en slik.

 

image.png

 

Byggeveiledningen:

(Du finner "handlelisten" i bunn av denne posten)

 

Start med å fjerne mekanismen for snortrekket og erstatt fjæra med en svakere en. 
Min er hentet fra biltema sitt fjærsett. Den bør være sterk nok til at ventilen ikke klapprer i vind, men svak nok til at servoen orker å dra den.

 

image.png

 

 

Etter masse prøving og feiling landet jeg på denne 3D modellen som ble modellert i Onshape og printet på en Flashforge Inventor.
Onshape er gratis for hobbyfolk, men er helt profft og veldig greit å bruke. Anbefales!
3D modellen er tilgjengelig for dere for printing eller viderearbeid :) 
(Lag deg en gratis konto, logg inn og trykk på linken i delelista nederst)
STL filer ligger også vedlagt.

 

 

image.png

 

PC vifter skal PWM styres med 25KHz, og det tok meg en del tid å finne ut hvordan en endrer PWM frekvensen på Arduinoen til dette.
Her er koden som må kjøres etter andre interupt oppsett:

 

Spoiler

/******************* setup_25khz_PWM **********************/
void setup_25khz_PWM() {
  // Output 25kHz PWM on digital pin D6 using timer TCC0 (10-bit resolution)
  REG_GCLK_GENDIV = GCLK_GENDIV_DIV(1) |          // Divide the 48MHz clock source by divisor 1: 48MHz/1=48MHz
                    GCLK_GENDIV_ID(4);            // Select Generic Clock (GCLK) 4
  while (GCLK->STATUS.bit.SYNCBUSY);              // Wait for synchronization

  REG_GCLK_GENCTRL = GCLK_GENCTRL_IDC |           // Set the duty cycle to 50/50 HIGH/LOW
                     GCLK_GENCTRL_GENEN |         // Enable GCLK4
                     GCLK_GENCTRL_SRC_DFLL48M |   // Set the 48MHz clock source
                     GCLK_GENCTRL_ID(4);          // Select GCLK4
  while (GCLK->STATUS.bit.SYNCBUSY);              // Wait for synchronization

  // Enable the port multiplexer for the TCC0 PWM channel 2 (digital pin D6), SAMD21 pin PA20
  PORT->Group[g_APinDescription[6].ulPort].PINCFG[g_APinDescription[6].ulPin].bit.PMUXEN = 1;
 
  // Connect the TCC0 timer to the port outputs - port pins are paired odd PMUO and even PMUXE
  // F & E specify the timers: TCC0, TCC1 and TCC2
  PORT->Group[g_APinDescription[6].ulPort].PMUX[g_APinDescription[6].ulPin >> 1].reg |= /*PORT_PMUX_PMUXO_F |*/ PORT_PMUX_PMUXE_F;

  // Feed GCLK4 to TCC0 and TCC1
  REG_GCLK_CLKCTRL = GCLK_CLKCTRL_CLKEN |         // Enable GCLK4 to TCC0 and TCC1
                     GCLK_CLKCTRL_GEN_GCLK4 |     // Select GCLK4
                     GCLK_CLKCTRL_ID_TCC0_TCC1;   // Feed GCLK4 to TCC0 and TCC1
  while (GCLK->STATUS.bit.SYNCBUSY);              // Wait for synchronization

  // Normal (single slope) PWM operation: timer countinuouslys count up to PER register value and then is reset to 0
  REG_TCC0_WAVE |= TCC_WAVE_WAVEGEN_NPWM;         // Setup single slope PWM on TCC0
  while (TCC0->SYNCBUSY.bit.WAVE);                // Wait for synchronization
 
  // Each timer counts up to a maximum or TOP value set by the PER (period) register,
  // this determines the frequency of the PWM operation:
  // 1919 = 25kHz
  REG_TCC0_PER = 1919;      // Set the frequency of the PWM on TCC0 to 25kHz
  while(TCC0->SYNCBUSY.bit.PER);

  // The CCBx register value determines the duty cycle
  REG_TCC0_CCB2 = 959;       // TCC0 CCB2 - 50% duty cycle on D6
  while(TCC0->SYNCBUSY.bit.CCB2);

  // Divide the 48MHz signal by 1 giving 48MHz (20.8ns) TCC0 timer tick and enable the outputs
  REG_TCC0_CTRLA |= TCC_CTRLA_PRESCALER_DIV1 |    // Divide GCLK4 by 1
                    TCC_CTRLA_ENABLE;             // Enable the TCC0 output
  while (TCC0->SYNCBUSY.bit.ENABLE);              // Wait for synchronization
    }
 


Vifta har mulighet til å rapportere faktisk hastighet, men det fikk jeg aldri helt til og droppet derfor det. 

 

Å styre servo og blinke med LED er jo planke med en Arduino, så det går jeg ikke gjennom.


Siden vifta skulle ha 12V og servoen og Arduinoen 5V, måtte jeg inn med en regulator. Kunne sikkert brukt noe mindre og enklere i To-220 kapsel, men jeg hadde en haug med slike liggende:
image.png

 

DS18B20 er en artig IC som måler temperatur og er lett å kommunisere med fra en Arduino. Det eneste den trenger er en pull-up resistor på 4,7k

 

 

image.png

 

Siden LEDen også trenger 3 resistorer (220ohm), tok jeg like godt et lite kretskort med faste baner og monterte alt sammen på det.

Kuttet noen baner med bor, laget kryssninger med noe koppertråd og loddet på vinklede kontakter på enden.

 

image.png

 

Det hele blir mer stabilt også.

 

image.png

 

En liten borrefeil korrigeres med en liten kabelstump (blå) :)
Spenningsregulatorpinnene er merket med rødt.

 

image.png

 

Ellers er koblingene laget slik at de går mest mulig rett ut på koblingspinnene.
Her er skjema tegnet med Arduinoen og kontaktene i samme linjer som på kretskortet
Fargene på ledningene er slik de er i virkeligheten.

 

image.png

 

 

Vifta og servoen som har ferdige kontakter kan plugges rett inn:


image.png 

 

Siden ventilen allerede har et hull der snora satt, kan det borres opp til 4.5 - 4.8 mm og LED'en presses inn der.
Kabel lages med riktig pinout ved å lime sammen hunn-hunn koblingskabel med superlim:


image.png

 

Temperatur IC'en loddes også på en slik kabel:

 

image.png

 

men her tillater jeg meg å dele dem opp slik at den brune signalkabelen plugges for seg.

- det ble alt for mye styr å få dem til å gå inn ved siden av hverandre.

 

Pinnene skilles med litt kna-epoxy:

 

image.png

 

 

Da er det klart for montering.

Først inn med servoen. Her må en bruke kubbe-trekker.


image.png

 

Så er det på med viftefestene. Legg merke til at de skal forbi begge hakkene. (Bare dra selv om gummien blir hvit, - de tåler det)

 

image.png

 

Neste er å feste temperatursensoren med mere kna-epoxy: 

 

image.png

 

 

Når epoxyen har herdet, kan du sette på vifta. OBS! ledningen skal gjennom utsparingen for dette i kanten.

Fjern gjerne litt av strømpa, så blir kabelen mykere å legge og fargene synlig for å kunne sette kontaktene riktig vei.

Vifta sitter på yttersiden nettop fordi det skal bli enklere å trekke gummifestene igjennom vifta.

 

image.png  image.png

 

Nå bør du plugge det hele sammen og teste på benken før du fester noe på servoen.

 

image.png

 

Her er kode for Arduinoen (ino fil er også vedlagt):

 

Spoiler

#include <Servo.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <WiFiNINA.h>

// SERVO
Servo myservo;  
int mpos = 0;    // variable to store the servo position

// LED
#define RED 7
#define GREEN 8
#define BLUE 9

//TEMP
#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

//SERVO
#define SERVO 11

// WEB
char ssid[] = "XXXXX";     // your network SSID (name)
char pass[] = "YYYYY";    // your network password (use for WPA, or use as key for WEP)
IPAddress IPAdresse = IPAddress(192,168,ZZZ,ZZZ);
WiFiClient client;
int status = WL_IDLE_STATUS;
WiFiServer server(80);


//VARS
int led =  LED_BUILTIN;
char c;
int iFanSpeed =1;
int valve=90;
String currentLine;
int iTemp;

/******************************************/
void setup()
{

    pinMode(RED, OUTPUT);
    pinMode(GREEN, OUTPUT);
    pinMode(BLUE, OUTPUT);

    lightLed(LOW,LOW,LOW); // AV
    delay(1000);
    lightLed(HIGH,LOW,LOW); //RØD
    delay(1000);
    lightLed(LOW,HIGH,LOW); // GRØNN
    delay(1000);
    lightLed(LOW,LOW,HIGH); // BLÅ
    delay(1000);

//    Serial.begin(9600);
//    while (!Serial) ;      // wait for serial port to connect. Needed for native USB port only

    Serial.println("Start");
    lightLed(HIGH,LOW,LOW); //RØD
    
    init_servo();

    lightLed(LOW,LOW,HIGH); // BLÅ
    setup_25khz_PWM();

    
    init_wifi();
    lightLed(LOW,LOW,LOW); // AV

}

/******************************************/
void loop() { 
  client = server.available();   // listen for incoming clients

  if (client) {           
    currentLine = "";                 
    c=0;
    while (client.connected() && (c != '\n') ) {             
      if (client.available()) { 
        c = client.read();       
        if (c!='\n' and c!='\r') {
          currentLine += c;       
        }
      }    
    }
    
    if (currentLine.startsWith("GET /")) {
        lightLed(LOW,HIGH,LOW); // GRØNN
        delay(1000);
        Serial.print("Funnet: ");
        Serial.println(currentLine);
        parseGet(currentLine);
        read_temp(); 
        lightLed(LOW,LOW,LOW); // AV
        delay(1000);

    }
    if (currentLine=="") {
      send2client(iFanSpeed,mpos);
      client.stop();
      Serial.println("client disonnected");
    }
  }
}
    


void moveto(int pos) {
  mpos=pos;
  myservo.write(mpos);
}

void lightLed(int red,int green, int blue) {
    digitalWrite(RED, red);
    digitalWrite(GREEN, green);
    digitalWrite(BLUE, blue);
}

void fanSpeed(int iSpeed) {
  // 0 to 1919

  Serial.print("Inout Speed:"); 
  Serial.println(iSpeed); 
  iFanSpeed = iSpeed * 1919; 
  Serial.print("Calc Speed:"); 
  Serial.println(iFanSpeed); 
  iFanSpeed = iFanSpeed /100; 
  Serial.print("Set Speed:"); 
  Serial.println(iFanSpeed); 
  
  REG_TCC0_CCB2 = iFanSpeed;
 // REG_TCC0_CCB2 = 767;
  while(TCC0->SYNCBUSY.bit.CCB2);

}

void parseGet(String  s) {
  int p1;
  int p2;
  String sVerb = "speed=";
  int i;
  String ss;
  
//  Serial.println(s.indexOf("speed="));
  
  p1=s.indexOf(sVerb);
  if (p1 > -1 ) {
    p2=s.indexOf("&",p1+1); 
    ss=s.substring(p1 + sVerb.length(),p2);
    i=ss.toInt();
    fanSpeed(i);
  } else {
    Serial.println("not Found" + sVerb);
  }

  sVerb = "valve=";
  p1=s.indexOf(sVerb);
  if (p1 > -1 ) {
    p2=s.indexOf(" ",p1+1); 
    ss=s.substring(p1 + sVerb.length(),p2);
    i=ss.toInt();
//    moveto_slow(i,50);
    moveto(i);
  } else {
    Serial.println("not Found" + sVerb);
  }
}

void moveto_slow(int target_pos, int idelay) {
int i;

  digitalWrite(LED_BUILTIN, HIGH); 
  Serial.println("moveto slow");
  if (target_pos > mpos) {
    Serial.println("tell opp");
    for (i = mpos; i < target_pos; i += 1) { 
        moveto(i);               
        delay(idelay);                        
    }     
  } else {
      Serial.println("tell ned");
    for (i = mpos; i > target_pos; i -= 1) { 
      moveto(i);               
      delay(idelay);                        
    }
  }
    digitalWrite(LED_BUILTIN, LOW); 
}


void read_temp() {
    // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");

  Serial.print("Temperature for Device 1 is: ");
  iTemp=sensors.getTempCByIndex(0);
  Serial.print(iTemp); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire

}


/******************************************/
void init_temp() {
    sensors.begin(); // IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement
}

/******************************************/
void init_servo() {
   myservo.attach(SERVO);  
}

/******************* setup_25khz_PWM **********************/
void send2client(int ispeed, int valve) {
  String s;
  
    client.println("HTTP/1.1 200 OK");
    client.println("Content-type:text/html");
    client.println(); 
    // the content of the HTTP response follows the header:
  

//    s="<form>  <input checked=\"checked\" name=\"sex\" type=\"radio\" value=\"male\" /> Malex <br /><input name=\"sex\" type=\"radio\" value=\"female\" /> Female <br />  ";
    s="<form>";
//    s="<form>  <input checked=\"checked\" name=\"sex\" type=\"radio\" value=\"male\" /> Malex <br /><input name=\"sex\" type=\"radio\" value=\"female\" /> Female <br />  ";
    s=s + "Temp: " +  iTemp + " <br /> "; 
    s=s + "Speed  <input name=\"speed\" type=\"\" value=\""  +  ispeed  + "\" /><br /> "; 
    s=s + "Valve  <input name=\"valve\" type=\"\" value=\""  +  mpos  + "\" /><br><br> "; 
    s=s + "<button type=\"submit\" value=\"Submit\">Submit</button></form>";
    client.print(s);
  
    // The HTTP response ends with another blank line:
    client.println();
}

/******************* setup_25khz_PWM **********************/
void setup_25khz_PWM() {
  // Output 25kHz PWM on digital pin D6 using timer TCC0 (10-bit resolution)
  REG_GCLK_GENDIV = GCLK_GENDIV_DIV(1) |          // Divide the 48MHz clock source by divisor 1: 48MHz/1=48MHz
                    GCLK_GENDIV_ID(4);            // Select Generic Clock (GCLK) 4
  while (GCLK->STATUS.bit.SYNCBUSY);              // Wait for synchronization

  REG_GCLK_GENCTRL = GCLK_GENCTRL_IDC |           // Set the duty cycle to 50/50 HIGH/LOW
                     GCLK_GENCTRL_GENEN |         // Enable GCLK4
                     GCLK_GENCTRL_SRC_DFLL48M |   // Set the 48MHz clock source
                     GCLK_GENCTRL_ID(4);          // Select GCLK4
  while (GCLK->STATUS.bit.SYNCBUSY);              // Wait for synchronization

  // Enable the port multiplexer for the TCC0 PWM channel 2 (digital pin D6), SAMD21 pin PA20
  PORT->Group[g_APinDescription[6].ulPort].PINCFG[g_APinDescription[6].ulPin].bit.PMUXEN = 1;
 
  // Connect the TCC0 timer to the port outputs - port pins are paired odd PMUO and even PMUXE
  // F & E specify the timers: TCC0, TCC1 and TCC2
  PORT->Group[g_APinDescription[6].ulPort].PMUX[g_APinDescription[6].ulPin >> 1].reg |= /*PORT_PMUX_PMUXO_F |*/ PORT_PMUX_PMUXE_F;

  // Feed GCLK4 to TCC0 and TCC1
  REG_GCLK_CLKCTRL = GCLK_CLKCTRL_CLKEN |         // Enable GCLK4 to TCC0 and TCC1
                     GCLK_CLKCTRL_GEN_GCLK4 |     // Select GCLK4
                     GCLK_CLKCTRL_ID_TCC0_TCC1;   // Feed GCLK4 to TCC0 and TCC1
  while (GCLK->STATUS.bit.SYNCBUSY);              // Wait for synchronization

  // Normal (single slope) PWM operation: timer countinuouslys count up to PER register value and then is reset to 0
  REG_TCC0_WAVE |= TCC_WAVE_WAVEGEN_NPWM;         // Setup single slope PWM on TCC0
  while (TCC0->SYNCBUSY.bit.WAVE);                // Wait for synchronization
 
  // Each timer counts up to a maximum or TOP value set by the PER (period) register,
  // this determines the frequency of the PWM operation:
  // 1919 = 25kHz
  REG_TCC0_PER = 1919;      // Set the frequency of the PWM on TCC0 to 25kHz
  while(TCC0->SYNCBUSY.bit.PER);

  // The CCBx register value determines the duty cycle
  REG_TCC0_CCB2 = 959;       // TCC0 CCB2 - 50% duty cycle on D6
  while(TCC0->SYNCBUSY.bit.CCB2);

  // Divide the 48MHz signal by 1 giving 48MHz (20.8ns) TCC0 timer tick and enable the outputs
  REG_TCC0_CTRLA |= TCC_CTRLA_PRESCALER_DIV1 |    // Divide GCLK4 by 1
                    TCC_CTRLA_ENABLE;             // Enable the TCC0 output
  while (TCC0->SYNCBUSY.bit.ENABLE);              // Wait for synchronization
    }
    
/******************************************/
void init_wifi() {
    WiFi.config(IPAdresse);

  // attempt to connect to Wifi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to Network named: ");
    Serial.println(ssid);                   // print the network name (SSID);

    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);
    // wait 1 seconds for connection:
    delay(1000);
  }
  server.begin();                           // start the web server on port 80
  printWifiStatus();                        // you're connected now, so print out the status

}

/******************************************/

void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your board's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
  // print where to go in a browser:
  Serial.print("To see this page in action, open a browser to http://");
  Serial.println(ip);
}

 

Husk å endre WiFi SSID, passord og IP adresse:

 

image.png

 

Når du går til IP-adressen du anga med en browser, skal du få opp denne websiden:

 

image.png

 

Hastigheten på vifta går fra 0 til 100 og ventilen fra 0 til 180 (grader).

 

Nå kan du testkjøre vifta og servoen og sjekke temperaturen før du går videre.

 

Skru deretter stagene sammen og fest dem på en avklippet servo-arm.

 

 image.png

 

Kjør servoen tilbake til "helt lukket" (0) og fest staget på servoen slik at det er en liten klaring til veggen

 

 image.png

 

Test at servoen beveger seg som den skal, sett den i  "helt åpen" (180) posisjon og skru deretter staget fast i luka.

 

Nå må du montere hele greia i veggen før du fester LED'en, setter luka på plass og fester fjæra.

 

image.png

 

 

Integrasjonen med Alexa og HomeSeer er foreløpig enkel

 

Alexa har 3 Routines ("Bedroom Fan Close", "Bedroom Fan Silent" og "Bedroom Fan Full") som setter en verdi på en virtuell device

(Tips: La kona bestemme kommandoene så husker hun dem ;)  )

 

image.png

image.png

 

Denne har eventer som trigger når den blir satt:

 

image.png

 

Som i sin tur kaller opp primitiv-eventer:

image.png

 

Selve kommandoen er denne:

&hs.URLAction("http://192.168.XXX.YYY/?speed=0&valve=0", "GET", "", "")

 

Da er det bare å teste:

 

 

Helt til slutt vil jeg si noe om koden:
Den er ikke ferdig og slik jeg vil ha den! 

Problemet er at om jeg skulle vente med å publisere dette til den ble perfekt, ville det aldri bli postet noe...

Jeg gir dere derfor koden slik den er akkurat nå og så får vi heller jobbe sammen med å få på plass de tingene jeg ønsker meg:

 

  • Når den starter, bør den hente SSID og pwd fra EEPROM
  • Dersom den ikke får kontakt med WiFi, bør den gå i AP mode slik at du kan koble til den på en fast IP (10.0.0.1 feks) med telefonen og få opp en side der du kan velge SSID og oppgi passord og ønsket IP (mens dette skjer kan den f. eks. lyse blått)
  • Dersom du velger en egen parameter, burde du få opp en side der du kan endre IP 
  • Den burde snakke på Web-socket med HomeSeer
  • HomeSeer burde ha egne devicer med slidere for speed og ventilåpning.
    Og en egen device som viser temp

 

DEL GJERNE TILBAKE DET DERE LAGER :D 

 

Deleliste:
3D Modell i OnShape (Eller bare søk etter "Flexit vent with Servo og CPU fan")

Servoen Luxorparts S3003 Standardservo
Viften er en Noctua NF-S12A PWM
Dioden er en RGB Common Cathode 4-Pin F5 5MM

Temp sensoren er en DS18B20

Arduino MKR Wifi 1010

Spenningsregulator 5V fra 12V

KretskortKabler, Pinnelist

Pull-up motstand til Temp sensoren: 4,7k ohm

Motstand til LED: 3 x 220 ohm

Flexit ventil 6x6 (150x150mm) art 02024 feks herfra

 

 

Flexit_Ventil_uten_wifiParametere.ino

Module.stl Rod1.stl Rod2.stl

  • Like 10
  • Thanks 2

41 kommentarer


Anbefalte kommentarer



Genialt!

Et smart alternativ for de som ikke har balansert ventilasjonsystem på plass.
Du burde tenke på å benytte Mqtt som protokoll  istedenfor direkte kommunikasjon mot HomeSeer. Da vil vifta bli mindre propietær og
kunne brukes mot flere automasjonsystemer.
 

Lenke til kommentar
På 3.4.2021 den 10.48, Rogerbl skrev:

Du burde tenke på å benytte Mqtt som protokoll  istedenfor direkte kommunikasjon mot HomeSeer. Da vil vifta bli mindre propietær og
kunne brukes mot flere automasjonsystemer.

HTTP-kall er jo akkurat like lite proprietært som MQTT, men MQTT er muligens hakket mer elegant... ;) 

  • Like 1
Lenke til kommentar
På 3.4.2021 den 10.48, Rogerbl skrev:

Du burde tenke på å benytte Mqtt som protokoll  istedenfor direkte kommunikasjon mot HomeSeer. Da vil vifta bli mindre propietær og
kunne brukes mot flere automasjonsystemer.


Jeg er enig, jeg har bare ikke fått rotet meg til å kjøre opp MQTT mot HS hjemme ennå.
Men siden 2 av de 3 Daikin Varmepumpene jeg fikk i hus antakeligvis kjører MQTT (for DainkiSeer funker ikke mot dem) må jeg jo det før eller senere :)

Lenke til kommentar
På 2.4.2021 den 17.32, Tor-Erik skrev:

MKR 1010 bruker vel 3.3V på GPIO pinnene og PWM på Noctua vifta er vel egentlig et 5V signal. Hvor god styring får du over PWM? 

Ser på å styre et par vifter selv, men klarer ikke helt å finne ut om det er noe problem/begrensninger ved å bruke 3.3V vs 5V.


Har ikke tenkt over det. 
Funker helt fint både på Vifta og Servoen (Den vil vel egentlig også ha 5V?)
Utfordringen for meg lå som sagt i at PC vifta skal ha en PWM frekvens på 25kHz og det var ikke lett å finne kode for å endre det på Arduinoen.
 

  • Thanks 1
Lenke til kommentar

Stilig! Noe slikt kunne jeg ønske meg, men det blir for avansert/tidkrevende for meg. 

Si ifra om du åpner for salg! 😁

Eeeventuelt: Hva vil folk anbefale av ferdigprodukter? 

Endret av Nico
Lenke til kommentar
Nico skrev (1 minutt siden):

Stilig! Noe slikt kunne jeg ønske meg, men det blir for avansert/tidkrevende for meg. 

Si ifra om du åpner for salg! 😁


Hehe Som du sier er det såpass tidskrevende at det nok da vil bli for dyrt ;)

Men HVA av dette er det du ikke fikser selv?
(Kanskje jeg bare trenger å bidra med noe av det?)

Lenke til kommentar

Jeg tror jeg ville klart det, ved å bruke god tid. Problemet er at det tar alt for mye tid. I hverdagen har jeg så vidt tid en gang i månefasen til å rydde bort rene klær på vaskerommet, så dette er ikke noe jeg prioriterer å fikle med med det første. Men veldig fascinerende! 

Lenke til kommentar
Nico skrev (1 minutt siden):

Jeg tror jeg ville klart det, ved å bruke god tid. Problemet er at det tar alt for mye tid. I hverdagen har jeg så vidt tid en gang i månefasen til å rydde bort rene klær på vaskerommet, så dette er ikke noe jeg prioriterer å fikle med med det første. Men veldig fascinerende! 


Jeg har effektivisert det der ved å slå sammen vaskerommet og garderoben til samme rom som en walk-in løsning, så forsvant den arbeids operasjonen der ;) 

Lenke til kommentar

Mens vi venter på det eller tid til diy-prosjekter: har noen gode anbefalinger til vifte? Smart, eller som kan kobles på en kjekk smartifiseringsings?

 

Ideelt, skal viften kunne gå begge veier. Eller er det vel bare å ha en vifte av enkleste sort, og montere av/på-smart-bryter på den. 

Lenke til kommentar

Hva er behovet du ønsker å løse?
-fuktighet?
-temperatur?

-friskluft?

-loft/kjeller?
-soverom?
-kjøkken?
-bad?
-stue?

Disse har alle litt forskjellige utfordringer

Lenke til kommentar

Det vil ha klare fordeler å kunne velge mellom avtrekk og tilførsel. 

Det mest nærliggende behovet er koblet til høye verdier av radon og VOC på kontor og soverom. 

I utgangspunktet tenkte jeg veldig lokalt: det aktuelle rommet, men muligheten skal være der i å anlegge et slags balansert ventilasjonsanlegg med flere smarte vifter 

Lenke til kommentar

Artig lite prosjekt.

Har lenge vært inne på samme tanken og kom tilfeldig over denne nå. Jeg har også tenkt tanken på å bruke vifte men er fortsatt innstilt på å bruke servo til å åpne/lukke vinduet på soverommet da det er i kjelleretasjen med 25cm leca +10cm isolasjon med sponplater på innsiden og har ingen ventilåpning i veggen. For meg så er ikke sommerhalvåret et problem da husmor vinduet alltid  står i luftestilling når jeg sover. Min utfordring er når det er kaldere en -5 om vinteren da har det en tendens til å bli litt for kaldt på soverommet. Har nå en esp8266 med 2 18B20  temp sensorer kjørende. Bruker Blynk (legacy) til å les av på mobilen plus at data sendes til thingspeak hvor jeg kan lese av temperatur historikken. Driver eksperimenterer for å finne ut hvordan jeg skal styre servoen for å åpne å lukke vinduet ut fra utvendig temperatur og innvendig temperatur. Vurderer også en løsning hvor vinduet åpnes og lukkes med jevne mellomrom også når det er kaldere en ønsket for å få frisk luft. en ting jeg lot merke til i din video var at du kjørte full fart på servoen. jeg har ikke planer om å kjøre høyere hastighet en jeg må for å få nok torque til å åpne og lukke vinduet. Du kan lett styre servo hastighet ved å trippe serven så den bare går en og en grad med en liten delay. Jeg har brukt det på mine persienner med kun små micro servoer som er skjult inni profilen. til å begynne med kjørte jeg ful speed og skremte vettet av både den ene og den andre under mine eksperiment eller skal jet si ekskeriment. Når servoene vrei persiennene kom det et vræl av en annen verden og kona trodde det var kommet inn en kat som noen hadde tråkka på. Men nå med tripping så hører du de knapt og bare ser de beveger seg. Har bestilt noen 26kg servoer som jeg har tenkt å bruke til å åpne soverom vinduet, regner med å få de til uka så da får vi se om de er sterke nok med lang nok servoarm til å greie å åpne til maks luftestilling. Har du noe automasjon på ditt opplegg eller er det bare stemmestyrt?

Lenke til kommentar

Jeg gjorde en mye enklere variant, 12V PC-vifte, 12V Zigbee dimmer for LED. og styrer hastighet trinnløst via Home Assistant.
At 50% på dimmere ikke blir 50%/6V hastighet er ikke sååå nøye. Noctuaene er fine på støynivå og finnes jo i både 12 og 14cm varianter.
PWM-sensoren har jeg ikke bruk for. Jeg bruker øra for når vifta er "greit nok" på støy. Trenger ikke vite at den går på 789 rpm...

Automasjon ble da ganske enkel. 
- For varmt (blås ut litt varme).
- Inn med friskluft hvis det trengs=snu vifta.
- Sier sensorer at det er for tørt inne? Hent inn litt uteluft!
Vifta mi blåser ut da vi ikke trenger pollen inn i huset.
Her setter da bare fantasien grenser for automasjonen.

Lenke til kommentar

Gammel tråd, men @DarthVidar sin løsning var interessant. Nøyaktig hva jeg er ute etter. Har et anneks på hytta som er uisolert, og dermed blir det ekstremt varmt inne på sommeren. Mye varmere enn ute, siden huset magasinerer varme. Tanken er en vifte som trekker inn luft hvis ute>inne og motsatt. Tenkte et filter foran. Kjører du løsningen enda @DarthVidar? Hvilken vifte har du? Er det mulig å snu rotasjonsretningen på vifta?

Endret av Jørn R
Lenke til kommentar

Søkt litt rundt, og trøbler i grunn med en 12V zigbee dimmer som kan dimme ved å redusere spenningen. Tar gjerne i mot noen tips her.

Lenke til kommentar
Jørn R skrev (På 26.6.2022 den 23.04):

Søkt litt rundt, og trøbler i grunn med en 12V zigbee dimmer som kan dimme ved å redusere spenningen. Tar gjerne i mot noen tips her.

De fleste LED dimmere for 12/24V dimmer vel helst ved PWM og ikke ved å redusere spenningen.
Men for en motor gjør det kanskje samme nytten?
For å snu rettningen kan du kanskje bruke et relee?
 

Lenke til kommentar

Gjest
Skriv en kommentar...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.