Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Arduino come timer relè luci natalizie

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] Arduino come timer relè luci natalizie

Messaggioda Foto Utentedanielepower » 8 dic 2015, 22:52

Salve EY!
Ultimamente ho trascurato il forum ma, entrando nel clima natalizio, si hanno nuove idee e quindi nuovi problemi; che solo grazie a voi riesco a risolvere :-)

Mi è venuto in mente di utilizzare Arduino come Timer per le luci natalizie esterne. Il progetto non è molto complesso ma, essendo ignorante in materia di linguaggio C, per me lo è.
Ho cercato in rete ed ho trovato QUESTO che fa (dovrebbe fare) proprio al caso mio.

/Spero di non infrangere il regolamento del forum/

componenti occorrenti:
1Arduino ;
Board 8 relè;
RTC - DS1307
2 Resistenze da 1K (pullup)
1 Oscillatore da 32.768Mhz
1 Porta batteria tampone per circuiti stampati
1 Batteria tampone da 3V
Cavetteria varia;
Breadboard


Schema collegamento qui

Codice:
Codice: Seleziona tutto
/*
2013-11-20
Applicazione realizzata da Ivan Scordato, tutto il materiale
disponibile sul sito EMC ELETTRONICA
http://it.emcelettronica.com/blog/18420
Contatti: ivanwebmaster@rocketmail.com
*/

// di seguito includo la libreria per la comunicazione su bus I2C
#include

int start_h=00; // ora in cui si deve attivare il relè
int start_m=00; // minuto in cui si deve attivare il relè
int start_s=00; // secondo in cui si deve attivare il relè
int end_h=00; // ora in cui si deve disattivare il relè
int end_m=00; // minuto in cui si deve disattivare il relè
int end_s=00; // secondo in cui si deve disattivare il relè
  // per comodità eseguo la conversione
// dell'orario di accensione in secondi
int start_secondi = start_s+ start_m*60 +start_h*60*60;
  // per comodità eseguo la conversione
// dell'orario di spegnimento in secondi
int end_secondi = end_s+ end_m*60 +end_h*60*60;
int releacceso=0;

void setup()
{
    pinMode(2, OUTPUT);    // PIN DOVE E' COLLEGATO IL RELE'
   
  // inizializzo la comunicazione seriale
  Serial.begin(9600);

  // inizializzo la libreria
  Wire.begin();

  // adesso, inizializzo la comunicazione con il DS1307.
  // L’indirizzo del DS1307 di default è 0x68
  Wire.beginTransmission(0x68);
  // il primo byte stabilisce il registro
  Wire.write((byte)0x00);
  // imposto l’orario e la data
  Wire.write((byte)0x00); // 1° byte SECONDI da 0x00 a 0x59
  Wire.write((byte)0x10); // 2° byte MINUTI da 0x00 a 0x59
  Wire.write((byte)0x80 | 0x10); // 3° byte ORE da 0x00 a 0x24
  Wire.write((byte)0x01); // 4° byte GIORNO della settimana da 0x01 a 0x07
  Wire.write((byte)0x21); // 5° byte GIORNO del mese da 0x00 a 0x31
  Wire.write((byte)0x03); // 6° byte MESE da 0x00 a 0x12
  Wire.write((byte)0x12); // 7° byte ANNO 0x00 a 0x99
  Wire.endTransmission();
}

void loop()
{
  // inizzializzo la trasmissione partendo dall'indirizzo 0x00
  Wire.beginTransmission(0x68);
  Wire.write((byte)0x00);
  Wire.endTransmission();

  // richiedo 7 byte dal dispositivo con indirizzo 0x68
  Wire.requestFrom(0x68, 7);
  // recupero i 7 byte relativi ai corrispondenti registri
  byte secondi = Wire.read();
  byte minuti = Wire.read();
  byte ora = Wire.read();
  byte giorno_sett = Wire.read();
  byte giorno_mese = Wire.read();
  byte mese = Wire.read();
  byte anno = Wire.read();
     // di seguito la variabile per convertire l'ora corrente in secondi
  int Secondigiorno = secondi+ minuti*60 +ora*60*60;
     // stampo sul monitor seriale la data corrente
  Serial.print("Ora corrente: ");
  Serial.print(ora, HEX);
  Serial.print(":");
  Serial.print(minuti, HEX);
  Serial.print(":");
  Serial.println(secondi, HEX);

  Serial.print("Giorno della settimana: ");
  Serial.println(giorno_sett, HEX);

  Serial.print("Data corrente: ");
  Serial.print(giorno_mese, HEX);
  Serial.print("/");
  Serial.print(mese, HEX);
  Serial.print("/");
  Serial.println(anno, HEX);
  Serial.println();
   delay(1000);
   
   // QUI' IMPOSTO I PARAMETRI DI ACCENSIONE DEL RELE'
   if (Secondigiorno >=start_secondi &&  Secondigiorno < end_secondi){
digitalWrite(2, HIGH); // eccito il relè collegato al pin2
    delay(1000);
releacceso = 1;
}
else
if (releacceso = 1){
digitalWrite(2, LOW); // stacco il relè collegato al pin2
    delay(1000);
releacceso = 0;}   
}


Ho collegato come da schema indicato,
Scaricato le librerie per l' RTC ds1307 da QUI,
Caricato il codice su arduino,
Modificato il codice adattandolo in questo modo:
Codice: Seleziona tutto
// di seguito includo la libreria per la comunicazione su bus I2C
#include "RTClib.h"
#include <Wire.h>

int start_h=01; // ora in cui si deve attivare il relè
int start_m=21; // minuto in cui si deve attivare il relè
int start_s=02; // secondo in cui si deve attivare il relè
int end_h=20; // ora in cui si deve disattivare il relè
int end_m=22; // minuto in cui si deve disattivare il relè
int end_s=02; // secondo in cui si deve disattivare il relè
  // per comodità eseguo la conversione
// dell'orario di accensione in secondi
int start_secondi = start_s+ start_m*60 +start_h*60*60;
  // per comodità eseguo la conversione
// dell'orario di spegnimento in secondi
int end_secondi = end_s+ end_m*60 +end_h*60*60;
int releacceso=0;

void setup()
{
    pinMode(2, OUTPUT);    // PIN DOVE E' COLLEGATO IL RELE'
   
  // inizializzo la comunicazione seriale
  Serial.begin(9600);

  // inizializzo la libreria
  Wire.begin();

  // adesso, inizializzo la comunicazione con il DS1307.
  // L’indirizzo del DS1307 di default è 0x68
  Wire.beginTransmission(0x68);
  // il primo byte stabilisce il registro
  Wire.write((byte)0x00);
  // imposto l’orario e la data
  Wire.write((byte)0x02); // 1° byte SECONDI da 0x00 a 0x59
  Wire.write((byte)0x20); // 2° byte MINUTI da 0x00 a 0x59
  Wire.write((byte)0x20 | 0x00); // 3° byte ORE da 0x00 a 0x24
  Wire.write((byte)0x02); // 4° byte GIORNO della settimana da 0x01 a 0x07
  Wire.write((byte)0x08); // 5° byte GIORNO del mese da 0x00 a 0x31
  Wire.write((byte)0x12); // 6° byte MESE da 0x00 a 0x12
  Wire.write((byte)0x15); // 7° byte ANNO 0x00 a 0x99
  Wire.endTransmission();
}

void loop()
{
  // inizzializzo la trasmissione partendo dall'indirizzo 0x00
  Wire.beginTransmission(0x68);
  Wire.write((byte)0x00);
  Wire.endTransmission();

  // richiedo 7 byte dal dispositivo con indirizzo 0x68
  Wire.requestFrom(0x68, 7);
  // recupero i 7 byte relativi ai corrispondenti registri
  byte secondi = Wire.read();
  byte minuti = Wire.read();
  byte ora = Wire.read();
  byte giorno_sett = Wire.read();
  byte giorno_mese = Wire.read();
  byte mese = Wire.read();
  byte anno = Wire.read();
     // di seguito la variabile per convertire l'ora corrente in secondi
  int Secondigiorno = secondi+ minuti*60 +ora*60*60;
     // stampo sul monitor seriale la data corrente
  Serial.print("Ora corrente: ");
  Serial.print(ora, HEX);
  Serial.print(":");
  Serial.print(minuti, HEX);
  Serial.print(":");
  Serial.println(secondi, HEX);

  Serial.print("Giorno della settimana: ");
  Serial.println(giorno_sett, HEX);

  Serial.print("Data corrente: ");
  Serial.print(giorno_mese, HEX);
  Serial.print("/");
  Serial.print(mese, HEX);
  Serial.print("/");
  Serial.println(anno, HEX);
  Serial.println();
   delay(1000);
   
   // QUI' IMPOSTO I PARAMETRI DI ACCENSIONE DEL RELE'
   if (Secondigiorno >=start_secondi &&  Secondigiorno < end_secondi){
digitalWrite(2, HIGH); // eccito il relè collegato al pin2
    delay(1000);
releacceso = 1;
}
else
if (releacceso = 1){
digitalWrite(2, LOW); // stacco il relè collegato al pin2
    delay(1000);
releacceso = 0;}   
}



ma purtroppo non funziona :cry: (ovvero al tempo indicato il relè non si eccita)

Le mie domande sono:
1-Tra i componenti occorenti dice:
Oscillatore da 32.768Mhz


Il mio RTC DS1307 sembra gia averlo, ecco una foto:
Cattura.PNG
RTC DS1307
Cattura.PNG (331.93 KiB) Osservato 9962 volte

Sbaglio ho gia ha l'oscillatore da 32.768Mhz? (penso dovrebbe essere quel cilindro grigio al centro)

2- Nel codice, alla riga circa 39, dove va impostato l'ora "attuale" vi è:
Codice: Seleziona tutto
Wire.write((byte)0x80 | 0x10); // 3° byte ORE da 0x00 a 0x24


io ho fatto varie prove, chiedo se va bene così:
Codice: Seleziona tutto
Wire.write((byte)0x00 | 0x20); // 3° byte ORE da 0x00 a 0x24




Grazie infinite O_/
Avatar utente
Foto Utentedanielepower
592 4 6
Sostenitore
Sostenitore
 
Messaggi: 515
Iscritto il: 6 dic 2014, 17:58

2
voti

[2] Re: Arduino come timer relè luci natalizie

Messaggioda Foto UtenteRussell » 9 dic 2015, 12:35

nel tutorial viene usato l'integrato per RTC in modo grezzo, quindi il cristallo è previsto per via del fatto che lo prevede il suo datasheet... nel tuo caso invece hai uno shield gia' pronto, quindi puoi saltare alcuni aspetti e passare direttamente alla sua connessione ad Arduino

per quanto invece riguarda il settaggio dell'ora iniziale ti consiglio di dare un'occhiata a questo codice, che mi sembra piu' chiaro
http://tronixstuff.com/2014/12/01/tutorial-using-ds1307-and-ds3231-real-time-clock-modules-with-arduino/

in particolare al frammento dove scrive:

Codice: Seleziona tutto
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}

void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
  // sets time and date data to DS3231
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set next input to start at the seconds register
  Wire.write(decToBcd(second)); // set seconds
  Wire.write(decToBcd(minute)); // set minutes
  Wire.write(decToBcd(hour)); // set hours
  Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
  Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
  Wire.write(decToBcd(month)); // set month
  Wire.write(decToBcd(year)); // set year (0 to 99)
  Wire.endTransmission();
}
Avatar utente
Foto UtenteRussell
3.373 3 5 9
Master
Master
 
Messaggi: 2194
Iscritto il: 4 ott 2009, 10:25

0
voti

[3] Re: Arduino come timer relè luci natalizie

Messaggioda Foto Utentemir » 9 dic 2015, 12:58

danielepower ha scritto:/Spero di non infrangere il regolamento del forum/

In parte si ... :D
danielepower ha scritto:Schema collegamento qui

Schemi e/o disegni vanno allegati con la funzione Invia Allegato o ancora meglio (consigliabile) utilizzando FidoCadJ... ;-)
Avatar utente
Foto Utentemir
65,3k 9 12 13
G.Master EY
G.Master EY
 
Messaggi: 21672
Iscritto il: 19 ago 2004, 21:10

1
voti

[4] Re: Arduino come timer relè luci natalizie

Messaggioda Foto Utentedanielepower » 9 dic 2015, 17:31

Grazie Foto Utentemir mi ero ripromesso di farlo con fidocadj ma poi per la fretta ho lasciato solo il link sorry

Grazie Foto UtenteRussell ho guardato velocemente l'articolo ma non ne capisco molto #-o Ho sostituito questa parte di codice con quella data da te:
Codice: Seleziona tutto
  // inizializzo la libreria
  Wire.begin();

  // adesso, inizializzo la comunicazione con il DS1307.
  // L’indirizzo del DS1307 di default è 0x68
  Wire.beginTransmission(0x68);
  // il primo byte stabilisce il registro
  Wire.write((byte)0x00);
  // imposto l’orario e la data
  Wire.write((byte)0x02); // 1° byte SECONDI da 0x00 a 0x59
  Wire.write((byte)0x20); // 2° byte MINUTI da 0x00 a 0x59
  Wire.write((byte)0x20 | 0x00); // 3° byte ORE da 0x00 a 0x24
  Wire.write((byte)0x02); // 4° byte GIORNO della settimana da 0x01 a 0x07
  Wire.write((byte)0x08); // 5° byte GIORNO del mese da 0x00 a 0x31
  Wire.write((byte)0x12); // 6° byte MESE da 0x00 a 0x12
  Wire.write((byte)0x15); // 7° byte ANNO 0x00 a 0x99
  Wire.endTransmission();
}

ma non riesco a modificarlo per adattarlo al mio codice :(
L'ho modificato così:
Codice: Seleziona tutto
// di seguito includo la libreria per la comunicazione su bus I2C
#include "RTClib.h"
#include <Wire.h>

int start_h=01; // ora in cui si deve attivare il relè
int start_m=21; // minuto in cui si deve attivare il relè
int start_s=02; // secondo in cui si deve attivare il relè
int end_h=20; // ora in cui si deve disattivare il relè
int end_m=22; // minuto in cui si deve disattivare il relè
int end_s=02; // secondo in cui si deve disattivare il relè
  // per comodità eseguo la conversione
// dell'orario di accensione in secondi
int start_secondi = start_s+ start_m*60 +start_h*60*60;
  // per comodità eseguo la conversione
// dell'orario di spegnimento in secondi
int end_secondi = end_s+ end_m*60 +end_h*60*60;
int releacceso=0;

void setup()
{
    pinMode(2, OUTPUT);    // PIN DOVE E' COLLEGATO IL RELE'
   
  // inizializzo la comunicazione seriale
  Serial.begin(9600);

//MODIFICHE PROPOSTE - RUSSELL
byte decToBcd(byte val);
{
  return( (val/10*16) + (val%10) );
}

void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year);
{
  // sets time and date data to DS3231
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set next input to start at the seconds register
  Wire.write(0(second)); // set seconds
  Wire.write(1(minute)); // set minutes
  Wire.write(16(hour)); // set hours
  Wire.write(3(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
  Wire.write(9(dayOfMonth)); // set date (1 to 31)
  Wire.write(12(month)); // set month
  Wire.write(15(year)); // set year (0 to 99)
  Wire.endTransmission();
}
//FINE MODIFICHE RUSSELL
}

void loop()
{
  // inizzializzo la trasmissione partendo dall'indirizzo 0x00
  Wire.beginTransmission(0x68);
  Wire.write((byte)0x00);
  Wire.endTransmission();

  // richiedo 7 byte dal dispositivo con indirizzo 0x68
  Wire.requestFrom(0x68, 7);
  // recupero i 7 byte relativi ai corrispondenti registri
  byte secondi = Wire.read();
  byte minuti = Wire.read();
  byte ora = Wire.read();
  byte giorno_sett = Wire.read();
  byte giorno_mese = Wire.read();
  byte mese = Wire.read();
  byte anno = Wire.read();
     // di seguito la variabile per convertire l'ora corrente in secondi
  int Secondigiorno = secondi+ minuti*60 +ora*60*60;
     // stampo sul monitor seriale la data corrente
  Serial.print("Ora corrente: ");
  Serial.print(ora, HEX);
  Serial.print(":");
  Serial.print(minuti, HEX);
  Serial.print(":");
  Serial.println(secondi, HEX);

  Serial.print("Giorno della settimana: ");
  Serial.println(giorno_sett, HEX);

  Serial.print("Data corrente: ");
  Serial.print(giorno_mese, HEX);
  Serial.print("/");
  Serial.print(mese, HEX);
  Serial.print("/");
  Serial.println(anno, HEX);
  Serial.println();
   delay(1000);
   
   // QUI' IMPOSTO I PARAMETRI DI ACCENSIONE DEL RELE'
   if (Secondigiorno >=start_secondi &&  Secondigiorno < end_secondi){
digitalWrite(2, HIGH); // eccito il relè collegato al pin2
    delay(1000);
releacceso = 1;
}
else
if (releacceso = 1){
digitalWrite(2, LOW); // stacco il relè collegato al pin2
    delay(1000);
releacceso = 0;}   
}


(ho aggiunto dei ";" alla modifica)
Però mi da errore e dice che "val" (rigo 30) non è dichiarata e non so come fare
Avatar utente
Foto Utentedanielepower
592 4 6
Sostenitore
Sostenitore
 
Messaggi: 515
Iscritto il: 6 dic 2014, 17:58

0
voti

[5] Re: Arduino come timer relè luci natalizie

Messaggioda Foto Utentepaofanello » 9 dic 2015, 18:33

Mi dispiace ma non posso aiutarti con il tuo progetto... ma la prossima volta però (se è ciò che cerchi) potresti pensare di realizzare un crepuscolare: decisamente più semplice e meno costoso :mrgreen:
Piuttosto che chiedere qualcosa a me, chiedila a Mara Maionchi. E' più competente.
Avatar utente
Foto Utentepaofanello
2.275 8 13
Expert
Expert
 
Messaggi: 532
Iscritto il: 7 lug 2015, 21:01

0
voti

[6] Re: Arduino come timer relè luci natalizie

Messaggioda Foto Utentedanielepower » 9 dic 2015, 20:40

paofanello ha scritto:potresti pensare di realizzare un crepuscolare: decisamente più semplice e meno costoso :mrgreen:

Infatti prima lo avevo realizzatp (sempre con arduino) con un sensore di luminosità però per evitare falsi ''notti'' ho optato per il sensore RTC orologio. Cerco di riciclare i componenti che di già possiedo. O_/
Avatar utente
Foto Utentedanielepower
592 4 6
Sostenitore
Sostenitore
 
Messaggi: 515
Iscritto il: 6 dic 2014, 17:58

0
voti

[7] Re: Arduino come timer relè luci natalizie

Messaggioda Foto UtenteJackd » 9 dic 2015, 21:26

sono abbastanza alle prime armi anche io, ma mi pare di vedere tre errori di forma:
il primo ed il secondo è che sulla riga 27 e sulla 33 c'è un ; che non ci dovrebbe essere
il terzo è che tutto il blocco di codice che va dalla riga 27 alla 46 ( quello che tu hai identificato come modifiche di RUSSELL) dovrebbe essere scritto fuori dal
Codice: Seleziona tutto
void setup ()
{
operazione1;
operazione2;
ecc...;
}


Quindi, togli gli ; i piu.
aggiungi una } su linea 25
togli } su linea 48

una cosa che comunque ti volevo chiedere a parte gli errori, ma l' RTC lo hai già impostato con la data e ora?
Avatar utente
Foto UtenteJackd
650 3 7
Frequentatore
Frequentatore
 
Messaggi: 230
Iscritto il: 15 set 2014, 19:10
Località: Padova

0
voti

[8] Re: Arduino come timer relè luci natalizie

Messaggioda Foto Utentedanielepower » 9 dic 2015, 22:18

Jackd ha scritto:Quindi, togli gli ; i piu.
aggiungi una } su linea 25
togli } su linea 48

Grazie Foto UtenteJackd, fatto.
Ho fatto verifica, ora esce che ,forse, devo dichiarare "DS3231_I2C_ADDRESS" #-o
Cattura1.PNG


una cosa che comunque ti volevo chiedere a parte gli errori, ma l' RTC lo hai già impostato con la data e ora?

Non si imposta quando carico lo sketch? in questa parte di codice:
Codice: Seleziona tutto
      Wire.write(0); // set next input to start at the seconds register
      Wire.write(0(second)); // set seconds
      Wire.write(1(minute)); // set minutes
      Wire.write(16(hour)); // set hours
      Wire.write(3(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
      Wire.write(9(dayOfMonth)); // set date (1 to 31)
      Wire.write(12(month)); // set month
      Wire.write(15(year)); // set year (0 to 99)
      Wire.endTransmission();


O_/

EDIT: Ho pensato alla domanda di Foto UtenteJackd e mi è venuto in mente che il tempo impostato "partiva" solamente se aprivo il Monitor Seriale, se lo chiudevo e lo riaprivo il tempo ripartiva da quello impostato; non aveva una continuità "autonoma". Quindi sicuramente sbaglio (anche) qualcosa nell'impostare l'orario #-o
Avatar utente
Foto Utentedanielepower
592 4 6
Sostenitore
Sostenitore
 
Messaggi: 515
Iscritto il: 6 dic 2014, 17:58

1
voti

[9] Re: Arduino come timer relè luci natalizie

Messaggioda Foto UtenteJackd » 10 dic 2015, 1:40

c'è qualcosa che stride, tu l'rtc lo dovresti impostare solo quando serve, e cioè quando vai a cambiare la pila, non lo devi andare a cambiare ogni vota che carichi il programma.

poi rileggendo tutta la discussione, tu hai detto che hai la libreria RTClib che pero' non usi...
prova un po a vedere se con questo codice funziona qualcosa....
Codice: Seleziona tutto
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
     
    #include <Wire.h>
    #include "RTClib.h"
     
    RTC_DS1307 RTC;
   
   int OnH = 15; //Ora On
   int OnM = 30; //minuto On
   int OnS = 10; //secondo on
   int OffH = 23; // ora off
   int OffM = 29; // minuto off
   int OffS = 15; // secondo off
    //orari in secondi
   int ONsecondi = OnS + OnM*60 + OnH*3600;
   int OFFsecondi = OffS + OffM*60 + OffH*3600;
   int secondiAttuali = 0;
   int relay = 2; // pin connesso al rele
   boolean relayOn = false;
   
   
   void setup () {
        //inizializza librerie
      Serial.begin(57600);
        Wire.begin();
        RTC.begin();
      //imposto pin rele come uscita
      pinMode(relay, OUTPUT);
     
      if (! RTC.isrunning()) {
        Serial.println("RTC is NOT running!");
        // following line sets the RTC to the date & time this sketch was compiled
        RTC.adjust(DateTime(__DATE__, __TIME__));
      }
     
    }
     
    void loop () {
      //se ti leggevi la descrizione della libreria, saltava fuori che la riga seguente
      //ti estrae dal rtc in una sola chiamata tutti i dati che te servono
      DateTime now = RTC.now();
      //per poi essere estratti con le seguenti righe e girati alla seriale
        Serial.print(now.year(), DEC);
        Serial.print('/');
        Serial.print(now.month(), DEC);
        Serial.print('/');
        Serial.print(now.day(), DEC);
        Serial.print(' ');
        Serial.print(now.hour(), DEC);
        Serial.print(':');
        Serial.print(now.minute(), DEC);
        Serial.print(':');
        Serial.print(now.second(), DEC);
        Serial.println();
      //troviamo i secondi attuali      
      secondiAttuali = now.second() + now.minute() * 60 + now.hour() * 3600;
     if ( secondiAttuali >= ONsecondi && secondiAttuali < OFFsecondi){
      digitalWrite(relay, HIGH); // eccito il relè collegato al pin2
      relayOn = true;
    } else if (relayOn=true){
      digitalWrite(relay, LOW);
      relayOn=false;
      }
      
        delay(3000);
    }
Avatar utente
Foto UtenteJackd
650 3 7
Frequentatore
Frequentatore
 
Messaggi: 230
Iscritto il: 15 set 2014, 19:10
Località: Padova

1
voti

[10] Re: Arduino come timer relè luci natalizie

Messaggioda Foto UtenteRussell » 10 dic 2015, 11:19

aspetta, noto un po' di confusione logica:

l'orario si imposta nell' RTC solo una volta, quando ci inizi a lavorare, poi non si fa piu' perche' userà la batteria bottone per mantenere l'orario autonomamente per vari mesi.
Si imposta quindi nel codice l'orario del momento di compilazione, piu' un minutino o 2 per essere pignoli (in modo da compensare il tempo di compilazione stesso e il tempo di avvio).

poi dovrai quindi rimuovere quel frammento dal tuo codice

in seguito dovrai solo prelevare l'orario corrente, con un timer, e confrontarlo con l'orario obiettivo che vuoi superare per far reagire la tua applicazione
Avatar utente
Foto UtenteRussell
3.373 3 5 9
Master
Master
 
Messaggi: 2194
Iscritto il: 4 ott 2009, 10:25

Prossimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti

cron