Go Down

Topic: Timer con accensione rele' (Read 2 times) previous topic - next topic

Vinzo

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:

Code: [Select]
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:

Code: [Select]
#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);

}

smartgatto

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

pablos

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)
...........
no comment

omaroski

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.

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.
Ciao Uwe

Vinzo

#5
Apr 26, 2012, 04:34 pm Last Edit: Apr 26, 2012, 07:58 pm by Vinzo Reason: 1
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.

omaroski


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

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?

Michele Menniti

#8
May 06, 2012, 12:03 pm Last Edit: May 06, 2012, 12:19 pm by Michele Menniti Reason: 1

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.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

UweFederer


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

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.

Michele Menniti


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 ;)
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Subia75

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

Go Up