Timer con accensione rele'

Ciao a tutti
Stamattina ho cominciato a studiare il modulino RTC DS1307
Sono riuscito ad utilizzarlo, a settare l'orario e la data, tutto ok, d'altra parte e' veramente semplice.

Ora, ho anche una shiedl con 6 rele', ho fatto una cosina simpatica col telecomando, praticamente ho assegnato ai tasti del telecomando l'accensione di ogni rele', e gia' qui una prima domanduccia, con l'alimentazione usb ce la fa ad accenderne 4, con un alimentatore esterno ne eccita 5, il sesto accende giusto la lucina sulla shield ma non si sente il "tic" del rele', inoltre si blocca il sistema e devo togliere l'alimentazione per ripristinarlo. Forse la 5v di arduino non e' sufficiente? Devo alimentare a parte la shield? Comunque questo e' il dubbio minore.

Cio' che vorrei fare e' comandare automaticamente l'accensione dei vari rele' tramite l'RTC, programmandoli a vari orari.
Immagino sia semplicissimo, ma non ho trovato informazioni.

Escludendo la parte iniziale della codifica del telecomando, per ora ho questo script per la sola parte telecomando:

int RECV_PIN = 11;                            // Pin ricevitore Ir

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  pinMode(9, OUTPUT);     // Led 1
  pinMode(10, OUTPUT);    // Led 2
  pinMode(13, OUTPUT);    // Led di stato
  pinMode(8, OUTPUT);     //rele1
  pinMode(7, OUTPUT);     //rele2
  pinMode(6, OUTPUT);     //rele3
  pinMode(5, OUTPUT);     //rele4
  pinMode(4, OUTPUT);     //rele5
  pinMode(3, OUTPUT);     //rele6
  
  irrecv.enableIRIn();    // Inizializza ricevitore Ir
  Serial.begin (9600);
}

void loop() {

  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);       //Risultato in esadecimale
    irrecv.resume();
    }

  if(results.value == PONOFF){
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    digitalWrite(3, LOW);     
  }
    if(results.value == P1){
    digitalWrite(8, HIGH);
  }
  if(results.value == P0){
    digitalWrite(8, LOW);
  }
      if(results.value == P2){
    digitalWrite(7, HIGH);
  }
  if(results.value == P0){
    digitalWrite(7, LOW);
  }
      if(results.value == P3){
    digitalWrite(6, HIGH);
  }
  if(results.value == P0){
    digitalWrite(6, LOW);
  }
      if(results.value == P4){
    digitalWrite(5, HIGH);
  }
  if(results.value == P0){
    digitalWrite(5, LOW);
  }
   if(results.value == P5){
    digitalWrite(4, HIGH);
  }
  if(results.value == P0){
    digitalWrite(4, LOW);
  }
   if(results.value == P6){
    digitalWrite(3, HIGH);
  }
  if(results.value == P0){
    digitalWrite(3, LOW);
  }
 
}

Mentre l'RTC l'ho solo testato con l'esempio assieme alla libreria:

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> // written by  mattt on the Arduino forum and modified by D. Sjunnesson

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

  RTC.stop();
  RTC.set(DS1307_SEC,1);        //set the seconds
  RTC.set(DS1307_MIN,23);     //set the minutes
  RTC.set(DS1307_HR,12);       //set the hours
  RTC.set(DS1307_DOW,4);       //set the day of the week
  RTC.set(DS1307_DATE,5);       //set the date
  RTC.set(DS1307_MTH,3);        //set the month
  RTC.set(DS1307_YR,9);         //set the year
  RTC.start();

}

void loop()
{

  Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
  Serial.print(":");
  Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
  Serial.print(":");
  Serial.print(RTC.get(DS1307_SEC,false));//read seconds
  Serial.print("      ");                 // some space for a more happy life
  Serial.print(RTC.get(DS1307_DATE,false));//read date
  Serial.print("/");
  Serial.print(RTC.get(DS1307_MTH,false));//read month
  Serial.print("/");
  Serial.print(RTC.get(DS1307_YR,false)); //read year 
  Serial.println();

  delay(1000);

}

Non ho capito una cosa: tu hai attaccato direttamente i relè ai pin di arduino?
oppure c'è di mezzo resistenza/transistor?

No ha collegato lo shield all'alimentazione della usb, lo shield relè ha già i suoi transistors.

Non ce la fa la usb del pc a fare tutto, rischi di danneggiare anche la porta del pc
Per attivare un relè a un orario ti basta confrontare le variabili DS1307_HR, DS1307_MIN, DS1307_SEC con 3 variabili impostate da te con qualche if magari invece di mettere == usi >=

int time1_ore= 12;
int time1_min = 0;
int time1_sec = 0;

int time2_ore= 18;
int time2_min = 20;
int time2_sec = 0;

if(DS1307_HR >= time1_ore && DS1307_MIN >= time1_min && DS1307_SEC >= time1_sec)
...........
if(DS1307_HR >= time2_ore && DS1307_MIN >= time2_min && DS1307_SEC >= time2_sec)
...........

Se si tratta di una USB 2.0 non può fornire più di 500mA e sì se vai oltre rischi di danneggiarla. Se hai un connettore ad Y puoi collegare 2 porte contemporaneamente ed avere 1A.

Non prendere cavi a Y perché l' Arduino stesso ha un fusibile autoripristinante da 0,5A e non combini niente. Usa un alimentatore da 5V e 1A per alimentare Arduino e la scheda.
Ciao Uwe

Si con la USB immaginavo fosse quello il problema, ma ho usato anche un trasformatore 12v 1200mA, e c'e' lo stesso problema.

Grazie Pablos per il chiarimento "timer", pensavo di fare proprio cosi', ma mi chiedevo se ci fosse un'istruzione gia' pensata per questo scopo magari gia' nella libreria.
Sei stato molto chiaro, grazie mille.

uwefed:
Non prendere cavi a Y perché l' Arduino stesso ha un fusibile autoripristinante da 0,5A e non combini niente. Usa un alimentatore da 5V e 1A per alimentare Arduino e la scheda.

vero, non avevo visto lo schema

Sto cercando vari pareri per alimentare arduino e relay shield e alcuni sensori di temperatura.
e quindi chiedo consigli su che alimentatore andrebbe bene per far funzionare il tutto.
Un alimentatore da 5 v 1A è sufficiente o sarebbe meglio uno leggermente più potente nel caso ci collegassi altri shield?

Subia75:
Sto cercando vari pareri per alimentare arduino e relay shield e alcuni sensori di temperatura.
e quindi chiedo consigli su che alimentatore andrebbe bene per far funzionare il tutto.
Un alimentatore da 5 v 1A è sufficiente o sarebbe meglio uno leggermente più potente nel caso ci collegassi altri shield?

Ora che ho visto che hai postato la stessa domanda docunque tu abbia letto la parola alimentazione, lo confermo: sei uno SPAM; non è corretto questo modo di agire, non puoi infilarti in ogni Topic e fare la stessa domanda; io non so che Forum sei abituato a frequentare, ma qui le risposte arrivano e se non arrivano vuol dire che non ce ne sono. Ti spiego un trucco: la prossima volta che hai bisogno di aiuto apri un Topic tutto tuo, non incasinare quelli degli altri, mi meraviglio come ancora il Moderatore non sia intervenuto cancellando tutte le tue copie di post e lasciandone uno solo. Abbi pazienza, non te la prendere, ma le regole sono regole. Anzi ora sarebbe molto corretto da parte tua eliminare tutti quei duplicati.

Subia75:
Sto cercando vari pareri per alimentare arduino e relay shield e alcuni sensori di temperatura.
e quindi chiedo consigli su che alimentatore andrebbe bene per far funzionare il tutto.
Un alimentatore da 5 v 1A è sufficiente o sarebbe meglio uno leggermente più potente nel caso ci collegassi altri shield?

È il terzo posto dove aggiungi la stessa domanda. per favore non proseguire.

Ciao
Uwe Federer
Moderatore

ok scusate cercherò di stare più attento.
è solo che faccio più domande uguali per sentire pareri diversi.
credevo che in base al titolo del topic dovrebbe avere un problema differente e quindi ci sarebbero state persone diverse che potevano darmi suggerimenti perchè non credo che tutti guardino tutti i post.

Subia75:
ok scusate cercherò di stare più attento.
è solo che faccio più domande uguali per sentire pareri diversi.
credevo che in base al titolo del topic dovrebbe avere un problema differente e quindi ci sarebbero state persone diverse che potevano darmi suggerimenti perchè non credo che tutti guardino tutti i post.

Credi male, invece sono in molti che leggono tutti i Topic, poi uno può intervenire o meno in base alle proprie competenze :wink:

ok cercherò di non far arrabbiare più nessuno con domande doppie o più.
sbagliando si impara.