Timer ogni "tot" ore chiude un circuito per 2 secondi!

salve
devo realizzare un dispositivo che ogni 10 ore (vorrei però poter regolare questo intervallo) mi possa chiudere un circuito per 2 secondi soltanto. Potrei anche pensare di alimentare un relè che a sua volta chiuderebbe il circuito per il tempo settato..

Avete qualche sketch a disposizione? Purtroppo non riesco a compilarlo da solo!

Lo schema base lo ricavi dall'esempio Blink Whitout Delay ed è una cosa del genere

const int relePin =  13;    
unsigned long previousMillis;
unsigned long interval = 10 * 3600000UL;

void setup() {
  pinMode(relePin, OUTPUT);
  digitalWrite(relePin, LOW);
  previousMillis = millis(); 
}

void loop()
{
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;   
    pushRele();
  }
}

void pushRele(){
  digitalWrite(relePin, HIGH);
  delay(2000);
  digitalWrite(relePin, LOW);
}

A questo dovrai aggiungere dei pulsante per attivare, disattivare e resettare il conteggio, un display per visualizzare il contaggio e per settare l'intervallo: potresti usare dei pulsanti con menu su LCD o un display a sette segmenti con un encoder rotativo.
Insomma la parte più semplice è quella che ho pubblicato... :grin:

e se non volessi usare un lcd?? tanto per me una volta capito gli orari lo lascio così e basta!

Per me servirebbe un semplice sketch dove possa settare orari e tempistiche...scusami ma sono proprio un ignorante!

Ti viene suggerita una piccola interfaccia di setup perchè altrimenti come puoi modificare i tempi? Del resto lo chiedi tu espressamente

(vorrei però poter regolare questo intervallo)

Tieni conto che il tuo timer parte dal reset/avvio di arduino a qualunque ora del giorno, se manca alimentazione al suo ritorno parte tutto da 0, e in tutto questo senza visualizzatore sarai invaso da incognite (guardando la scheda ti chiederai "a che punto sarà il conteggio?, sarà partito? quanto manca?, sarà impostato bene?")

ciao

giusto, ma i tempi li setterò solo una volta con il pc, perchè prima di usarlo farò un paio di test..e poi mi servirà una sola volta, poi basta!
Ecco perchè cercavo una cosa semplicissima...e facile da realizzare, dove in un paio di test posso regolare i tempi (le ora in cui intervenire e i 2 o 3 secondi di chiusura circuito..) e poi niente più! qualche idea?

robyr1:
giusto, ma i tempi li setterò solo una volta con il pc, perchè prima di usarlo farò un paio di test..e poi mi servirà una sola volta, poi basta!
Ecco perchè cercavo una cosa semplicissima...e facile da realizzare, dove in un paio di test posso regolare i tempi (le ora in cui intervenire e i 2 o 3 secondi di chiusura circuito..) e poi niente più! qualche idea?

Ti ha già dato la soluzione PaoloP :grin: :grin:

ciao
pippo72

ah ok thanks!!

ma la stringa

unsigned long interval = 10 * 3600000UL;

contiene il valore 10 * 3600000UL a cosa corrisponde??

robyr1:
unsigned long interval = 10 * 3600000UL;

Si lavora in millesimi di secondo ... 1 ora = 60 minuti = 3600 secondi x 1000 millesimi = 3600000UL x 10 ore ...
... che tu volevi XD

Guglielmo

Grazie Guglielmo, e grazie a tutti!!

ora mi metto al lavoro!!

ragazzi un' ultima domanda:

visto che per le prove basta 1 minuto, ho modificato la stringa iniziale, con un minuto sono 60000 milli sec, eccola, è ok?

const int relePin =  13;    
unsigned long previousMillis;
unsigned long interval = 10 * 3600000UL;

void setup() {
  pinMode(relePin, OUTPUT);
  digitalWrite(relePin, LOW);
  previousMillis = millis(); 
}

void loop()
{
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;   
    pushRele();
  }
}

void pushRele(){
  digitalWrite(relePin, HIGH);
  delay(2000);
  digitalWrite(relePin, LOW);
}

ora se collego la bobina di un relè 12v ai pin 13 e gnd di arduino dovrei eccitarla per 2 secondi ogni minuto vero? O sbaglio??

Se colleghi direttamente la bobina appena scatta fondi il pin di Arduino.
Devi usare un transistor per comandare la bobina e un diodo di ricircolo per l'extracorrente allo spegnimento.

Oppure prendi una di quelle schedine con il relè e tutta l'elettronica necessaria.

Modifica il post precedente e sistema il codice tramite i tag CODE, vedi il Regolamento al punto 7 --> [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum

caspita ho già collegato il pin 13 spero di non aver causato danni...comunque il led di arduino non si è spento per 2 secondi..quindi suppongo che lo sketch ancora non funzioni...oppure ho già fuso il pin 13 senza accorgermene??

Io pensavo che bastasse collegare il relè al pin 13!! ok ora provo con lo schema che mi hai suggerito...grazie ancora!

comunque vanno bene i 60000 milli sec intesti per 1 minuto?

robyr1:
comunque vanno bene i 60000 milli sec intesti per 1 minuto?

SI ... e si, potresti anche aver già danneggiato Arduino (... anche se spero proprio di no) ... :~

Per il collegamento guarda anche l'allegato (lo schema è uguale a quello di Paolo) ...

Guglielmo

scheda_3.pdf (408 KB)