Arduino Forum

International => Italiano => Software => Topic started by: steveborty on Jan 24, 2013, 05:04 pm

Title: software che funziona in base all'ora
Post by: steveborty on Jan 24, 2013, 05:04 pm
vorrei sapere se si riesce a creare un codice che invia a arduino(e poi all'hardware) delle cose da fare in base all'ora che c'e` al momento. Quindi che funzioni in base all'ora corrente

Grazie!!
Title: Re: software che funziona in base all'ora
Post by: uwefed on Jan 24, 2013, 05:16 pm
Sí.
Devi aggiungere dell'elettronica che funge da orologio. La cosa piú semplice é un RTC tipo DS1307.
Ciao Uwe
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 24, 2013, 05:20 pm
riusciresti a spiegarmi brevemente come funziona in rapporto con il software?
Title: Re: software che funziona in base all'ora
Post by: brainbooster on Jan 24, 2013, 09:08 pm
oppure usi un rtc software vedi SWRTC
http://www.leonardomiliani.com/2011/swrtc-un-orologio-in-tempo-reale-via-software/ (http://www.leonardomiliani.com/2011/swrtc-un-orologio-in-tempo-reale-via-software/)
Title: Re: software che funziona in base all'ora
Post by: pablos71 on Jan 24, 2013, 09:22 pm
Visto Leo ?? Brain... ha recuperato, non aveva pubblicizzato la leos, ma ora la swrtc :)

Però se posso permettermi senza offese, l' SWRTC senza ethernet shield quindi aggiornamento almeno quotidiano dell'ora con server NTP ha poco senso, premetto che il mio arduino attualmente fa questo alle 23:59 di tutti i giorni da circa 6 mesi con un errore di connessione ogni 50 collegamenti, ad errore rilevato ritenta con lo stesso ip per 2 volte, se l'errore persiste cambia ip fino a quando non trova il server in una lista su SD che risponde correttamente, comunque con un delay dai 300 ai 500 ms sulla connessione.
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 24, 2013, 11:00 pm
@pablos:
ah ah ah  :smiley-yell: :smiley-yell:

Comunque ricordo che la swRTC si può tarare per cercare di ridurre l'errore del risonatore dell'Arduino.
E comunque se non si ha la necessità di usare la scheda come orologio (nel caso rimando al mio progetto "Micrologio" per avere una precisione da RTC!) avere uno scarto anche di qualche secondo al giorno va più che bene. Che te ne importa se invece che alle 00:00 la tua operazione viene eseguita alle 00:00+5s? Una volta al mese riallinei l'orario all'ora esatta.
Title: Re: software che funziona in base all'ora
Post by: pablos71 on Jan 24, 2013, 11:03 pm
Come ho detto in altri post ci sono 800 timer su eeprom che devono essere rispettati  XD ... a parte che io non ho risonatore, l'errore non è ristretto ai secondi ci sono differenze di 4-5 minuti in un gg, sarà la mega che è sfigata non lo so  :smiley-red:
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 24, 2013, 11:28 pm

Come ho detto in altri post ci sono 800 timer su eeprom che devono essere rispettati  XD ... a parte che io non ho risonatore, l'errore non è ristretto ai secondi ci sono differenze di 4-5 minuti in un gg, sarà la mega che è sfigata non lo so  :smiley-red:

se hai una Mega2560 hai il risonatore.
hai provato a cercare di correggere l'errore col deltaT?

Detto questo, se ti serve precisione assoluta sono io il primo a dirlo. Serve un sistema affidabile.
Che comunque non è l'RTC perché anche un RTC soffre di una certa discrepanza. Errori di secondi al giorni sono all'ordine del... giorno.

Però se per esempio ti (non "a te", in generale) serve giusto accendere le luci di un acquario, la swRTC ti basta ed avanza.
Title: Re: software che funziona in base all'ora
Post by: pablos71 on Jan 25, 2013, 12:02 am
Da qualche parte avevo letto (su questo forum senza troppo peso essendo in beta test) che la mega aveva un quarzo, guardando lo schema atmel adesso vedo che CSTCE16M0V53-R0 16MHZ è un risonatore, pazienza :) avrei dovuto guardarlo prima e fidarmi meno di quello che scrivono, fatto sta che c'è un errore giornaliero pesante e sia chiaro, non sto sminuendo il tuo lavoro, anzi tanto di cappello.  

Ps: Il mio obbiettivo non è certo fare un acquario, se c'e' una cosa che detesto sono gli acquari ahahahahah

ciao
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 25, 2013, 12:08 am

Da qualche parte avevo letto (su questo forum senza troppo peso essendo in beta test) che la mega aveva un quarzo, guardando lo schema atmel adesso vedo che CSTCE16M0V53-R0 16MHZ è un risonatore, pazienza :) avrei dovuto guardarlo prima e fidarmi meno di quello che scrivono,
[/quote
Io non ho la scheda ma ho dato un'occhiata alle foto della MEGA2560 R3.
Forse le vecchie avevano il quarzo come c'era anche sulle 2009.


Quote
fatto sta che c'è un errore giornaliero pesante e sia chiaro, non sto sminuendo il tuo lavoro, anzi tanto di cappello.  

Sto lavorando ad una swRTC modificata, se riesco a completarla spero di pubblicarla entro breve.

Quote

Ps: Il mio obbiettivo non è certo fare un acquario, se c'e' una cosa che detesto sono gli acquari ahahahahah

ciao

A me piacciono, ma quelli degli altri.  :smiley-yell:
Con me i pesci morirebbero dopo 2 giorni, son sicuro che non avrei cura di quelle povere bestie né interesse per seguirle come si deve.  ]:D
Title: Re: software che funziona in base all'ora
Post by: pablos71 on Jan 25, 2013, 12:17 am
Quote
A me piacciono, ma quelli degli altri.  smiley-yell
Con me i pesci morirebbero dopo 2 giorni, son sicuro che non avrei cura di quelle povere bestie né interesse per seguirle come si deve.  smiley-twist


ahahahah come ti capisco!!!
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 25, 2013, 05:10 pm
ma io ho arduino 1 r3 ,come faccio per potere avere piu` pin???
Title: Re: software che funziona in base all'ora
Post by: pablos71 on Jan 25, 2013, 11:13 pm

ma io ho arduino 1 r3 ,come faccio per potere avere piu` pin???


La prima domanda era come pilotare dei pin in base all'orario corrente.
Hai provato a usare la libreria Swrtc?

per aumentare i pin Input puoi usare uno shiftin
http://www.arduino.cc/en/Tutorial/ShiftIn

per aumentare i pin output puoi usare uno shiftout
http://arduino.cc/en/Tutorial/ShiftOut

Anche lo A0-A1-A2-A3-A4.... possono essere usati come normali pin digitali I/O

Se dici cosa vuoi fare, ti si può consigliare se espandere quella o se conviene passare a una mega

ciao
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 26, 2013, 07:02 am
avrei bisogno di 29 output e un input che ho gia`. dei 29 13 ce li ho gia`...comunque dovrei creare una specie di orologio. questo pomeriggio vi metto il disegno
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 26, 2013, 07:57 am
Forse ti bastano degli shift register tipo i 595, che puoi mettere in cascata. Ognuno ha 8 uscite, con 4 chip hai 32 linee di output.
Cos'è che devi pilotare?
Title: Re: software che funziona in base all'ora
Post by: brainbooster on Jan 26, 2013, 08:27 am
...o forse solo un max7219    http://www.maximintegrated.com/datasheet/index.mvp/id/1339?ver=C&utm_expid=50713806-2&utm_referrer=http%3A%2F%2Fwww.google.it%2Furl%3Fsa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26source%3Dweb%26cd%3D1%26ved%3D0CDUQFjAA%26url%3Dhttp%253A%252F%252Fwww.maximintegrated.com%252Fdatasheet%252Findex.mvp%252Fid%252F1339%26ei%3D6YQDUa_VFoiF4gTSgYH4DA%26usg%3DAFQjCNEsA7oEwRSXCRt4M0NWRyzUf0pZng%26bvm%3Dbv.41524429%2Cd.bGE
Title: Re: software che funziona in base all'ora
Post by: pablos71 on Jan 26, 2013, 08:55 am
29? (7x4)+1? Vuoi usare un uscita per ogni segmento?

Che tu usi 4 display a 7 segmenti o che i segmenti li costruisci a mano per fare un orologio a 4 cifre ti bastano 11 pin, tò ci mettiamo anche i due punti lampeggianti :) 12 tot.

Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 26, 2013, 12:46 pm
il progetto sarebbe quello che i numeri che vedete sul foglio(al contrario perche` l'immagine e` storta...) dovrebbero essere su un piano in modo che dietro ogni numero( o dietro il : o am pm) ci sia un led che si attiva. ad esempio se sono le 8:30 si accendera` il led sotto l'8, sotto il : ,sotto il 30 e sotto l'am.   l'idea l'ho presa qui`    http://store.biegertfunk.com/eu/collection-qlocktwotouch/qlocktwotouch-silver-blackicetea.html             solo che al posto delle parole si accendono i numeri.   che ne pensate?
Title: Re: software che funziona in base all'ora
Post by: pablos71 on Jan 26, 2013, 01:50 pm
Se ti piace fatto così nulla da dire a parte quel 60 sui minuti che non ci sta hai già messo 00 lo stesso per le ore 12 e 00
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 26, 2013, 02:19 pm
hai ragione!!  XD
c'e` qualcuno che riesce a spiegarmi come funziona la libreria citata prima?
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 26, 2013, 05:54 pm

hai ragione!!  XD
c'e` qualcuno che riesce a spiegarmi come funziona la libreria citata prima?

A quale lib ti riferisci?
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 27, 2013, 05:47 pm
SWRTC
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 27, 2013, 05:49 pm

SWRTC


Quella libreria l'ho scritta io  :P
Cos'è che vuoi sapere?
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 27, 2013, 06:08 pm
vorrei sapere come funziona
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 27, 2013, 06:37 pm

vorrei sapere come funziona


Domanda generica. Vediamo se ti faccio un sunto.
Basilarmente utilizzo un timer del microcontrollore (la lib gira su un sacco di chip supportati dall'IDE e dai core aggiuntivi) impostandolo come contamillisecondi. Ogni millisecondo incremento un contatore interno. Al raggiungimento di 1000 incrementi, incremento a cascata tutta una serie di variabili temporali, a cominciare dai secondi per finire agli anni.
Siccome la sua accuratezza si basa sull'accuratezza del generatore di clock, sappiamo che il risonatore ceramico usato sulle ultimo schede Arduino non è quel mostro di precisione per cui, per sopperire a questo problema, ho aggiunto un deltaT. L'utente può utilizzare un fattore di correzione per allineare il tempo contato dalla libreria con quello reale, aggiungengo o sottraendo una certa quantità di millisecondi nell'arco di un giorno.

La libreria ha tante funzioni, compresa la gestione dei timestamp in stile UNIX: puoi avere il timestamp dell'orario corrente così come usarne uno per regolare l'ora. Oppure sapere il giorno della settimana della data corrente oppure sapere se un anno è bisestile.
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 27, 2013, 07:03 pm
ma come faccio a usare la libreria?
Title: Re: software che funziona in base all'ora
Post by: pablos71 on Jan 27, 2013, 07:35 pm
Guarda che ci sono gli esempi dentro ... l'hai scaricata e installata almeno?
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 27, 2013, 07:40 pm
scaricata si,installata no,come si fa? non mi apre niente...
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 27, 2013, 10:15 pm

scaricata si,installata no,come si fa? non mi apre niente...

A parte che ci sono tutte le istruzioni nel README allegato, devi copiare la cartella /swRTC e tutto il suo contenuto nella cartella /sketchbook/libraries o \Documenti\Arduino\libraries, a seconda che tu abbia Linux o Windows.
Fatto questo, avvia l'IDE e dentro a File/Esempi devi avere una nuova voce "swRTC": portandoci sopra il mouse, ti si apre un'ulteriore livello del menu con i 3 esempi allegati che puoi caricare e studiare.
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 28, 2013, 03:36 pm
ma se voglio che faccia una cosa a una determinata ora che codice devo fare?
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 28, 2013, 04:31 pm

ma se voglio che faccia una cosa a una determinata ora che codice devo fare?


La swRTC non è uno scheduler, è ciò che dice il nome, un orologio. Lei ti fornisce l'orario, devi poi nel tuo codice implementare il controllo.
Esempio:
Code: [Select]
if (rtc.getHours() == ore && rtc.getMinutes() == minuti && rtc.getSeconds() == secondi) {
  ....esegui qualcosa
}


Se vuoi programmare azioni prefissate a determinati intervalli ho scritto la libreria leOS/leOS2. A differenza della swRTC, imposti l'intervallo e questa ti esegue le operazioni in background.
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 28, 2013, 04:39 pm
ma basta mettere cosi` o prima devo mettere qualcos'altro?
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 28, 2013, 04:47 pm

ma basta mettere cosi` o prima devo mettere qualcos'altro?

Prima regoli l'orario della swRTC, ma questa è un'operazione che dovresti fare comunque anche con un RTC hardware.
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 28, 2013, 06:42 pm
che sarebbe il print time?
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 28, 2013, 06:47 pm

che sarebbe il print time?

Forse intendi "timestamp". E' il numero di secondi a partire da una data epoca (cioè un giorno prefissato). Il timestamp più diffuso è quello con epoca UNIX, 1970.0, ossia 1° gennaio 1970 ore 00:00.

Se non sai cos'è probabilmente non ti serve neanche  ;)
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 28, 2013, 06:54 pm
riesci a scrivermi come settare le ore i  minuti e i secondi?     grazie per il tempo che mi stai dando... :)
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 28, 2013, 11:35 pm

riesci a scrivermi come settare le ore i  minuti e i secondi?     


Nella sezione Megatopic c'è una discussione sulla libreria di 69 pagine  :)
Negli esempi allegati c'è la chiamata di tutti i metodi che supporta.
Ne readme allegato ci sono descritte le funzioni e come usarle. Che vuoi di più?  ;)
Title: Re: software che funziona in base all'ora
Post by: pablos71 on Jan 29, 2013, 12:03 am

Che vuoi di più?  ;)


Che gli scrivi lo sketch  ]:D
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 29, 2013, 09:05 am


Che vuoi di più?  ;)


Che gli scrivi lo sketch  ]:D

;)
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 29, 2013, 02:15 pm


#include <swRTC.h>
swRTC rtc; //create a new istance of the lib

void setup() {
   rtc.stopRTC(); //stop the RTC
   rtc.setTime(12,0,0); //set the time here
   rtc.setDate(4,6,2012); //set the date here
   rtc.startRTC(); //start the RTC
   Serial.begin(19200); //choose the serial speed here
   delay(2000); //delay to let the user opens the serial monitor
}

void loop() {
    Serial.print(rtc.getHours(), DEC);
    Serial.print(":");
    Serial.print(rtc.getMinutes(), DEC);
    Serial.print(":");
    Serial.print(rtc.getSeconds(), DEC);
    Serial.print(" -- ");
    Serial.print(rtc.getDay(), DEC);
    Serial.print("/");
    Serial.print(rtc.getMonth(), DEC);
    Serial.print("/");
   
    if (rtc.getHours() == 00 && tyc.getMinutes() == 00) ;
   
   
    { pinMode(13 HIGH)}
}




beh,intanto e` giusto?devo settare le ore e i minuti...ma il resto e` ok?   
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 29, 2013, 02:20 pm
Hai fatto un copia-incolla di 2 sketch di esempio allegati alla swRTC  :smiley-yell:
C'è però un paio di errori, uno di sintassi ed un logico... trovali  ]:D
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 29, 2013, 03:07 pm
uno e` un ";"    quello logico proprio non so...??!!  :smiley-roll-blue:
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 29, 2013, 03:08 pm
forse manca lo rtc.startRTC();
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 29, 2013, 05:58 pm

forse manca lo rtc.startRTC();

Quello c'è.

uno e` un ";"    quello logico proprio non so...??!!  :smiley-roll-blue:

Questo non l'avevo visto. Allora gli errori di sintassi sono 2...
L'hai compilato, per curiosità?  :P
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 29, 2013, 06:22 pm
Cioè?
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 29, 2013, 06:27 pm

Cioè?


Perché se lo avessi fatto avresti visto gli errori. :smiley-roll-sweat:
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 29, 2013, 06:38 pm
Ahhhh,okk. Si lo ho fatto e mi dava quel ;
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 29, 2013, 10:47 pm

Ahhhh,okk. Si lo ho fatto e mi dava quel ;

E l'altro.
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 30, 2013, 03:48 pm
non ho ancora capito il problema...
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 30, 2013, 06:12 pm
Il problema è che con i copia-e-incolla non si va da nessuna parte.
Se non ti metti davanti ad una tastiera e non inizi a scrivere un po' di codice, stiamo qui mesi a parlare del più e del meno  ;)
Se avessi compilato il codice che hai postato avresti visto che c'era anche questo errore.
if (rtc.getHours() == 00 && tyc.getMinutes() == 00) ;
hai scritto tyc al posto di rtc. Siccome in 2 giorni non me lo hai detto quale era l'errore che c'era, presumo che tu in 2 giorni o non hai provato a scrivere nulla oppure ti sia dimenticato della cosa. Spero la seconda  ]:)

Inoltre il problema logico risiede nel fatto che tale codice, arrivato alle 00:00 di un qualsiasi giorno, tenterà di accendere per 1 minuto esatto il led sul pin 13. Quest perché non hai poi messo nessun flag per far eseguire l'operazione 1 sola volta. E nessun controllo per resettare il flag una volta che siano passate le 00:00 (alle 00:01 tale flag deve essere rimesso a 0 perché sennò la prossima volta che sono le 00:00 non verrà eseguito nulla).

Scusa se sono rude ma la parte software si basa sulla logica, se non impari a ragionare esaminando tutte le possibili implicazioni di quello che scrivi i tuoi sketch avrai sempre problemini banali che però ti rompono un sacco le scatole  ;)
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 30, 2013, 06:34 pm
ma se al posto di usare la libreria usassi solo la funzione delay (300000)   quindi 5 min. e metto in successione i led da accendere...e` un po' elaborioso ma piu` semplice no?
Title: Re: software che funziona in base all'ora
Post by: pablos71 on Jan 30, 2013, 09:33 pm
Leo io direi che lo può fare tranquillamente con un delay .... Tu che dici?   :D
Title: Re: software che funziona in base all'ora
Post by: leo72 on Jan 30, 2013, 10:42 pm

Leo io direi che lo può fare tranquillamente con un delay .... Tu che dici?   :D


Sì...  :smiley-sweat: :smiley-sweat:
Title: Re: software che funziona in base all'ora
Post by: steveborty on Jan 31, 2013, 12:40 pm
io ho un coso che sembra uno shiftout...sopra c'e` scritto L293ONE.e` shiftout o in?
Title: Re: software che funziona in base all'ora
Post by: brainbooster on Jan 31, 2013, 04:09 pm
L'altra cosa che dovresti fare prima di scrivere e saper cercare e capire un datasheet. :smiley-roll:
http://www.datasheetcatalog.org/datasheet/texasinstruments/l293d.pdf
Title: Re: software che funziona in base all'ora
Post by: steveborty on Feb 24, 2013, 09:54 am
ecco  il codice completo.





Code: [Select]
//l'orologio e` a 12h


void setup() {
       pinMode(1,OUTPUT);
       pinMode(2,OUTPUT);
       pinMode(3,OUTPUT);
       pinMode(4,OUTPUT);
       pinMode(5,OUTPUT);
       pinMode(6,OUTPUT);
       pinMode(7,OUTPUT);
       pinMode(8,OUTPUT);
       pinMode(9,OUTPUT);
       pinMode(10,OUTPUT);
       pinMode(11,OUTPUT);
       pinMode(12,OUTPUT);
}

void loop() {
 
 digitalWrite(6,HIGH);      //il programma viene attivato alle 6:00 am o pm
 delay(3600000);            //aspetta 1h
 digitalWrite(6,LOW);
 digitalWrite(7,HIGH);
 delay(3600000);
 digitalWrite(7,LOW);
 digitalWrite(8,HIGH);
 delay(3600000);
 digitalWrite(8,LOW);
 digitalWrite(9,HIGH);
 delay(3600000);
 digitalWrite(9,LOW);
 digitalWrite(10,HIGH);
 delay(3600000);
 digitalWrite(10,LOW);
 digitalWrite(11,HIGH);
 delay(3600000);
 digitalWrite(11,LOW);
 digitalWrite(12,HIGH);
 delay(3600000);
 digitalWrite(12,LOW);
 digitalWrite(1,HIGH);
 delay(3600000);
 digitalWrite(1,LOW);
 digitalWrite(2,HIGH);
 delay(3600000);
 digitalWrite(2,LOW);
 digitalWrite(3,HIGH);
 delay(3600000);
 digitalWrite(3,LOW);
 digitalWrite(4,HIGH);
 delay(3600000);
 digitalWrite(4,LOW);
 digitalWrite(5,HIGH);
 delay(3600000);
 digitalWrite(5,LOW);
 
}                    

edit by mod: per favore includi il codice usando gli appositi tag
Title: Re: software che funziona in base all'ora
Post by: leo72 on Feb 24, 2013, 11:09 am
Il programma non può partire alle 6:00 a meno che tu non accenda l'Arduino a quell'ora, dato che non c'è nessun controllo sull'orario (mediante RTC esterno o interno).

Title: Re: software che funziona in base all'ora
Post by: steveborty on Feb 26, 2013, 09:25 pm
e` quello che intendevo con parte alle 6:00  :)