Gå til innhold

Tråden for deg som liker hjemmeelektronikk og mikrokontrollere


Anbefalte innlegg

Bjerknez skrev (13 timer siden):

Jeg bruker kun wemos D1 Mini eller ESP32, uavhengig om jeg trenger wifi eller ikke. Kjelt og kunne gå tilbake senere og legge til wifi mulighet etc. ved behov

Hvordan er strømbruken når du bruker wifi? Utelukker det bruk av batterier?

Lenke til kommentar
Videoannonse
Annonse

Jeg tenker at batterier brukes best i kombinasjon med disse som "nødstrøm". Så sant man da ikke bare skal bruke disse til å feks. lese av temperatur en gang i timen eller noe. Da kan man aktivere sleep mode og kun vekke dem opp for å lese sensoren etc. Da bruker den jo svært lite strøm og kan sikkert fungere i månedsvis på ett par 18650 batterier i paralell som gir en kapasitet på rundt 6.000ish mA. 

 

Lenke til kommentar
16 hours ago, Bjerknez said:

Jeg kjøper alt fra AliExpress eller evt. Banggood etc. jeg kjøper gjerne større kvanta. 10stk +. Eneste bakdelen er at det tar en måneds tid før man har dem i postkassa. Koster jo slikk og ingenting. 

har aldri opplevd problemer med noe kjøpt derfra. 

Mange takk. Har prøvd Banggood, og jeg det tok en måned, men det var ingen problemer. (Fikk et lass med tilskåret plastikk som skulle være en robot. Servoene manglet slik at jeg ikke har montert den sammen enda.) Det sto heller ikke i produktopplysningene at servoer skulle følge med, så det fungerte jo egentlig godt nok.

Lenke til kommentar

"Er jeg på jordet og er det noen som vet bedre og som kan rettlede meg?"

Ja, jeg var på jordet og postet en påstand som ikke stemte i det hele tatt. Jeg hadde ikke skjønt hvordan man bruker "virtuelle pinner" Sletter posten for å unngå "vranglære på Internett".

 

Endret av arne22
Lenke til kommentar

Hvis jeg forstår deg riktig så virker det som om det du nevner lar seg gjøre, men krever nok litt ekstra koding. Det kan virke som du har høyere krav til Blynk enn det jeg har så jeg er usikker på om jeg kan hjelpe deg her. Jeg er også litt usikker på om jeg klarer å sette meg inn i den faktiske problemstillingen din skikkelig. 

Men med blynk kan man jo bruke "virtual pins" og man må sette opp en timer etc. (Blynk timer). 

Lenke til kommentar
arne22 skrev (1 time siden):

Litt mye "spamming" fra min side, men jeg forsøker bare å finne ut av tingene. Jeg registrere meg på Blynk Forum og det aller første spørsmålet jeg så, øvert på forumet som spørsmål no1 det var faktisk det som jeg lurte på. Svaret ser ut til å være: Man kan godt bruke både Blynk fjernstyring og "lokale knapper" for styring, men det er litt "småkomplisert" å sette opp.

https://community.blynk.cc/t/control-lights-with-blynk-and-physical-buttons/50248

For meg så er dette med både remote og lokal kontroll et "must".

Edit:

Men det ser ut som at programmeringen blir helt annerledes enn for "vanlig Arduino" og at prinsippet er at "fysiske knapper" gir input til Blynk som så setter utganger og slikt. Den "vanlige" lokale styringen av utganger i regi av "Arduino selv" ser ut til å være overstyrt av Blynk.  

La inn et spørsmål for videre oppklaring:

https://community.blynk.cc/t/arduiono-will-automated-system-run-when-mobile-app-is-down/50851

Jeg bruker en god del ESP32 og ESP8266 ifb med hjemmeautomasjon og da skjer all kommunikasjon via MQTT. Der kan du velge om du vil sette opp en egen server eller bruke en ekstern leverandør, men for meg som har fast ip er det null stress å hoste det selv og holde alle data innomhus.  Og hvis du ikke skal ha tilgang eksternt trengs det heller ikke fast ip.
Blynk og slike tjenester har jeg ikke brukt. Det jeg gjør er feks i tilfellet med en termostat er at all regulering foregår lokalt og så sender jeg kun settpunktet som jeg skriver til EEPROM slik at det blir lagret i tilfelle strømbrudd. Da operer den lokalt men kan kontrolleres remote. 


I garasjen bruker jeg flere inputs fra forskjellige ESP'er for å justere ovnen slik at den feks ikke fyrer for kråka hvis porten eller døren står åpen for lenge. Men her har jeg lagt inn slik at alle enheter sender en puls hvert 5 sekund hvor de veksler mellom 0 og 1. Så hvis det telegrammet er likt i mer enn 5 sekunder går den i lokalmodus og bryr seg ikke om port eller dør er åpen. Da bare fyrer den på ift settpunktet (bedre å bruke litt strøm enn at ting fryser i garasjen pga forstyrrelser på WiFi).


På den varnnbårne varmen bruker jeg også en som styrer aktuatorene direkte fra et overordnet system kalt Homeseer, her brukes det litt mer logikk ift ønsket temperatur, faktisk temperatur og utetemperatur. Men her også, hvis det ikke kommer signal fra Homeseer på 5 minutter går det i backup mode som tilsier en satt tid for åpen og en satt tid for lukket ila en time. Det er forskjellige per rom og noen rom er det ikke noe i det hele tatt pga jeg ikke har varme på der. Jobber med en funksjon slik at så lenge den har kontakt så sender den også hva forholdet mellom åpen og lukket skal være i tilfelle den går i backup, da vil det være bedre tilpasset situasjonen den kan havne i der og da.

Dette er da min tilnærming på ting og det virker for meg ;)  Og over engineering er en del av spillet siden jeg må tenke økonomi og effektivitet når jeg holder på på jobb :p 

Lenke til kommentar
2 hours ago, Bjerknez said:

Jeg er også litt usikker på om jeg klarer å sette meg inn i den faktiske problemstillingen din skikkelig. 

Praktisk eksempel: En lyskilde skal styres automatisk vha LDR/Arduino/Releer. Det skal også finnes mulighet for fjernstyring via Blynk. Den automatiske styringen via Arduino skal ikke stanse opp op grunn av at man bruker Blynk.

Man skal ha både en "lokal automatikk" som kan kjøre uavhengig av Blynk og mulighet for fjernstyring via mobiltelefon.

Skal forsøke en gang til. Mulig at det bare er fingertrouble fra min side.

Endret av arne22
Lenke til kommentar
arne22 skrev (33 minutter siden):

Praktisk eksempel: En lyskilde skal styres automatisk vha LDR/Arduino/Releer. Det skal også finnes mulighet for fjernstyring via Blynk. Den automatiske styringen via Arduino skal ikke stanse opp op grunn av at man bruker Blynk.

Man skal ha både en "lokal automatikk" som kan kjøre uavhengig av Blynk og mulighet for fjernstyring via mobiltelefon.

Skal forsøke en gang til. Mulig at det bare er fingertrouble fra min side.

Forstår jeg deg riktig så tror jeg dette er fullt mulig og jeg gjør det selv hele tiden. I garasjen har jeg en ESP32 som har tre oppgaver.

1. Den skal lese magnetswitchen til garasjeporten.
2. Den skal slå på lyset i taket hvis magnetswitch kontakten brytes (slår på lys når porten er åpen)
3. Den sjekker temperaturen på utsiden av garasjen og sender informasjonen til meg i Blynk appen. 

Det er punkt tre over som gjør at jeg trenger wifi, slik at jeg får informasjonen i appen. Hvis det blir brudd i internetten så får jeg elvsagt ikke noen oppdatert temperaturmåling sendt til appen, men de andre sensorene virker jo som dem skal. Lys slår seg på og av npr porten åpnes /lukkes. 

Var det det du mente?

Lenke til kommentar

Slik ser den nåværende koden ut til enheten jeg snakker om over:

#include "OneWire.h" 
#include "DallasTemperature.h"

OneWire oneWire(22);
DallasTemperature tempSensor(&oneWire);

#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

int relay = 13;
int magnet = 5;
int magnetValue;

//WiFi and token data------------------------------------------
char auth[] = "******";
char ssid[] = "******";
char pass[] = "******";
//-------------------------------------------------------------

BlynkTimer timer;

void setup(){
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  tempSensor.begin();
  digitalWrite(relay, HIGH);
  pinMode(relay, OUTPUT);
  timer.setInterval(10000L, TempReading);
  timer.setInterval(1000L, magnetSensor);
  timer.setInterval(60000L, WiFiCheck);
}

void WiFiCheck(){
if(WiFi.status() == WL_CONNECTED){
  Serial.print("WiFi Status: ");
  Serial.println("Connected!");
}
else{
WiFi.reconnect();
Serial.print("WiFi Status: ");
Serial.println("NOT connected...");
}
}

void magnetSensor(){
  magnetValue = digitalRead(magnet);
  if(magnetValue == 1){
    digitalWrite(relay, LOW);
  }
  else{
    digitalWrite(relay, HIGH);
  }
}

void TempReading(){
  tempSensor.requestTemperaturesByIndex(0);
  Blynk.virtualWrite(V3, tempSensor.getTempCByIndex(0));
}


void loop() {
Blynk.run();
timer.run();
}

 

Lenke til kommentar

Når du bruker Blynk, så unngå å bruke "delay" i koden. Du er trolig kjent med dette, men delay stopper jo alt og setter alt på pause. også synkroniseringen med Blynk, noe som skaper problemer. 

Lag egne "functions" og legg en timer til disse, slik jeg har gjort i koden over. Det eneste som skal befinne seg under "void loop()" er "Blynk.run" og "timer.run()". Sistnevnte kun hvis du bruker en timer.

Lenke til kommentar

Så selv om kontakten med Blynk brytes, så vil timeren fortsatt fungere lokalt. men man kan selvsagt da ikke regne med å få ut noe data til Blynk appen når det ikke er noen connection. '

Beklager mange poster... men kommer på ting underveis :) 

Endret av Bjerknez
Lenke til kommentar

Jeg vet svært lite om hvor mye du kan fra før, men her er et supersimpelt eksempel på hvordan man bruker SimpleTimer biblioteket. Denne timeren bruker millis og intervallet er satt til 1000ms (ett sekund) for funksjonen som jeg har kalt "printSerial" (void printSerial())

Du kan ha mange slike timere og vær funksjon du lager kan ha sin egen timer og ingenting vil stoppe de andre timerene som kjører. 

example.thumb.PNG.2113be2bf1326f2627fed619e320b8fe.PNG

Lenke til kommentar
2 hours ago, Bjerknez said:

Beklager mange poster... men kommer på ting underveis :) 

Nei, akkurat nå har vel jeg vært verst i så måte. 🙂

Det er vel slik at man liker å finne ut av ting og få satt dem i system.

Har testet på nytt og nå fungerte det helt fint med "lokal kontroll" og "Blynk kontrol" samtidig. Testet bare med å styre en utgang med Blynk og en med "fysisk knapp" og nå så fungerte det problemfritt. 

Når det gjelder delay funksjonen så oppdaget jeg at den kan være problematisk. Hvis man skal lage en sekvensstyring, altså noe som skjer i rekkefølge, for eksempel i 5 minutter, så må man stå å holde stoppknappen inne til siste sekvens er ferdig. Dette skyldes at programmet "henger" fram til alle deley'ene er ferdig. Programmerte min egen timer ved hjelp av noe som het "millis", tror jeg det var. (En slags innebygd klokke.)  (Da henger den ikke, den sjekker stoppfuksjonen hver tiendels sekund eller noe slikt.)

https://www.arduino.cc/reference/en/language/functions/time/millis/

Har ikke prøvd SimpleTimer og vil teste den ut.  

Mange takk for veldig interessant program. Vil forsøke å få tak en slik ESP32,

Laget min test med å bare legge inn "programlogikk" i selve loopen. Det fungerte også. Mulig at ditt program kjører på en måte som er mer effektivt. Lager det selv så enkelt som mulig i alle fall i starten.

Edit: Ser at SimpleTimer fungerer ved hjelp av millis().

https://github.com/kiryanenko/SimpleTimer/blob/master/SimpleTimer.cpp

Da kan man bruke SimpleTimer i stedet for å programmere dette selv. Søkte masse på Google etter en slik ferdig timer funksjon uten å finne den, så dette var også "super bra"!

Endret av arne22
Lenke til kommentar

Når koden begynner å bli lang så liker jeg at det er så oversiktlig som mulig. Derfor liker jeg å bruke egne funksjoner og navngi disse, samt gi dem en timer. Om man gjør dette ved hjelp av SimpleTimer eller bare millis i koden går trolig på ett ut. 

Jeg liker uansett ikke å kaste all kode under loop(). Det blir til slutt bare en stor smørje synes jeg. Vertfall for en som meg som ikke er noen proff på området. jeg har akkurat begynt å lære meg dette selv. :) 

Lenke til kommentar

Av en eller annen grunn så kjørte ikke timereksemplet. Skulle jeg gjette så skyldes det forskjellige utgaver av Arduino. Fant dette programmet på nett, ett eller annet sted, og det kjørte:

*****

#include <SimpleTimer.h>

// Create a first timer and specify its interval in milliseconds
SimpleTimer firstTimer(5000);
// Create a second timer
SimpleTimer secondTimer;

// A flag indicates, that a first timer is ready
bool flag = false;

void setup()
{
    Serial.begin(9600);

    // Set an interval to 3 secs for the second timer
    secondTimer.setInterval(3000);
}

void loop()
{
    if (firstTimer.isReady() && !flag) {            // Check is ready a first timer
        Serial.println("5 seconds have passed");
        // Do something ...

        // Set the flag so as not to fall into this condition
        flag = true;
    }

    if (secondTimer.isReady()) {                    // Check is ready a second timer
        Serial.println("Called every 3 sec");
        // Do something ...
        secondTimer.reset();                        // Reset a second timer
    }
}

 

Link:

https://github.com/kiryanenko/SimpleTimer

Endret av arne22
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...