Fermate Skrevet 29. oktober 2020 Skrevet 29. oktober 2020 Etter å la laget denne ble jeg utfordret til å lage en versjon med bare servo men som kan kjøre på batteri. Utfordringen ligger i batteri tiden. (Devicen må lytte på kommandoer men må også sove for å spare strøm) Første tanke er en Z_Uno i FLiRS mode. @petersv foreslår 433mHz i "hva har du gjort i dag" tråden. Jeg flytter denne kommunikasjonen hit til denne tråden fra nå. 1 Siter
Fermate Skrevet 29. oktober 2020 Forfatter Skrevet 29. oktober 2020 Å kjøre en servo med Z-Uno styrt fra HS gikk helt fint med det medfølgende eksemplet. Nå starter arbeidet med å få den til å sove og vekkes når det blir endringer i servoposisjonen 3 Siter
petersv Skrevet 29. oktober 2020 Skrevet 29. oktober 2020 Du må jo fortsatt ha en IC for å styre servoen og annen logikk, men jeg tenkte mer på å bruke en enkel 433 MHz mottaker for å trigge denne (wake on interrupt f.eks.) Det kan jo hende en esp32 i hibernation er en ide, den kan vekkes med i/o-interrupt og bruker kun 2.5µA i dvalemodusen. Hvis ikke det er kritisk å åpne luka innen et sekund eller to, så kan du gjøre livet ditt veldig enkelt med å kjøre et simpelt kall over wifi for å sjekke hva du ble vekket for (åpne eller lukke luka) og så gå tilbake til dvale. Det er ikke så "sexy", men det er enkle off the shelf komponenter og vil nok klare å kjøre i år på noen AA-batterier, servoen derimot vil nok bruke adskillig mer juice. Hva med solcellepanel på utsiden av luka? Siter
Fermate Skrevet 3. november 2020 Forfatter Skrevet 3. november 2020 Å jobbe med sleep-mode er slitsomt. Har en følelse av at FLiRS også gjør at Z-UNOen oppfører seg litt anderledes på en del områder. Men jeg har slått sammen en del eksempler (og knota ganske mye) og har en kjørbar løsning som det går ann å eksprimentere med : I sin aller enkelse form er koden slik #include <ZUNO_SERVO.h> #define SERVO_PIN 12 byte dimValue; ServoController servo(SERVO_PIN); ZUNO_SETUP_CHANNELS(ZUNO_SWITCH_MULTILEVEL(getter, setter)); ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_FREQUENTLY_AWAKE); void setup() { // will be called on wakeup pinMode(LED_PIN, OUTPUT); // setup pin as output pinMode(SW_PIN, INPUT_PULLUP); } void loop() { zunoSendDeviceToSleep(); // this function sends the device into sleep } void setter(byte value) { // Routine called when data from Zwave controller is received servo.begin(); servo.setValue(((word)value)*180/99); dimValue = value; } byte getter() { // Routine called for inquiry by Zwave controller return dimValue; } Problemet er at når koden sover så får en ikke inkludert Z-UNOen i Z-wave nettet. Jeg har derfor lagt på kode slik at om en jorder pinne 19 så vil den ikke gå i sleep: (Den blinker også da dioden for å fortelle at den er klar for include (eller exclude)) Spoiler #include <ZUNO_SERVO.h> #include "EEPROM.h" // for NZRAM use #define LED_PIN 13 // 13 pin - user LED of Z-Uno board #define SW_PIN 19 // Pin for inhibit sleep (for inclusion) #define SERVO_PIN 12 // byte dimValue; Alternative to saving in NZRAM // Connect servo PWM to Z-Uno digital pin 12 ServoController servo(SERVO_PIN); ZUNO_SETUP_CHANNELS(ZUNO_SWITCH_MULTILEVEL(getter, setter)); // device will wake up by user request and regulary listening for packets ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_FREQUENTLY_AWAKE); // ZUNO_SETUP_DEBUG_MODE(DEBUG_ON); // the setup routine runs once when you press reset: void setup() { pinMode(LED_PIN, OUTPUT); // setup pin as output pinMode(SW_PIN, INPUT_PULLUP); } // the loop routine runs over and over again forever: void loop() { if (digitalRead(SW_PIN)) { // Check if this pin is grounded zunoSendDeviceToSleep(); // this function sends the device into sleep } else { digitalWrite (LED_PIN, HIGH); // Blink to signal that not in sleep delay(1000); digitalWrite(LED_PIN, LOW); delay(1000); } } void setter(byte value) { // Routine called when data from Zwave controller is received servo.begin(); servo.setValue(((word)value)*180/99); NZRAM.put(0x0, &value, 1); // dimValue = value; // Alternativ to NZRAM } byte getter() { // Routine called for inquiry by Zwave controller byte temp; NZRAM.get(0x0, &temp, 1); return temp; // return dimValue; // Alternativ to NZRAM } Siden alle variable forsvinner når den sover har jeg lagret siste verdi i NZRAM slik at kontrolleren får riktig verdi om den poller. (Vet ikke om dette er nødvendig og har ikke testet det igjennom, men virket logisk på meg) Trykk 3 ganger på "Service" knappen for include/exclude. Når Z-UNOen er i sleep kan du ikke laste opp ny kode til den fra Arduino utviklermiljøet. Dette løses ved å sette den i "Rescue" mode: Trykk og hold "Service" knappen Trykk en gang på "Reset" knappen Slipp "Service" knappen. Slik ser den ut i HomeSeer: Jeg har ingen ventiler i huset som skal gå på batteri så jeg overlater til andre å eksprimentere videre med dette. Jeg kan godt 3D modelere noe om noen ønsker det, da jeg har ferdige mål på Flexitventilen. Det som blir spennende er jo hva batteritiden blir. Det skal vistnok kunne gå å fjerne en motstand (til en diode tror jeg) for å ytterligere senke strømforbruket. Jeg TROR ikke servoen bruker strøm når prosessoren sover, men her kunne en også brukt en pinne til å skru det av og på. 2 1 Siter
Fermate Skrevet 3. november 2020 Forfatter Skrevet 3. november 2020 Jeg kan godt lage en komplett "gjør slik" blogg for nybegynnere med hele greia fra å laste ned Arduino miljøet, legge til Z-Uno bibliotekene, upload til prosessor og includering/testing, men jeg gidder ikke det før noen fler har verifisert at batteritiden er ok. 1 Siter
Guahtdim Skrevet 3. november 2020 Skrevet 3. november 2020 Det du har gjort så langt er virkelig bra! Har du opplevd at du får forskjellige enheter definert i HS når du inkluderer på nytt selv om koden ikke har fått endret antall og type enheter? Min erfaring så langt med Z-uno og HS er at det er bittelitt bingo hva en output/input blir definert som. Men det er kanskje jeg som har gjort noe galt. Siter
Fermate Skrevet 4. november 2020 Forfatter Skrevet 4. november 2020 17 timer siden, Guahtdim skrev: Har du opplevd at du får forskjellige enheter definert i HS når du inkluderer på nytt selv om koden ikke har fått endret antall og type enheter? Min erfaring så langt med Z-uno og HS er at det er bittelitt bingo hva en output/input blir definert som. Men det er kanskje jeg som har gjort noe galt. Ja jeg har litt samme erfaring. Men jeg er usikker på om det skyldes HS eller Z_UNO'en Jeg jobbet ikke så mye med det og fikk aldri den "debug mode" greia til å funke, men oppfattet vel at det var viktig å ekskludere og inkludere på nytt hver gang jeg gjorde endringer i forholdet til Z-Wave delen av kortet. 1 Siter
Fermate Skrevet 4. november 2020 Forfatter Skrevet 4. november 2020 Ellers gjorde jeg noe små forsøk på å måle strømforbruk i går og der ligger det nok fremdeles noen utfordringer for batteri bruk: (Jeg hadde desverre et veldig dårlig måleinstrument med feil indre motstand men noen pekepinner mener jeg at jeg fikk ut) Det virker som om det å bruke spennings regulatoren på kortet sløser en del strøm. JA Servoen bruker strøm selv om prosessoren er i sleep. Ganske mye også (10mA ?) Her må en nok inn med et relee eller en transistor, men det burde være greit å få til med en pinne på UNO'en Når Z_UNO'en er i sleep bruker den VELDIG lite strøm Antakeligvis burde en da bruke separate batterier på prosesseren og servoen for å unngå problemet med spenningsforskjellene? 2 Siter
Guahtdim Skrevet 4. november 2020 Skrevet 4. november 2020 3 hours ago, Fermate said: Antakeligvis burde en da bruke separate batterier på prosesseren og servoen for å unngå problemet med spenningsforskjellene? Det er kanskje ikke så dumt. Jeg har ingen erfaring med servoer, men da blir utfordringen kanskje å styre servo siden jord for servo er noe annet enn jord for z-uno. Her er jeg veldig uttrygg siden min kunnskap om elektronikk er særdeles liten (30+ år siden VK1 elektronikk), men jeg synes å huske at to spenningskilder kan bli en utfordring når man har elektronikk som skal styres på tvers av disse og man ikke kan adskille signaler med lys eller mekanikk. Siter
Guahtdim Skrevet 5. november 2020 Skrevet 5. november 2020 (endret) Etter å ha sett på tech specs: Power consumption on 3.3 V: in always listening mode 50 mA in sleep mode 1 mA (about 7 μA if DC-DC is turned off by unsoldering R12) in FLiRS mode 1 mA (about 70 μA if DC-DC is turned off by unsoldering R12) Så man må gjøre litt ekstra for å få den ned på batteribruk ved 3 volt. Power consumption on 5 V: in always listening mode ∼ 30 mA (can be lowered by using external switching DC-DC) Power consumption on 7–18 V: in always listening mode ∼ 35 mA (can be lowered by using external switching DC-DC) Endret 5. november 2020 av Guahtdim Siter
Fermate Skrevet 5. november 2020 Forfatter Skrevet 5. november 2020 23 timer siden, Guahtdim skrev: Det er kanskje ikke så dumt. Jeg har ingen erfaring med servoer, men da blir utfordringen kanskje å styre servo siden jord for servo er noe annet enn jord for z-uno. Neida, de har samme jord så det går fint (har testet med å kjøre Z_UNO'en på 3,3 og servoen på 5V fra "samme" strømforskyning) 4 timer siden, Guahtdim skrev: in FLiRS mode 1 mA (about 70 μA if DC-DC is turned off by unsoldering R12) Hm ett AA batteri (Varta Alcaline) er oppgitt å ha 2,97Ah. Med 1mA skulle det bli 2970Timer = 123 Dager. Når den våker i noen sekunder for å kjøre servoen trekker den jo mer men det er max 5-6 sekunder. Men i 70uA så er vi oppe i 5År... Jeg tror ikke jeg skal forsøke å lodde av noe så smått som R12 men kanskje jeg kunne "knekke" den av... Har bare ett eks. av ZUNO liggende så det får bli neste gang jeg skal bruke en (på batteri) Jeg er ikke så god på transistorer så om noen kunne gi meg et skjema for å skru av/på strømmen til servoen fra en pinne så hadde det vært kult. Siter
Guahtdim Skrevet 5. november 2020 Skrevet 5. november 2020 (endret) 4 hours ago, Fermate said: Jeg er ikke så god på transistorer så om noen kunne gi meg et skjema for å skru av/på strømmen til servoen fra en pinne så hadde det vært kult. Jeg har prøvd noe lignende selv: Hvis du ser på fritzingen så er det en NPN transistor der som jeg styrer fra kode for å slå av og på fuktighetsmåleren. Bedre forklart https://create.arduino.cc/projecthub/sumanbargavr/switching-using-transistor-c9114a Endret 5. november 2020 av Guahtdim 1 Siter
Anbefalte innlegg
Bli med i samtalen
Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.