problema lettura secondi RTC

roberto è il nome.
si la conducibilità è abbastanza semplice: in pratica si tratta di misurare gli ohm tra due elettrodi (che assumiamo che troverai inossidabili...il codice ed il sistema si trova con google facilmente)... unica avvertenza è di misurare gli ohm per brevissimi intervalli altrimenti cominci a fare elettrolisi dell'acqua... anche i normali tester multifunzione che sono in giro non vanno molto bene per lo scopo proprio perchè dopo pochi istanti cominci a vedere importanti variazioni negli ohm.
Serve per capire quanti sali sono disciolti in acqua: per esempio il sale da cucina ha ph sostanzialmente 7 come l'acqua... è neutro diciamo... quindi con un semplice phametro non capisci quanto sale hai nell'acqua: lo puoi capire solo se misuri la resistenza dell'acqua in quanto il sale discolto si dissocia rendendo conduttiva l acqua... è molto importante se fai soluzioni fisiologiche... per i pesci speravo sinceramente che fossero un po' più do bocca buona ma vedo che la cosa interessa...

per aggiungere l'accensione e lo spegnimento ad un orario stabilito, devo lavorare in queste righe, giusto?

void loop () {
  DateTime now = RTC.now();
  //    delay(1000);        //QSECOFR
  if (oldSecond != now.second()) { //qsecofr sono cambiati i secondi...
    // 29/12    ...poi metterai anche i minuti e le ore...
    // fa scattare il fadeup quando i secondi dell'orologio sono a 0
    // fa scattare il fadedown quando i secondi dell'orologio sono a 30
    if (now.second()==0 && !fadeUp){
      fadeUp = true;
      oldMillisFade = millis();
    }
    if (now.second()==30 && !fadeDown) 
    {
      fadeDown = true;
      oldMillisFade = millis();
    };
    //end 29/12...poi vedi alla fine

if ((now.second()==secStart) && (now.minute()==minStart) && (now.hour()==oraStart) && !fadeUp)

qsecofr:
if ((now.second()==secStart) && (now.minute()==minStart) && (now.hour()==oraStart) && !fadeUp)

if ((now.second()==0)  && (now.minute()==23)  && (now.hour()==00) && !fadeUp){
      fadeUp = true;
      oldMillisFade = millis();
    }
    if ((now.second()==0)  && (now.minute()==26)  && (now.hour()==00) && !fadeDown) 
    {
      fadeDown = true;
      oldMillisFade = millis();

ok?
ora dimmi se è corretto questo passaggio "per favore :-)"

if (fadeUp) {
      long ms = millis()-oldMillisFade;
      ms = ms / 10;    // fa uno step ogni 10 millisecondi....il fade totale dura 2.55sec              
      if (ms > 254 )     
      { //fade up completo
        ms =255;     //whatch dog.. non credo serva ma è per sicurezza
        fadeUp = false;
      }
      analogWrite(PWMPORT,ms);
    }

    if (fadeDown) {
      long ms = millis()-oldMillisFade;
      ms = ms / 10;    // fa uno step ogni 10 millisecondi....il fade totale dura 2.55sec              
      ms = 255-ms;
      if (ms < 1 )     
      { //fade up completo
        ms =0;     //whatch dog.. non credo serva ma è per sicurezza
        fadeDown = false;
      }
      analogWrite(PWMPORT,ms);

in questo caso il led passa da 0 a 100% in 2,55 secondi,
se volessi modificare la durata devo cambiare così?

if (fadeUp) {
      long ms = millis()-oldMillisFade;
      ms = ms / 7050;    // fa uno step ogni 10 millisecondi....il fade totale dura 2.55sec              
      if (ms > 254 )     
      { //fade up completo
        ms =255;     //whatch dog.. non credo serva ma è per sicurezza
        fadeUp = false;
      }
      analogWrite(PWMPORT,ms);
    }

    if (fadeDown) {
      long ms = millis()-oldMillisFade;
      ms = ms / 7050;    // fa uno step ogni 10 millisecondi....il fade totale dura 2.55sec              
      ms = 255-ms;
      if (ms < 1 )     
      { //fade up completo
        ms =0;     //whatch dog.. non credo serva ma è per sicurezza
        fadeDown = false;
      }
      analogWrite(PWMPORT,ms);

cosi i tempi si allungano in quasi 30 minuti,per essere precisi in 29,9625 sec.
ti prego dimmi che è giusto :roll_eyes:

si: attenzione solo di non sovrapporre la fase di fadeup a quella di fadedown se no viene fuori un casino... quindi tieni sempre più di mezz'ora tra le due fasi.... non lo stai facendo.

Ho letto che c'è gente che usa al posto delle lampade fluorescenti delle righe di led: sicuramente sarebbe più semplice da controllare (e sicuramente più costoso) ma mi chiedo: i led hanno le giuste frequenze? che luce abbisognano questi pesci?

qsecofr:
si: attenzione solo di non sovrapporre la fase di fadeup a quella di fadedown se no viene fuori un casino... quindi tieni sempre più di mezz'ora tra le due fasi.... non lo stai facendo.

Ho letto che c'è gente che usa al posto delle lampade fluorescenti delle righe di led: sicuramente sarebbe più semplice da controllare (e sicuramente più costoso) ma mi chiedo: i led hanno le giuste frequenze? che luce abbisognano questi pesci?

Mi sa tanto che opto per i LED, considerando che non si tratta di marino quindi non necessitano di una notevole quantità di luce. Stavo pensando di farmi fare 4 tubi con strip LED da +o- 35 lumen/LED con 1 red, 1 royal blue e 2 bianchi ma con ºK differenti.
Di questi tubi vorrei che si accendessero in fasi diverse.
Tipo: nella scala di 1ora da 0-100% blu nella prima 30min poi si aggiunge il rosso dopo 15 min partono i bianchi per avere tutto ON in 60 minuti. Secondo te se po fa?
Ps perche in fase di accensione spegnimento si da il valore 255?

ms = 255-ms;

Questo codice:

long ms = millis()-oldMillisFade;
ms = ms / 7050;

è concettualmente sbagliato.

Una variabile di tipo "long" può contenere solo numeri INTERI, cioè senza virgola.
Se il risultato della divisione fra ms e 7050 è inferiore a 0, ms conterrà 0. Se il risultato sarà 1.2, ms conterrà 1. Se il risultato sarà 1.9, ms conterrà 1. ecc...

leo72:
Questo codice:

long ms = millis()-oldMillisFade;

ms = ms / 7050;



è concettualmente sbagliato.

Una variabile di tipo "long" può contenere solo numeri INTERI, cioè senza virgola.
Se il risultato della divisione fra ms e 7050 è inferiore a 0, ms conterrà 0. Se il risultato sarà 1.2, ms conterrà 1. Se il risultato sarà 1.9, ms conterrà 1. ecc...

quindi per avere una scala di tempo di 30 minuti dovrei fare 7060*255fade completo/1000"ms"/60"un minuto" per ottenere 30,005 che verra letto come 30
giusto?

leo72:
Questo codice:

long ms = millis()-oldMillisFade;

ms = ms / 7050;



è concettualmente sbagliato.

Una variabile di tipo "long" può contenere solo numeri INTERI, cioè senza virgola.
Se il risultato della divisione fra ms e 7050 è inferiore a 0, ms conterrà 0. Se il risultato sarà 1.2, ms conterrà 1. Se il risultato sarà 1.9, ms conterrà 1. ecc...

non l'ho testato... non ho nulla per poterlo testare...non ho ben capito perchè è sbagliato.... be... ecco... diremo che ms non è il nome di variabile più adatto... vi spiego cosa volevo creare così mi dite se e dove sbaglio:

  • il long l'ho usato perchè ho pensato che si potesse avere un tramonto lungo di passa una ora... quindi 1000ms*60secondi = 60.000... 2^15 fa 32000 e rotti se non uso il segno arrivo a 64000 e rotti ma ci stò un po' troppo a pennello.
    poi ho diviso il long per un tempo: inizialmente era di 10ms per fare una rampa rapida di debug ed ora è stato posto a 7000 e rotti... nelle mie intenzioni ogni uno di questi step (7000) si ha l'incremento di ms che poi viene sfruttato dal analogwrite... cioè sale a scalini... del troncamento della divisione me ne sono fregato: non mi sono proprio posto il problema tanto ho già 256 scalini che sono più che sufficenti.

il 255 del fadeDown è perchè il 100% dell'uscita in pwm ce l'hai con 255 (se non hai picchignato con i timer).... quindi per pigrizia mentale di trovare altre soluzioni ho fatto il down uguale all'up solo invertendo il valore scritto con 255-ms...

per mettere più "fade" puoi fare altri codici fadeup e fadedown usando delle nuove variabili (fadeup_2 fadedown_2) e duplicando anche l'oldMillisFade e usando altre uscite nel analogwrite
Oppure si può mettere poco prima del analogwrite si mette un if e se il segnale è maggiore o minore di tot si accende o si spengono dei bit.
Attenzione che il fade funziona se il led è attaccato su un'uscita pwm (quelle contrassengate con la cedilia o come cavolo si chiama l'ondina :grin:)

Se il risultato è un numero ragionevolmente grande allora va bene: il troncamento dei decimali non si farà sentire.
Esempio:
705000/7050=100

Ma se il dividendo ed il divisore sono vicini come ordini di grandezza, allora puoi rischiare di avere un risultato troncato anche allo zero.
6000/7050=0.85 -> 0
E l'incremento non esiste.

Non so su che ordini di grandezza andate, forse sarebbe meglio usare un float e poi fare il casting in fase di analogWrite

leo72:
Se il risultato è un numero ragionevolmente grande allora va bene: il troncamento dei decimali non si farà sentire.
Esempio:
705000/7050=100

Ma se il dividendo ed il divisore sono vicini come ordini di grandezza, allora puoi rischiare di avere un risultato troncato anche allo zero.
6000/7050=0.85 -> 0
E l'incremento non esiste.

Non so su che ordini di grandezza andate, forse sarebbe meglio usare un float e poi fare il casting in fase di analogWrite

attualmente stiamo testando in scala di pochi minuti per vedere come funziona, diciamo che si tratta di una beta, ringrazio tantissimo "qsecofr" che mi sta aiutando pur non avendo l'hardware da testare, quindi si basa sulle mie analisi, così da poter studiare un po meglio il funzionamento e la logica usata.
quello che stiamo cercando di fare è un controller per acquario "dolce" quindi niente pretese particolari. vorremmo inserire un menu per gestire le varie accensioni e regolare orario, data e orari di accensione dei vari tubi LED. per me so già che sarà un lavoraccio, però sarebbe bello finirlo con l'aiuto del forum, anche perché in giro per la baia ci sono molti di questi 3D aperti ma che poi finiscono alla deriva.
dovrò sistemare bene anche l'hardware perché al momento è un groviglio di fili, che per il momento fa il suo lavoro...........

leo72:
Se il risultato è un numero ragionevolmente grande allora va bene: il troncamento dei decimali non si farà sentire.
Esempio:
705000/7050=100

Ma se il dividendo ed il divisore sono vicini come ordini di grandezza, allora puoi rischiare di avere un risultato troncato anche allo zero.
6000/7050=0.85 -> 0
E l'incremento non esiste.

Non so su che ordini di grandezza andate, forse sarebbe meglio usare un float e poi fare il casting in fase di analogWrite

il valore del dividendo lo vedi calcolato appena sopra (tutte le volte che passa di li il loop): è dato da millis- oldmillis e pertanto partirà da 0 ed arriverà (nel caso ipotetico di un'albatramonto di un'ora) a 60.000... e chissà: se serve anche oltre.... Nel caso di un divisore di 7050 quindi il fade comincierà effettivamente 7050 millesimi di sec. dopo il lancio orario: se vogliamo è un po' inesatto perchè sarebbe stato da farlo partire immediatamente ma tanto da 0 a 1 (su 255) sull'uscita analogica non si ha comunque un cambiamento visibile ad occhio nudo (anzi probabilmente rimane sotto la soglia del led) e l'alba in questo caso la facciamo durare mezz'oretta: sette secondi non ci spostano la vita.

per il groviglio di fili è meglio che non vedi dove lavoro io... diremo solo che è in zona di interdizione totale dalla moglie... io non so come fare per tenere questa stanza "presentabile"... ci sono fili ovunque... resistenze...pc... stagno...stampanti e cosi spaccati per prendere i componenti... ogni tanto passo con la mano sopra il tavolo e butto giù un po' di stagno o residui di filo poi lancio la roomba perchè appunto la moglie...ma la cosa non migliora affatto...

qsecofr:

leo72:
Se il risultato è un numero ragionevolmente grande allora va bene: il troncamento dei decimali non si farà sentire.
Esempio:
705000/7050=100

Ma se il dividendo ed il divisore sono vicini come ordini di grandezza, allora puoi rischiare di avere un risultato troncato anche allo zero.
6000/7050=0.85 -> 0
E l'incremento non esiste.

Non so su che ordini di grandezza andate, forse sarebbe meglio usare un float e poi fare il casting in fase di analogWrite

il valore del dividendo lo vedi calcolato appena sopra (tutte le volte che passa di li il loop): è dato da millis- oldmillis e pertanto partirà da 0 ed arriverà (nel caso ipotetico di un'albatramonto di un'ora) a 60.000... e chissà: se serve anche oltre.... Nel caso di un divisore di 7050 quindi il fade comincierà effettivamente 7050 millesimi di sec. dopo il lancio orario: se vogliamo è un po' inesatto perchè sarebbe stato da farlo partire immediatamente ma tanto da 0 a 1 (su 255) sull'uscita analogica non si ha comunque un cambiamento visibile ad occhio nudo (anzi probabilmente rimane sotto la soglia del led) e l'alba in questo caso la facciamo durare mezz'oretta: sette secondi non ci spostano la vita.

per il groviglio di fili è meglio che non vedi dove lavoro io... diremo solo che è in zona di interdizione totale dalla moglie... io non so come fare per tenere questa stanza "presentabile"... ci sono fili ovunque... resistenze...pc... stagno...stampanti e cosi spaccati per prendere i componenti... ogni tanto passo con la mano sopra il tavolo e butto giù un po' di stagno o residui di filo poi lancio la roomba perchè appunto la moglie...ma la cosa non migliora affatto...

per la stanza ti capisco benissimo mi sa che siamo messi bene noi due.
vorrei approfittare per farti tanti sinceri auguri di una buona fine e un migliore inizio 2013 a te e tutta la tua famiglia.
ora vado a prepararmi altrimenti mia moglie chiede il divorzio con l'anno nuovo :wink:
ci sentiamo il prossimo anno, ciao ciao

Ciao,
ho letto solo oggi il topic e con molto piacere devo dire...
Anche io sto lavorando ad una centralina per controllare un acquario, ho iniziato mooolto tempo fa, anche io partendo da zero, ma per mancanza di tempo vado pianissimo, in più un'altro ragazzo con il quale brutalizzavamo insieme arduino per il progetto in questione si è tirato momentaneamente fuori con ullteriore rallentamento di tutto.
Ad ogni modo, ti allego una fotina della mia bread, sulla quale vedi anche la scheda relé che mi sono autocostruito perché l'avorando con l'acqua ho voluto relè a doppio contatto. Il topic dove i ragazzi del forum mi hanno aiutato: http://arduino.cc/forum/index.php/topic,128951.0.html
Ad ogni modo il nostro sketch attualmente permette con una serie di menù di impostare l'ora dell'rtc, di inserire i dati per i 2 fotoperiodi, 2 perché voglio gestire due linee inipendenti di luci e c'è anche una funzione che in base ai dati inseriti gestisce i fading delle due linee ed infine in base al dato inserito gestisco la temperatura dell'acqua leggendo e mediando la lettura di due sensori dallas come quello che stai usando anche tu, ovviamente il codice è molto sporco, va snellito e modificato, perché nel frattempo è cambiato l'ide le librerie e via dicendo, ma credo ci sia del buono da utilizzare, sono un neofita anche io :cold_sweat:
Mi piacerebbe se formassimo un gruppetto di lavoro tutti insieme, se la cosa interessa approfondisco quanto ho fatto e molto volentieri lo condivido...

Riccardo :slight_smile:

P.S. Anche a me interessa un'acquario di discus XD

Ciao Rici.
Complimenti per l'ottimo risultato. :grin:
Le tue board sono sempre ordinatissime. :wink:

riciweb:
Ciao,
ho letto solo oggi il topic e con molto piacere devo dire...
Anche io sto lavorando ad una centralina per controllare un acquario, ho iniziato mooolto tempo fa, anche io partendo da zero, ma per mancanza di tempo vado pianissimo, in più un'altro ragazzo con il quale brutalizzavamo insieme arduino per il progetto in questione si è tirato momentaneamente fuori con ullteriore rallentamento di tutto.
Ad ogni modo, ti allego una fotina della mia bread, sulla quale vedi anche la scheda relé che mi sono autocostruito perché l'avorando con l'acqua ho voluto relè a doppio contatto. Il topic dove i ragazzi del forum mi hanno aiutato: http://arduino.cc/forum/index.php/topic,128951.0.html
Ad ogni modo il nostro sketch attualmente permette con una serie di menù di impostare l'ora dell'rtc, di inserire i dati per i 2 fotoperiodi, 2 perché voglio gestire due linee inipendenti di luci e c'è anche una funzione che in base ai dati inseriti gestisce i fading delle due linee ed infine in base al dato inserito gestisco la temperatura dell'acqua leggendo e mediando la lettura di due sensori dallas come quello che stai usando anche tu, ovviamente il codice è molto sporco, va snellito e modificato, perché nel frattempo è cambiato l'ide le librerie e via dicendo, ma credo ci sia del buono da utilizzare, sono un neofita anche io :cold_sweat:
Mi piacerebbe se formassimo un gruppetto di lavoro tutti insieme, se la cosa interessa approfondisco quanto ho fatto e molto volentieri lo condivido...

Riccardo :slight_smile:

P.S. Anche a me interessa un'acquario di discus XD

Cavolo, sei avanti rispetto a me, io sto impazzendo per riuscire a creare un menu, dove ti nascondevi XD il lavoro che sto portando avanti grazie a un membro del forum è un po indietro, io ho iniziato a lavorarci da qualche mese, anche se ho arduino da un anno quasi, e pure io gli dedico quel po di tempo tra una cosa e un altra.
Comunque si mi farebbe piacere condividere tutto il materiale, anche se il mio è poco. Sarebbe bello condividere tutto qui sul forum perchè come ho gia detto si trova tanto in rete, ma poi tutto si incaglia. Sarebbe utile condividere i possibili schemi delle varie schede montate come la tua relay etc etc.
Beh che dire!?!?!?!
Benvenuto

@riciweb

mi sono innamorato appena ho visto la tua breadboard :astonished:

per quanto posso aiutare il rpogetto mi interessa molto! e posso aiutare a dipanare un po' di codice!

PaoloP:
Ciao Rici.
Complimenti per l'ottimo risultato. :grin:
Le tue board sono sempre ordinatissime. :wink:

leouz:
mi sono innamorato appena ho visto la tua breadboard :astonished:

Ciao Paolop, e leouz,
mi fate arrossire… :blush: confesso che tutto quell’ordine, non è un esercizio estetico, ma un più semplice tentativo di avere la circuiteria chiara e facile da seguire ed eventualmente correggere, sono a così basso livello in elettronica che non solo quello che vedete è scopiazzato, ma è pure scopiazzato male… :blush:

danidiscus:
Cavolo, sei avanti rispetto a me, io sto impazzendo per riuscire a creare un menu, dove ti nascondevi XD il lavoro che sto portando avanti grazie a un membro del forum è un po indietro, io ho iniziato a lavorarci da qualche mese, anche se ho arduino da un anno quasi, e pure io gli dedico quel po di tempo tra una cosa e un altra.
Comunque si mi farebbe piacere condividere tutto il materiale, anche se il mio è poco. Sarebbe bello condividere tutto qui sul forum perchè come ho gia detto si trova tanto in rete, ma poi tutto si incaglia. Sarebbe utile condividere i possibili schemi delle varie schede montate come la tua relay etc etc.
Beh che dire!?!?!?!
Benvenuto

leouz:
per quanto posso aiutare il rpogetto mi interessa molto! e posso aiutare a dipanare un po' di codice!

Per cominciare nel modo migliore :), vorrei spiegare la filosofia (che parolone :cold_sweat:) che sto seguendo nel realizzare il mio progetto.
In pratica vorrei che il tutto sia semplice da usare ed allo stesso tempo non ponga limitazioni eccessive nell’utilizzo degli accessori acquaristici che andrò a comandare, ti faccio un paio di esempi, sperando che chi legge e capisce più di me (ci vuole veramente poco :.), mi corregga se scrivo castronerie:

  • Per il fading (lato HW) ho deciso di usare pilotati in PWM da arduino dei mosfet IRF540, sopportano molta corrente e mi permettono di pilotare strip led a 12VDC o 24VDC, rimanendo sempre nel range del datasheet, oggi poi leggendo velocemente come funzionano i ballast per T5 ho visto che variano la luce dei tubi grazie ad un ingresso variabile da 0 a 10V, probabilmente con un jumper che attivi il giusto partitore di tensione si potrebbe con la stessa funzione comandare in PWM anche un ballast (tutto da verificare ovviamente).

  • Ho letto poi che già qualcuno ti ha scritto di usare per comandare gli accessori dell’acquario optoisolatori e triac, io ho scartato questa soluzione in favore dei, da molti ritenuti jurassici, relé, perché offrendo un contatto On/Off pulito mi permetteranno di comandare eventuali elettrovalvole per CO2 o per il cambio automatico dell’acqua funzionanti indifferentemente a 12/24/230 VAC o VDC, con i triac solo VAC ;).

E così vorrei continuare a seguire questo orientamento per gli sviluppi futuri XD

Per quello che ho già realizzato invece ti anticipo che sto usando:

  • Display LCD 20*4 HD44780 pilotato con IO/Expander PCF8574 e libreria LiquidCrystal_I2C
  • RTC DS1307 con libreria DS1307 (da rivedere perché ho intenzione di passare alla libreria Time e DS1307RTC)
  • 5 pulsanti per navigazione nei menù e inserimento dati Su/+, Giù/-, Dx, Sx e Ok letti anchessi via I2C con libreria IOexp
  • 2 sensori DS18B20 per la rilevazione della temperatura
  • 1 Shift register 74HC595 per comandare la scheda relé
  • 1 circuitino con LM7805 per abbassare i 12v usati per la scheda relé a 5V per alimentare tutto quello che ho scritto sopra (è quello in alto a dx sulla bread) perché i 5v in uscita da Arduino hanno poco amperaggio e avevo qualche problema.

OK, credo di aver più o meno scritto in sintesi quasi tutto, se ti/vi piace questo mio modo di vedere le cose allora direi che forse è il caso di aprire un topic dedicato e veder cosa tiriamo fuori.

Ciao a tutti.

Riccardo :slight_smile:

per me non ci sono problemi, anzi spero di essere utile perché devo ammettere che sono proprio asino.
volevo chiederti se hai lo schema del collegamento tasti che vorrei utilizzare anche io.

Non ho ancora disegnato nessuno schema, ma ti basta scopiazzare la mia bread, ti serve:

  • il PCF8574
  • 5 resistenze per il pull-down dei tasti da 10k
  • 1 condensatore da 100nF per il disaccoppiamento del PCF (molti non lo usano), quello azzurro
  • 5 condensatori da 100nF sui tasti, questi li uso per il debouncing HW quelli marroncini tra positivo ei rispettivi piedini sul pcf
  • 2 resistenze 10k per il bus I2C
  • 1 resistenza 10k sul piedino int del PCF

Scusa se tisembro sbrigativo, appena ho tempo raccolgo meglio il materiale e cerco di essere preciso proverò con fritzing a fare qualcosa.

Ad ogni modo, se vuoi che mandiamo avanti insieme la cosa dovresti dotarti dele stesse cose che ho io altrimenti poi non riusciamo a stendere il software.

In quanto all'asino pensa che io non provo nemmeno a paragonarmici per non offenderlo...
Ho iniziato da zero anche io, ma leggendo sul forum, googlando all'infinito, combinando casini a rotta di collo (mi è pure esploso un'elettrolitico in faccia) e chiedendo sul forum, ho imparato qualcosa.

Ciao Riccardo.