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

Anbefalte innlegg

Skrevet

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å.

 

 

  • Like 1
Skrevet

Å 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 :)

  • Like 3
Skrevet

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? :D

Skrevet

Å 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 :
image.png

 

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:


image.png

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å.

  • Like 2
  • Thanks 1
Skrevet

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.

  • Like 1
Skrevet

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.

Skrevet
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.

  • Like 1
Skrevet

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?

  • Like 2
Skrevet
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.

Skrevet (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 av Guahtdim
Skrevet
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.

Skrevet (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 av Guahtdim
  • Like 1

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.

Gjest
Skriv svar til emnet...

×   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.