www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Arduino Nano- stanje releja

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 866
Aktiv.: 3.89
Kraj: Dobrepolje

PrispevekObjavljeno: Sob Jan 28, 2023 4:57 pm    Naslov sporočila:  Arduino Nano- stanje releja Odgovori s citatom

Hi

Spodaj pripet program deluje OK, po mojih pričakovanjih. Program zapisuje KWh na SD kartico v obdobju 15.minut, zapiše tudi datum in uro, ter zunanjo temperaturo.
Pulz iz števca prihaja na prekinitveni pin D2 (int0)

To je poraba toplotne črpalke.

Rad pa bi še, da mi izpisuje na SD kartico še podatek kdaj se vklopi odtaljevanje (defrost).
Probal sem že razne načine pa mi ne uspe napisati kode za ta del.

Kako naj deluje:
ko se vklopi odtaljevanje pritegne Rele in on drži cca 5-10 minut. Preko kontaktov releja imam pullup vezavo na Arduino Nano pin D6. Mora pa še vedno delovati zapis porabe.

Rad bi samo to, ko Rele potegne, da se v tem trenutku zapišejo na SD kartico podatki datum in čas vklopa releja, ter zunanja temperatura, ter besedica " ON " in to samo enkrat pri vklopu releja in to je vse.

Pri meni pa to stalno zapisuje, nikakor mi ne uspe samo en zapis.

Prosim za kakšen dober namig. Hvala.

lp, marko



Koda:


void loop() {


 dt = clock.getDateTime();
 
  sensors_zunaj.requestTemperatures ();
  float t1 = sensors_zunaj.getTempCByIndex (0);

 
if ((stevec_1 == 900) && (Zastavica == 0)){   //  900 = 15 min
  stevec_1 = 0;
 
  Serial.println(x, DEC); //print x to serial monitor

  sensors_zunaj.requestTemperatures ();
  float t1 = sensors_zunaj.getTempCByIndex (0);
  Serial.println (t1);

P = (a / 0.25);
P = P * 1000;

dt = clock.getDateTime();
   
  Serial.print("Datum in ura: ");
 
  Serial.print(dt.year);   Serial.print("-");
  Serial.print(dt.month);  Serial.print("-");
  Serial.print(dt.day);    Serial.print(" ");
  Serial.print(dt.hour);   Serial.print(":"); 
  Serial.print(dt.minute); Serial.print(","); 
  Serial.print(dt.second); Serial.println("");
 
  Serial.print(kWh,4); // napiši izračunano vrednost kWh ob prekinitvi
  Serial.print("  skupne kWh ");
  Serial.println("");
  Serial.print(a,4);
  Serial.print("  kWh v 15 minutah ");
  Serial.println("");
  Serial.print(P);
  Serial.print("  Wati v 15 minutah ");
  Serial.println("");
 
     
 
  myfile = SD.open("arduino.txt", FILE_WRITE);
 
  if(myfile){    // izpisi na SD kartico

  myfile.print(dt.day);    myfile.print(".");
  myfile.print(dt.month);  myfile.print(".");   
  myfile.print(dt.year);   myfile.print("; ");

  myfile.print(dt.hour);   myfile.print(":"); 
  myfile.print(dt.minute); myfile.print(","); 
  myfile.print(dt.second); myfile.print("; ");

  myfile.print(kWh,4);   
  myfile.print("; ");
  myfile.print(a,4);   
  myfile.print("; "); 
  myfile.print(P);
  myfile.print("; ");
  myfile.println(t1);

  myfile.close();
 
  a = 0.0000;
 
  }   

 }
}

// ==================================================================

void ISR_meritev() {     

Zastavica = 1;
  x++;
  kWh = kWh + Pulz;
  a = a + Pulz;
 
Zastavica = 0;
  }
 


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3353
Aktiv.: 16.97

PrispevekObjavljeno: Ned Jan 29, 2023 8:58 am    Naslov sporočila:   Odgovori s citatom

Detekcijo odtaljevanja bi jaz naredil z eno pomožno spremenljivko. Ko program prvič zazna odtaljevanje, izvede potrebno kodo, potem pa še pomožno spremenljivko postavi na 1. Ko je ta pomožna spremenljivka na 1, naj program ne preverja, če je odtaljevanje v teku. Ko program zazna konec odtaljevanja (rele =0), pomožno spremenljivko postavi na 0 in spet dovoli preverjanje vklopa odtaljevanja.


Nisem pa gledal celega tvojega programa, Arduino jezika ne znam.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 866
Aktiv.: 3.89
Kraj: Dobrepolje

PrispevekObjavljeno: Sre Feb 01, 2023 12:38 pm    Naslov sporočila:   Odgovori s citatom

Nekako mi je uspelo. V void loop() sem vstavil del kode, ki je spodaj in zaenkrat deluje kar v redu.

Verjetno se da celotno kodo še izboljšati..... kako, ja pa premalo znanja.

Pomanjkljivos je to, da včasih, ko potegne rele vpiše po dva rezultata, me pa to ne moti.

Koda:


  buttonState = digitalRead(buttonPin);
 
  if (buttonState != lastButtonState) {
    if(buttonState == LOW) {
    buttonPushCounter++;
   
   
      Serial.println("ON");
      Serial.print("število pritiskov: ");
      Serial.println(buttonPushCounter);

    myfile = SD.open("arduino.txt", FILE_WRITE);
   
 if(myfile){    // izpisi na SD kartico

  myfile.print(dt.day);    myfile.print(".");
  myfile.print(dt.month);  myfile.print(".");   
  myfile.print(dt.year);   myfile.print("; ");

  myfile.print(dt.hour);   myfile.print(":"); 
  myfile.print(dt.minute); myfile.print(","); 
  myfile.print(dt.second); myfile.print("; ");

  myfile.print(0, DEC);   
  myfile.print("; ");
  myfile.print(0, DEC);   
  myfile.print("; "); 
  myfile.print(0, DEC);
  myfile.print("; ");
  myfile.print(t1);
  myfile.print("; ");
  myfile.println(9, DEC);
 
  myfile.close();
 
  }         
    } else {
      Serial.println("OFF");
    }
    delay(500);
  }
  lastButtonState = buttonState;





lp, marko
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mato1111
Član
Član



Pridružen-a: Pet 28 Dec 2012 14:42
Prispevkov: 612
Aktiv.: 4.45
Kraj: Vrhnika

PrispevekObjavljeno: Sre Feb 01, 2023 1:20 pm    Naslov sporočila:   Odgovori s citatom

marko11 je napisal/a:
Pomanjkljivos je to, da včasih, ko potegne rele vpiše po dva rezultata...

Mogoce je vzrok odskakovanje kontakta (debounce). Programsko resis tako, da beres vhod recimo vsakih 40ms namesto v vsaki zanki.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3353
Aktiv.: 16.97

PrispevekObjavljeno: Sre Feb 01, 2023 6:05 pm    Naslov sporočila:   Odgovori s citatom

Da, pri vseh tipkah, relejih, stikalih enkoderjih,... skratka pri vseh kontaktih na vhodu mikrokontrolerja je potrebno narediti debounce. Hardverski, softverski, ali pa oba skupaj.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
NacMan
Član
Član



Pridružen-a: Čet 12 Jul 2007 20:01
Prispevkov: 28
Aktiv.: 0.14
Kraj: Krško

PrispevekObjavljeno: Sre Feb 01, 2023 9:44 pm    Naslov sporočila:   Odgovori s citatom

Lahko samo tole razložiš (iz prvega post-a, v tvoji glavni zanki?
Koda:

P = (a / 0.25);
P = P * 1000;


In še: O kakem števcu je govora, tisti ki pošlje pulz, in sproži ISR...
Koda:

void ISR_meritev() {     

Zastavica = 1;
  x++;
  kWh = kWh + Pulz;
  a = a + Pulz;
 
Zastavica = 0;
  }

Hvala.

_________________
love the smell of a napalm in the morning
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 866
Aktiv.: 3.89
Kraj: Dobrepolje

PrispevekObjavljeno: Pet Feb 03, 2023 12:30 pm    Naslov sporočila:   Odgovori s citatom

NacMan je napisal/a:
Lahko samo tole razložiš (iz prvega post-a, v tvoji glavni zanki?
Koda:

P = (a / 0.25);
P = P * 1000;


In še: O kakem števcu je govora, tisti ki pošlje pulz, in sproži ISR...
Koda:

void ISR_meritev() {     

Zastavica = 1;
  x++;
  kWh = kWh + Pulz;
  a = a + Pulz;
 
Zastavica = 0;
  }

Hvala.


Tukaj pretvorim kWh v Watte porabljenih v 15 minutah
Razlaga: (1/60)*15min=0,25h
Primer: P=(0,195kWh/0,25h) = 0,780 kW
P= 0,780*1000= 780W

Imam števec porabe kWh, ki daje 400 pulzov za kWh.

Lp,
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
NacMan
Član
Član



Pridružen-a: Čet 12 Jul 2007 20:01
Prispevkov: 28
Aktiv.: 0.14
Kraj: Krško

PrispevekObjavljeno: Pet Feb 03, 2023 1:44 pm    Naslov sporočila:   Odgovori s citatom

Ok, sem nekako tako predvideval Smile
Hvala za razlago. Zanimiv projekt.

_________________
love the smell of a napalm in the morning
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 68 dni


Powered by phpBB © 2001, 2005 phpBB Group