Buon RTC per stazione meteo?

Salve a tutti,
Siccome volevo inserire pure un rtc al mio progetto della stazione meteo, mi chiedevo quale potevo prendere, che costi però poco e che dia una discreta affidabilità. Sapete consigliarmene qualcuno? Magari con relativo schema di montaggio ad arduino.

DS3231
O altrimenti DS1307, pero' quest'ultimo ti sballa anche di 20 secondi al giorno
Visto che la differenza di costo e' minima, scegli il DS3231. Su Ebay ne trovi a bizzeffe.

In alternativa, come gia' detto da qualche altra parte, se hai una scheda Ethernet potresti usare una libreria che ti simula un RTC via software ( cerca RTCLIB e vedi l'esempio softrtc ) e leggere periodicamente l'ora da Web ( servizio NTP, ci sono gli esempi nella libreria Ethernet ) e sincronizzare quindi l'RTC software.
Pero' sei appunto legato a una connessione Internet, quindi forse e' il caso di investire un 3/4 euro e rendere il tutto autonomo.
Per collegare un RTC, basta collegarsi alle due linee dell'I2C ( SDA-pinA4 e SCL-pinA5 ). Se hai già qualcosa collegato all'I2C, non devi fare altro che metterlo in parallelo

Grazie mille Brunello :wink:
Comunque ho collegato così, va bene come ho messo? Su ebay si trova a pochi euro infatti, e anche se metterò l ethernet shield voglio averlo come dici un rtc per rendere il tutto autonomo... Comunque l'ethernet shield occupa dei piedini? Cioè sì, si incastra con arduino, ma occupa, nel senso che usa qualche piedino di arduino lo shield?

Esatto, è collegato in modo corretto, pero' prevedi ache due resistenze tra le linee I2C (SDA e SCL) e il Vcc. Servono a caricare il bus e anche se in genere ogni modulino ha già le sue a bordo, non e' detto che non vadano inserite

Riguardo alla shield Ethernet, si collega fisicamente sul connettore ICSP ( quello a 6 pin ) però devi lasciare liberi anche i pin D10, D11, D12, D13 ( sono quelli del Bus SPI usato dalla Ethernet ) e se vuoi usare anche la SD a bordo della shield, devi liberare il pin D4

Ah... allora mi sa è un problema collegare lo shield ho praticamente tutto occupato...

Per le resistenze da quanto ? Ma così dici? (foto)

EDIT: Vedi questa di immagine che quella che ho caricato è fatta male


forse mi sono spiegato male, le reistenze vanno tra i comuni dell'SDA e il positivo , lo stesso per l'SCL

in pratica sono dei PullUp, il valore dipende da che resistenze hanno inserito nei moduli, diciamo che 3,3K dovrebbe andare bene

Puoi usare anche i pin da A0 a A3 come digitali

Brunello:
forse mi sono spiegato male, le reistenze vanno tra i comuni dell'SDA e il positivo , lo stesso per l'SCL

in pratica sono dei PullUp, il valore dipende da che resistenze hanno inserito nei moduli, diciamo che 3,3K dovrebbe andare bene

Puoi usare anche i pin da A0 a A3 come digitali

Forse ho capito male pure io. Adesso le ho messe così, dimmi se ho capito...
Comunque allora posso usare da A0 ad A3 come digitali e poi sposto il tx20 al pin 12 e uso l sd sul pin 4 :wink:

cosi'

i pin da 10 a 13, per la ethernet devono essere lasciati liberi
Che LCD-TFT useresti ?

Ecco fatto.
Comunque è questo il display

Qua ci sono i vari metodi di collegamento oltre lo schema del display, il problema che il tft mi prende 5 ingressi digitali...

A meno che non sia possibile spostare 4 ingressi del display su quelli da A0 ad A3 e quindi liberare da D10 a D13 e poi spostare il tx20 su un altro piedino libero digitale, liberando così il piedino D4 per usare l'sd...

puoi collegarlo direttamente sul bus SPI

// Option 2: must use the hardware SPI pins
// (for UNO thats sclk = 13 and sid = 11) and pin 10 must be
// an output. This is much faster - also required if you want
// to use the microSD card (see the image drawing example)
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);

dove come CS, DC, RST usi 3 pin che possono essere A1, A2, A3 ( gli altri due vanno al 11 e 13 )

Però non risolvo il problema dell'ethernet...

certo che lo risolvi.
sia l'ethernet che il TFT usano il bus SPI, che e' composto da 3 pin ( clk, Mosi, Miso e CS)
e siccome si tratta di un BUS, vi puoi collegare piu' dispositivi, l'unica cosa che non puo' essere in comune e' il CS ( chip select ) che deve essere diverso per ogni periferica.
in pratica,

  • ETH sono i pin di Arduino con inserita la shield Ethernet

ETH TFT
13 SCK (SCL)
12 Lasciare libero
11 MOSI (SDA)
10 Lasciare libero
A1 DC
A2 RES
A3 CS

Ah ecco perché si possono collegare più dispositivi come su A4 e A5!
Mi metto all'opera per lo schema allora :wink: Grazie mille dell'aiuto che mi stai dando!

Allora ecco lo schema penso vada bene :wink:

Secondo me, la gestione dell'anemometro TX20 lavora su Interrupt
e ti ricordi che abbiamo detto che i pin possono essere D2 per l'interrupt 0 e D3 per l'interrupt 1 ?
Sul pin D3 (interrupt 1 ) c'e' il pluviometro.... OK
Sul pin D2 (interrupt 0 ) attualmente c'e' il DS18B20, che funziona solo a chiamata, quindi puoi inserirlo in un pin qualsiasi
Mentre l'Anemometro e' sul pin D8.
Se inverti i pin D2 con D8 e' meglio

Sai cosa sono gli interrupt, vero ?
Faccio un esempio:
Tu vuoi leggere la velocità del vento e sai che l'OUT l'anemometro passa da LOW ad HIGH ad ogni giro completo delle pale ( o anche 2, 3, 4 volte, dipende da quanti reed vi hanno messo ) , tu non devi fare altro che rilevare lo stato sul pin collegato all'OUT dell'anemometro e misurare il tempo trascorso tra un impulso e l'altro.
Ora per fare questo, dovresti leggere continuamente lo stato della porta, senza poter fare altro. Ed e' qui che conviene usare gli Interrupt, che non sono altro una delle possibilità che offre il micro. In pratica abilitandolo, non fai altro che istruire il micro ad eseguire una certa azione quando lo stato su un determinato pin cambia. Puoi rilevare se e' LOW, se ha cambiato di stato, o anche nel momento in cui passa da HIGH a LOW o viceversa.
E il bello e' che la routine chiamata da questo interrupt si attiva anche se stai facendo altre cose e quindi non perde un colpo

Si si mi ricordo! Comunque io prima avevo collegato e testato il tx20 sul pin 4 e in effetti qualche volta segnava velocità impossibili, per esempio lo toccavo per sbaglio e si muoveva a malapena e segnava tipo 9km/h forse è per quello... Quindi mi consigli di mettere al posto del DS18B20 sul pin 2 l'anemometro. Bhe lo faccio allora :wink: Poi però ho capito in generale come usare gli interrupt e a cosa servono, però su questo lungo programma non so dove inserirli:

Ho messo negli allegati sia sketh che uso per adesso per visualizzare su display tx20 e tutti gli altri sensori più massime e minime per ora con la libreria time, in più ho messo lo schema elettrico quello finito :wink:

TX20___DS18B20___DHT22___DISPLAY.ino (12.6 KB)

Non conosco codesto anenometro e mi aspettavo fosse solo il sensore, invece vedo che ha anche una parte logica.
Infatti manda dei dati elaborati dal micro presente sull'anemometro e non si deve far altro che leggere detta stringa rispettando la temporizzazione.
Non serve quindi un interrupt, al massimo si deve attendere un po' per aspettare l'inizio della stringa.

questa parte pero' non la capisco

 pinMode(dataPin, OUTPUT);

 digitalWrite(dataPin, HIGH);
 delay(100);
 digitalWrite(dataPin, LOW );
 delay(500);
 pinMode(dataPin, INPUT);

Anzi, la vedo pure pericolosa, dato che potresti mettere in corto il pin collegato sul collettore del transistor

Comunque sì, manda delle stringhe di bit
Io questo programma del tx 20 l'ho preso e l'ho rielaborato che leggeva male i bit e poi ho aggiunto tutti gli altri sensori e display più max e min, quella parte l'ho lasciata... Dici che la dovrei togliere? Funziona anche senza se la tolgo