Gå til innhold

Tråden for deg som liker hjemmeelektronikk og mikrokontrollere


Anbefalte innlegg

Videoannonse
Annonse

Den koden som du postet for timere fungerte ikke. Jeg forsøkte å google på feilmeldingene og fant at det var veldig mange postinger på Internett omkring det samme problemet. Jeg vet ikke hvorfor den ikke kjørte om det kan være snakk om forskjellige versjoner av libraries, forskjellige Arduino eller hva det kan være. Så Googlet jeg videre og fant fram til den koden som jeg postet. Den fungerer hos meg. Postet den for å ha den "skrevet ned" for senere bruk. Når det gjelder bruk av delay, så har du ganske rett i det du sier. Her er fra dokumentasjonen: 

"Avoid using long delays with delay() – it may cause connection breaks;"

https://docs.blynk.cc/

Lenke til kommentar
Bjerknez skrev (21 timer siden):

Strømbruken uten noe strømsparing ligger på rundt 80mA. Litt avhengig av hva den skal brukes til så kan du jo aktivere sleep mode og kun vekke den til live når du trenger den via koden etc. 

 

 

Bjerknez skrev (20 timer siden):

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. 

 

En enkel 18650-celle kan da gi et døgns bruk? Greit for testing men for permanent bruk hadde jeg nok satt det på nettstrøm. Eller funnet en annen radioprotokoll enn wifi..

Det irriterer litt at zigbee er så lite tilgjengelig. Om man skal tro på selvskrytet kan du vekke kretsen fra dyp søvn, lese av temperaturen, koble på nett og rapportere til server, så koble seg av og legge seg til å sove igjen. Alt dette på brøkdelen av et sekund og nesten uten å bruke energi. En knappcelle vil da få batterilevetid på flere år.. Bruk oppladbare batterier og en solcelle på størrelse med et kredittkort og levetiden blir definert av tiden det tar før loddetinnet utvikler mikrosprekker..

Lenke til kommentar
Kahuna skrev (38 minutter siden):

 

En enkel 18650-celle kan da gi et døgns bruk? Greit for testing men for permanent bruk hadde jeg nok satt det på nettstrøm. Eller funnet en annen radioprotokoll enn wifi..

Det irriterer litt at zigbee er så lite tilgjengelig. Om man skal tro på selvskrytet kan du vekke kretsen fra dyp søvn, lese av temperaturen, koble på nett og rapportere til server, så koble seg av og legge seg til å sove igjen. Alt dette på brøkdelen av et sekund og nesten uten å bruke energi. En knappcelle vil da få batterilevetid på flere år.. Bruk oppladbare batterier og en solcelle på størrelse med et kredittkort og levetiden blir definert av tiden det tar før loddetinnet utvikler mikrosprekker..

Hvor lenge batteriet varer kommer jo helt ann på hvor hyppig en sensor etc. blir avlest og om man har aktivert sleep mode etc. 

Lenke til kommentar
Bjerknez skrev (22 minutter siden):

Hvor lenge batteriet varer kommer jo helt ann på hvor hyppig en sensor etc. blir avlest og om man har aktivert sleep mode etc. 

Hvor effektivt er dette? Kan du sette den i dyp dvale og vekke den opp *uten* å aktivere wifi? Så kan du samle opp avlesningene og laste dem opp etter 50 avlesninger..  Hvor lang tid tar det å koble opp wifi?

Lenke til kommentar
1 hour ago, Kahuna said:

 

En enkel 18650-celle kan da gi et døgns bruk? Greit for testing men for permanent bruk hadde jeg nok satt det på nettstrøm. Eller funnet en annen radioprotokoll enn wifi..

Det irriterer litt at zigbee er så lite tilgjengelig. Om man skal tro på selvskrytet kan du vekke kretsen fra dyp søvn, lese av temperaturen, koble på nett og rapportere til server, så koble seg av og legge seg til å sove igjen. Alt dette på brøkdelen av et sekund og nesten uten å bruke energi. En knappcelle vil da få batterilevetid på flere år.. Bruk oppladbare batterier og en solcelle på størrelse med et kredittkort og levetiden blir definert av tiden det tar før loddetinnet utvikler mikrosprekker..

Hvorfor mener du zigbee er lite tilgjengelig?

Et kjapt søk på mouser finner over 70 devkit:
https://eu.mouser.com/Semiconductors/Engineering-Development-Tools/RF-Wireless-Development-Tools/Zigbee-802154-Development-Tools/_/N-90osh

Og ja til en applikasjon hvor du bare skal lese av temperaturen noen ganger i minuttet og sende resultatet over RF vil helt greit kunne oppnå mange års levetid (>10, om du er nøye) på en CR2032 celle. Å bygge inn solceller o.l. er totalt overkill, da er det bedre å bare sette en en større li-thionylkloridcelle (Som er det du finner i vann og gassmetre som er ment å vare 20+ år)

Det er helt kurrant å finne mikrokontrollere med standbystrøm < 1uA, rf (med nok minne for zigbee, og ferdige stacker) og en temperatursensor.

Det er vanskeligere å gjøre tilsvarende på wifi, men ikke helt umulig. Batteriet blir større men det finnes lavenergi wifi kretser.

Lenke til kommentar
12 minutes ago, Kahuna said:

Du sjekket prisene på de kitene du fant sammenliknet med priset på den D1-kretsen vi diskuterte?

De har ikke noen ublu kostnad som jeg kan se fra omkring EUR10. Ikke alibaba special prising, men som kjent pay peanuts get monkeys.

Hvis billigløsningen du velger krever en dyr powerløsning, har du da egentlig spart så mye?

Du finner forøvrig ali-specials for zigbee også, se f.eks: https://www.banggood.com/CC2530-Wireless-Module-ZIG-BEE-Wireless-Module-WSN-Wireless-Sensor-Networks-RF4CE-p-1589544.html?cur_warehouse=CN&rmmds=search

Hvis den er det den sier på beskrivelsen (og ikke en knockoff) er den mulig å drive fra knappecelle.

Endret av sverreb
  • Liker 1
Lenke til kommentar
Kahuna skrev (1 time siden):

Hvor effektivt er dette? Kan du sette den i dyp dvale og vekke den opp *uten* å aktivere wifi? Så kan du samle opp avlesningene og laste dem opp etter 50 avlesninger..  Hvor lang tid tar det å koble opp wifi?

I teroien skal dette være mulig ja, men da må det skrives til et minnekort. Litt avansert koding for en nybegynner, man ja, det er jo fullt mulig tror jeg. Dyp dvale skal være mulig da man kan "vekke opp" enheten ved hjelp av en av trigger pinnene. 

Har ikke prøvd dette selv, men har lest om andre som har prøvd dette. 

Da vil jo strømforbruket være ubetydelig. 

Lenke til kommentar
arne22 skrev (2 timer siden):

Ja, har lest at det skal finnes batteriløsninger som skal vare i årevis. Har ennå ikke helt forstått hva "virtual pins" er for noe og poster en video for senere referanse.

 

 

En viritual pin er en pin som ikke har noe fysisk connection til en pin. Altså en digital pin. 

Ved hjelp av koden kan man feks. si at hvis man trykker på en knapp i appen, så skal en led begynne å lyse og en buzzer skal lage en lyd, samtidig som en sensor skal avleses etc. 

Jeg kan legge inn koden jeg har brukt på Garasjeport åpneren senere i dag :) 

Lenke til kommentar
sverreb skrev (1 time siden):

De har ikke noen ublu kostnad som jeg kan se fra omkring EUR10. Ikke alibaba special prising, men som kjent pay peanuts get monkeys.

Hvis billigløsningen du velger krever en dyr powerløsning, har du da egentlig spart så mye?

Du finner forøvrig ali-specials for zigbee også, se f.eks: https://www.banggood.com/CC2530-Wireless-Module-ZIG-BEE-Wireless-Module-WSN-Wireless-Sensor-Networks-RF4CE-p-1589544.html?cur_warehouse=CN&rmmds=search

Hvis den er det den sier på beskrivelsen (og ikke en knockoff) er den mulig å drive fra knappecelle.

I det minste er priser og utvalg blitt bedre siden sist jeg sjekket. 👍

 

Lenke til kommentar
5 minutes ago, Kahuna said:

I det minste er priser og utvalg blitt bedre siden sist jeg sjekket. 👍

 

Merk at ikke alle radioer som er kapable til å drive 802.15.4 er lagd for utelukkende den protokollen. Så ikke alle devkit og devices som kan håndtere 802.15.4/zigbee har nødvendigvis de termene i navnet (Eller ligger på den siden hos distributørene)

Lenke til kommentar
2 hours ago, Bjerknez said:

En viritual pin er en pin som ikke har noe fysisk connection til en pin. Altså en digital pin. 

Ved hjelp av koden kan man feks. si at hvis man trykker på en knapp i appen, så skal en led begynne å lyse og en buzzer skal lage en lyd, samtidig som en sensor skal avleses etc. 

Jeg kan legge inn koden jeg har brukt på Garasjeport åpneren senere i dag :) 

Ja jeg hadde nok misstanke om at virtual pin var noe i den retning. Vil forsøke å teste det ut. Det vil være kjempeinteressant å lese koden for styring av garasjeport.

Jeg trodde ellers i første omgang at Blynk bare var noe slags hobbygreier til å leke seg med. Nå har jeg skiftet syn på den saken. Det ser jo ut til å være en profesjonell programvare som er gratis i det små og for hobbybruk, og som koster penger etterhvert som man eventuelt utvikler noe som er "kommersielt".

Det gjør jo at det blir veldig enkelt å komme i gang med IoT løsninger.

Endret av arne22
Lenke til kommentar

Her er koden jeg bruker for å åpne garasjeporten.

Hvis man ikke er hjemme og porten er åpen og man så lukker den via appen, så vil en "buzzer" gi et varselsignal i fem sekunder i garasjen som varsler at den lukkes. Dette for å fortelle dem som evt. skulle være der at porten snart går igjen. 

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

int relay = 16;
int magnet = 4;
int buzzer = 5;
int magnetValue;
int buttonPin = 13;
int ledState = 0;
int ButtonState;



bool Flag_buttonPressed = false; // Sets the button state as false

//Put WiFi cridentials and token here----------------------------------

char auth[] = "*****";
char ssid[] = "*****";
char pass[] = "*****";

//---------------------------------------------------------------------

BlynkTimer timer; // For activating the Blynk Timer

#define DoorIsOpened 1
#define DoorIsClosed 0

#define SignalCloseDoor LOW
#define NoSignalCloseDoor HIGH

void setup() {
  Blynk.begin(auth, ssid, pass); // Something that Blynk needs to connect to wifi
  Serial.begin(9600);
  digitalWrite(relay, NoSignalCloseDoor); // Sets the relay HIGH (that means open circuit)
  pinMode(buttonPin, INPUT);
  pinMode(relay, OUTPUT); // sets the relay as OUTPUT
  pinMode(magnet, INPUT_PULLUP); // Sets the magnet sensor as an INPUT_PULLUP
  pinMode(buzzer, OUTPUT); // Sets the buzzer as an output
  timer.setInterval(1000L, magnetSensor); // Runs the "magnetSensor" function every second
  timer.setInterval(100L, switchPin);
}

void switchPin(){
  ButtonState = digitalRead(buttonPin);
  if(ButtonState == 1){
      digitalWrite(relay, LOW);
      delay(1000);
      digitalWrite(relay, HIGH);
      Serial.println("Button pushed!");
    }
    else{
      Serial.println("Button released!");
    }
}

void magnetSensor() { // Reads the state of the door (closed or open)
  magnetValue = digitalRead(magnet);

  if (magnetValue == DoorIsOpened) { // If the door is open...
    Blynk.virtualWrite(V2, "GARASJEPORT ÅPEN"); // ...write "garage door is open" (translated to english) to the Blynk app
  }
  else { // If the door is closed...
    Blynk.virtualWrite(V2, "GARASJEPORT STENGT"); // ...write "Garage door is closed" (translated to english) to the Blynk app
    Flag_buttonPressed = false; // reset the flag because door is closed
  }
}

void buzzerTone() { // Makes a warning sound before garage door closes after button in Blynk app is pushed
  if (!Flag_buttonPressed && magnetValue == DoorIsOpened ) {
    Flag_buttonPressed = true;

    for (int i = 0; i < 5; i++) {
      tone(buzzer, 600);
      delay(500);
      noTone(buzzer);
      delay(500);
    }
  }
}

BLYNK_WRITE(V1) { //Blynk app button
  int pinData = param.asInt(); // Some code for sync the Blynk app button
  magnetValue = digitalRead(magnet);

  if (pinData == 1 && magnetValue == DoorIsOpened) {
    buzzerTone(); // Activate the warning sound
    digitalWrite(relay, SignalCloseDoor); //... Close the garage door
    timer.setTimeout(1000L, RELAYoff); // Makes the signal to the door last for half second to ensure that it closes
  }
  if (pinData == 1 && magnetValue == DoorIsClosed) {
    digitalWrite(relay, SignalCloseDoor);
    timer.setTimeout(1000L, RELAYoff); // Gives the garage opener half second of power to ensure that it closes
  }
}

void RELAYoff() { // turns the signal to the garage opener off
  digitalWrite(relay, NoSignalCloseDoor);
}

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

 

Lenke til kommentar

Å her er koden som jeg bruker på min ESP32 i kjelleren som leser temperatur og fuktighet samt printer dette til et display. samt sender det til appen så jeg hele tiden kan se temp og fuktighet i kjelleren.

box.thumb.JPG.6b6efa2be6b3b136675802934a386268.JPG

#include <LiquidCrystal_I2C.h>
#include <DHT.h>;
LiquidCrystal_I2C lcd(0x27, 20, 4);

byte CelciusSymbol[] = {
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};

#define DHTPIN 19     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE);

int chk;
float hum;  //Stores humidity value
float temp; //Stores temperature value

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

int sensorPin = 34;
int sensorValue = 0;
int redled = 14;
int blueled = 13;
int greenled = 12;

int freq = 5000;
int ledChannel = 14;
int ledChannel2 = 12;
int ledChannel3 = 13;
int resolution = 8;

BlynkTimer timer;

char auth[] = "*****";

char ssid[] = "*****";
char pass[] = "*****";

void startup() {
  lcd.init();
  lcd.backlight();
  ledcWrite(redled, 255);

  delay(1000);
  lcd.setCursor(0, 2);
  lcd.print("Ver.2.1");
  delay(1000);

  lcd.setCursor(0, 3);
  lcd.print("Starting up");
  delay(2000);

  ledcWrite(blueled, 0);
  ledcWrite(redled, 200);
  ledcWrite(greenled, 30);

  lcd.setCursor(11, 3);
  lcd.print(".");
  delay(500);

  lcd.setCursor(12, 3);
  lcd.print(".");
  delay(500);

  lcd.setCursor(13, 3);
  lcd.print(".");
  delay(500);

  lcd.setCursor(14, 3);
  lcd.print(".");
  delay(500);

  lcd.setCursor(15, 3);
  lcd.print(".");
  delay(500);

  lcd.setCursor(16, 3);
  lcd.print(".");
  delay(1000);

  lcd.clear();
}

void sensorData(){
    // some code for writing temperature and humidity values to serial monitor
  hum = dht.readHumidity();
  temp = dht.readTemperature();
  Serial.print("Fuktighet: ");
  Serial.print(hum);
  Serial.print(" %, Temperatur: ");
  Serial.print(temp);
  Serial.println(" Celsius");

  lcd.createChar(0, CelciusSymbol);

  // code for showing temperature innside the box
  lcd.setCursor(0, 0);
  lcd.print("FURTEBUA");

  lcd.setCursor(13, 0);
  lcd.print("Ver.2.0");

  lcd.setCursor(0, 1);
  lcd.print("--------------------");

  // code for showing temperature values on LCD display
  lcd.setCursor(0, 2);
  lcd.print("Temperatur: ");

  // code for showing temperature values on LCD display
  lcd.setCursor(13, 2);
  lcd.print(temp);
  lcd.write(0);

  lcd.setCursor(19, 2);
  lcd.print("C");

    // code for showing temperature innside the box
  lcd.setCursor(0, 3);
  lcd.print("Fuktighet: ");

  // code for showing humidity values on LCD display
  lcd.setCursor(13, 3);
  lcd.print(hum);
  lcd.print(" %");

  // some code that makes the value "sensorValue"
  sensorValue = analogRead(sensorPin); // read the value from the sensor
  Serial.println(sensorValue); //prints the values coming from the sensor on the

  // some statements that turns on and off the LCD display regards to light in the room
  if (sensorValue > 3000) {
    lcd.noBacklight();
    ledcWrite(redled, 0);
    ledcWrite(greenled, 0);
    ledcWrite(blueled, 15);
  }
  if (sensorValue < 3000) {
    lcd.display();
    lcd.backlight();
    ledcWrite(redled, 0);
    ledcWrite(greenled, 15);
    ledcWrite(blueled, 0);
  }
  // some code that sends virtual data to the Blynk app
  Blynk.virtualWrite(V5, temp);
  Blynk.virtualWrite(V6, hum);
}

void setup()
{
  Blynk.begin(auth, ssid, pass);
  timer.setInterval(2000L, sensorData);
  Serial.begin(9600);

  // configure LED PWM functionalitites
  ledcSetup(ledChannel, freq, resolution);
  ledcSetup(ledChannel2, freq, resolution);
  ledcSetup(ledChannel3, freq, resolution);

  // attach the channel to the GPIO to be controlled
  ledcAttachPin(redled, ledChannel);
  ledcAttachPin(greenled, ledChannel2);
  ledcAttachPin(blueled, ledChannel3);

  pinMode(redled, OUTPUT);
  pinMode(greenled, OUTPUT);
  pinMode(blueled, OUTPUT);
  pinMode(sensorPin, INPUT);
  ledcWrite(redled, 0);
  ledcWrite(greenled, 0);
  ledcWrite(blueled, 0);
  dht.begin();
  startup();
}

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

 

Lenke til kommentar
Bjerknez skrev (På 11.1.2021 den 5.52):

Batteriet i den gamle laptopen som jeg arvet etter min far gikk dukken i dag. Det betyr at jeg brøt forseglingen og plukket ut til sammen 9 celler 18650 batterier. Fire av batteriene var helt døde og målte bare noen mA. Men resten målte mellom 2.5 og 2.7 volt. 

SÅ disse skal få en såkalt "refresh" lading :)

battery.thumb.JPG.484c55a9626a40c2a217a93aae6da7bb.JPG

Etter at jeg har latt disse stå i ca. ett døgn på vedlikeholdslading så fant jeg ut at disse ikke var så mye å spare på lenger. De resterende seks batteriene som jeg målte til 2.5-2.7 volt ble VELDIG varme under lading. To av dem målte jeg til 84 grader(!!). I mitt hode er da disse cellene bare å kaste. Også var det to andre batterier som laderen viste en kapasitet etter lading på rundt 4.000mA. Ganske usannsynlig at det er tillfelle for omtrent ti år gamle godt brukte batterier. 

De resterende to batteriene så ut til å være OK, men disse hadde også sprikende resultater vedrørende kapasiteten. Det ene batteriet hadde 1.934mA og det andre 2.800mA. 

Jeg slo meg til ro med at dette var ustabile batterier og dem vil derfor havne i batteridunken merket søppel. 

_______________

Når det er sagt så har jeg sett mange som har klart og redde liv i gamle 18650 celler ved å få tak i gamle laptop batterier og batteridriller etc. 

Disse batteriene kan man jo fint bruke i hjemmeprosjekter samt lage seg egne små batteripakker. 18650 batterer er jo relativt dyre i Norge og er ikke veldig vanlige for forbrukere. Biltema selger disse for 99 kroner stykket og noe sier meg at man neppe får dem billgere enn dette i Norge over disk. 

Laptop batteriet som jeg åpnet opp var nok litt risikosport. Batteriet var alt for gammelt og man måtte ha strømmen til laptop koblet inn for å kunne bruke den. Dette har blitt gjort de siste to årene. Så disse batteriene var nok dømt til å ikke fungere skikkelig. 

Men nå kommer jeg til og ta i mot alt jeg kommer over av gamle laptop batterier for å ta ut 18650 cellene på innsiden. Jeg har bestillt meg krympestrømper beregnet for 18650 batterier slik at jeg kan få gamle batterier til å se nye ut. 

Her er en video som viser dette:

 

Lenke til kommentar
Kahuna skrev (17 timer siden):

Hvor effektivt er dette? Kan du sette den i dyp dvale og vekke den opp *uten* å aktivere wifi? Så kan du samle opp avlesningene og laste dem opp etter 50 avlesninger..  Hvor lang tid tar det å koble opp wifi?

Jeg har ikke testet dette så mye selv, men ja, man kan sette den i noe som kalles "hibernation" mode. Da da tror jeg den skal bruke rundt 10 micro ampere. Altså så lite at jeg tror selvutladingen til batteriet er høyere. 

La oss si man vekker enheten til live for å lese en eller flere sensorer og at den bruker 100mA mens den gjør dette. La os si prosessen varer 10 sekunder før den går i dvale igjen. Hvis vi sier at dette skal skje 6 ganger pr. dag så snakker vi ett minutt pr. dag hvor enheten bruker 100mA. 

Etter 60 dager og dermed 60 minutter har man brukt 100mA. Hvis batteriet er på 3.000mA kan man gange 60 dager med 30. Altså 1.800 dager eller ja.... flere år på kun ETT 18650 batteri.

Dette er kun en rask hoderegning og veldig teoretisk, men setter man opp dette skikkelig så tror jeg ett år er absolutt helt innafor. Så kan man jo koble to 18650 celler i parallell for å doble kapasiteten om ønskelig. 

Jeg fikk faktisk litt lyst til å teste dette når jeg tenker meg om..... :)

Endret av Bjerknez
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...