Ardu-Aquarium Controller v. 3.3.1

Ho provato ma non cambia nulla fa le sue solite 13 misure poi tutto tace...il led sulla stamp lampeggia quindi comunica ma non stampa nè sul monitor seriale nè sul GLCD...lo sketch dell'atlas funziona bene su entrambi i video anche se ha la noia di dare l'input dal monitor e io non so riscriverlo come fosse una sonda di temperatura non sono in grado. Ho pensato ma non può cancellare dalla ram il dato ad ogni rilevazione? E come mai stampa su entrambi i monitor lentamente invece che ogni 262 millisecondi come fa normalmente? Scusate la mia ignoranza assoluta!!!!!

la ram è occupata dalle variabili. Il semplice sketch della sonda non crea nuove variabili, quindi non accumula ram.

o meglio, usano della ram temporaneamente che poi viene liberata. evidentemente però la GLCD usa tanta ram e probabilmente in un momento in cui anche quella del sensore la richiede, andando in errore (che poi l'errore avvenga sempre ogni tot è un buon segno, vuol dire che una volta risolto sai come controllare di averlo effettivamente risolto)... infatti la sonda via seriale funziona bene. (giusto?)

Per il fatto che ci metta tanto devi considerare che arduino fa molta fatica ad elaborare immagini, anche se semplici come caratteri da stampare. ecco dove se ne va il tuo tempo in più

Ho provato a togliere tutte le righe per fare il simbolo del grado la "C" e "Ph" per risparmiare ram ho lasciato le rilevazioni pure ma senza guadagno sempre 13 rilevazioni poi stop....eppure questo codice

#include <glcd.h>
#include "fonts/allFonts.h"         // system and arial14 fonts are used
#include "bitmaps/allBitmaps.h"

String inputstring = "";                                                       //a string to hold incoming data from the PC
String sensorstring = "";                                                      //a string to hold the data from the Atlas Scientific product
boolean input_stringcomplete = false;                                          //have we received all the data from the PC
boolean sensor_stringcomplete = false;                                         //have we received all the data from the Atlas Scientific product


  void setup(){                                                                //set up the hardware
     Serial.begin(38400);                                                      //set baud rate for the hardware serial port_0 to 38400
     Serial3.begin(38400);                                                     //set baud rate for software serial port_3 to 38400
     inputstring.reserve(5);                                                   //set aside some bytes for receiving data from the PC
     sensorstring.reserve(30);                                                 //set aside some bytes for receiving data from Atlas Scientific product

 GLCD.Init(NON_INVERTED);   // initialise the library, non inverted writes pixels onto a clear screen
 GLCD.ClearScreen(); 
 GLCD.DrawBitmap(ArduinoIcon64x64, 32,0, BLACK); //draw the bitmap at the given x,y position
 GLCD.SelectFont(System5x7); // switch to fixed width system font
 GLCD.ClearScreen();}
 
 
 
   void serialEvent() {                                                         //if the hardware serial port_0 receives a char              
               char inchar = (char)Serial.read();                               //get the char we just received
               inputstring += inchar;                                           //add it to the inputString
               if(inchar == '\r') {input_stringcomplete = true;}                //if the incoming character is a <CR>, set the flag
              }  


  void serialEvent3(){                                                         //if the hardware serial port_3 receives a char 
              char inchar = (char)Serial3.read();                              //get the char we just received
              sensorstring += inchar;                                          //add it to the inputString
              if(inchar == '\r') {sensor_stringcomplete = true;}               //if the incoming character is a <CR>, set the flag 
             }



 void loop(){                                                                   //here we go....
     
  if (input_stringcomplete){                                                   //if a string from the PC has been recived in its entierty 
      Serial3.print(inputstring);                                              //send that string to the Atlas Scientific product
      inputstring = "";                                                        //clear the string:
      input_stringcomplete = false;                                            //reset the flage used to tell if we have recived a completed string from the PC
      }

 if (sensor_stringcomplete){                                                   //if a string from the Atlas Scientific product has been recived in its entierty 
      Serial.println(sensorstring);                                            //send that string to to the PC's serial monitor
      //delay(2000);
      GLCD.CursorTo(0, 6);              // positon cursor 
      GLCD.Puts("Ph ");
      GLCD.print(sensorstring);
      sensorstring = "";                                                       //clear the string:
      sensor_stringcomplete = false;                                           //reset the flage used to tell if we have recived a completed string from the Atlas Scientific product
      }
 }

funziona perfettamente. Questo è il codice del Ph su GLCD senza temperatura....come faccio a sapere quanta ram usa il mio sketch?

ho eseguito il memoryfree e mi restituisce 7305...quindi la ram dovrebbe essere a posto...giusto? Non potrebbe essere un conflitto fra le sonde? Con il GLCD non dovrebbe perchè lo sketch che ho postato prima funziona perfettamente...help!!!! =(

buona sera a tutti ho cercato di riprodurre il circuito di riccardo
non lo ho finito del tutto ma volevo un consiglio da voi se quello che ho fatto fino ad ora potrebbe andare bene,
spero che si riesca a capire bene se è si logicamente poi andra finito e rifatto in un modo migliore nel frattempo aspetto vostre notizie
grazie
simone

nuovo circuito stampato.fcd (11.8 KB)

Per pubblicare un file sarebbe il caso usare un formato più diffuso...
Allega un file Eagle, un file PDF o un'immagine.

buongiorno
ora ci riprovo a caricare il file e spero che si veda e che possiate consigliarmi e dirmi se per ora vanno bene i collegamenti ,
è ancora da finire e poi andra risistemato
grazie
simone

Ciao Simon,
nel tuo precedente post, insieme al file .fdc allegato, potresti mettere il link al programma utilizzato?

Ciao Michele,
grazie sempre per il tuo tempo, Hai ragione l'op-amp è il 358, ho sbagliato, inoltre è vero, sono riuscito a far lavorare tutte e tre le sonde con il circuito che ho messo su grazie a te, sul fatto della stabilità, però pensavo che si è vero che ho due resistenze variabili, ma a parte il trimmer multigiro che una volta tarato non cambia più, pensavo che la Rsens a livello dell'acqua stabile e temperatura stabile, mi fornisse un analogread() più stabile cosi come era quando la leggevo direttamente, però giustamente anche quello che dici sulla stabilizzazione via software è un'ulteriore step da fare.

Per quello che riguarda Lesto e le sue elaborazioni...

lesto:
FIGHISSIMO, ma quante letture sono per sensore? è ottimo! ora che hai le medie devi calcolare la varianza delle varie letture del sensore rispetto alla media (per la stessa temp alla stessa profondità), così hai l'errore di base della sonda.
Poi confronti la varianza alle varie profondità/temperature ed infine la varianza rispetto alle altre sonde (iniziamo con una, le altre vederemo poi). La varianza è di quanti punti si discostano dalla media.
La varianza è la radice quadrata ( ( ( somma di per ogni valore letto ( differenza tra valore letto e media) al quadrato ) ) fratto il numero di valori )


da Varianza - Wikipedia

Dunque, ho campionato scartando sermpre le prime (100 circa) 100 letture per ogni profondità a 4 temperature diverse ossia 30, 25, 20 e 15 gradi, il tutti per tutti e tre i sensori, ho avuto premura di tenere il più possibile le temperature il più stabile possibile, alla fine quindi abbiamo
per ogni sensore un bel pò di dati.
Oggi pomeriggio ho studiato un pò come funziona la varianza, non credo di aver capito fino in fondo, però l'ho applicata alle tabelle, fortunatamente esisteva già come funzione, vedi se ho fatto bene i compiti se ne hai tempo, ad ogni modo ho calcolato
per ogni profondità la varianza,
quindi la varianza delle varianze,
ed in fondo al foglio la varianza delle varianze precedenti.

tra l'altro questo mi ha permesso di accorgermi di alcuni dati incongruenti che ho rimisurato, ricostruendo però mi sono accorto che avevo semplicemente sbagliato i copia/incolla... troppi dati :cold_sweat:

andysirio11:
Ciao stavo facendo un programma simile ma mi sono dovuto fermare non riesco a capire perchè la sonda del ph mi rileva solo 13 volte il valore poi si impalla. Qualcuno riesce a sistemarmi questo codice?????? =(...
vi prego!!!!!!

Ciao, non so se hai risolto, ho visto che Lesto ha provato ad aiutarti, io ho dato un'occhiata veloce ma sinceramente, non riesco a capire cosa possa succedere, l'unica cosa che mi viene in mente è che forse sia impostato troppo veloce la seriale, è vero che il PH può avere variazioni "repentine" in casi limite, ma quella velocità mi sembra veramente eccessiva, non mi viene in mente altro, ma fammi sapere come va e se risolvi, perché quel sensore lo avevo già adocchiato. :wink:

simon77blitz:
buongiorno
ora ci riprovo a caricare il file e spero che si veda e che possiate consigliarmi e dirmi se per ora vanno bene i collegamenti ,
è ancora da finire e poi andra risistemato
grazie
simone

Ciai Simone,
apprezzo davvero tanto il tuo aiuto, ma credo sia prematuro disegnare il pcb ora, tutto il progetto è ancora un work in progres, rischi di lavorare tanto per poi dover modificare ogni volta tutto, poi fai tu, io ti sono comunque grato.
L'unica cosa è che se proprio vuoi disegnarlo, allora ti inviterei ad usare kicad, che è il programma che ho usato per disegnare lo schema, se vuoi ti mando il file originale, così puoi passare più facilmente al PCB.

Ciao a tutti e di nuovo grazie per il supporto che mi state dando. :slight_smile:

Riccardo

PaoloP:
Ciao Simon,
nel tuo precedente post, insieme al file .fdc allegato, potresti mettere il link al programma utilizzato?

Dovrebbe essere l'estensione dei file di FidoCad:

Quel software ha alcuni problemi:

  1. è solo per Windows;
  2. salva in un formato proprietario che non è apribile da Eagle;
  3. non mi sembra più sviluppato.

Esiste FidoCadJ, scritto in Java e quindi multipiattaforma. Mi pare abbia uno script per poter esportare almeno i componenti più comuni per Eagle (non lo so per certo, leggo quello che c'è scritto sul forum). Ma se si deve imparare un Cad, tanto vale iniziare con Eagle, difficoltà per difficoltà...

Interessante FidoCadJ. :wink:

si.. il programma che ho usato è FIDOCAD E FIDOCADj ,i file si possono aprire con java.
li ho usati svariate volte per fare le PCB e fino ad ora anno lavorato molto bene .
Comunque ora voglio provare anche Kicad cosi se gentilmente Riccardo mi potresti mandare anche il file provo a vedere cosa esce fuori (cosa riesco a combinare).
Lunico modo che ho a disposizione per fare le prove sono le basette millefori quindi sto cercando di riprodurre il circuito.
Per caso nessuno è riuscito a capirci qualcosa sull immagine che ho mandato cosi se per ora mi dite che ho fatto bene posso proseguire e cercare di arrivare al vostro livello.
sempre mille grazie a tutti

simon

Salve a tutti e mi scuso in anticipo se vi disturbo ogni volta.
Sono alle prime armi ma ce la sto mettendo tutta per cercare di imparare.
Ho caricato lo Sketch e ora dovrei impostare L ora ma non sò ne dove e ne come, mi potete aiutare?
poi vi volevo chiedere, ho realizato piu o meno l' HW
tranne la parte con i mosfet e i led,
volevo sapere dove va collegato il trasformatore a 12volt?
perche se non lo collego e anche se carico lo Sketch, penso che non si accende ne l' LCD e niente altro e non posso verificare se funziona
spero di essermi fatto capire e scusatemi per il disturbo
spero che mi posiate aiutare
grazie

simon

Ciao Simon,
ti metto in allegato lo schema ed i componenti che ho abbozzato io per realizzarlo, ovviamnete li dovrai aggiungere alle librerie di kicad, gli altri li trovi tranquillamnet in rete, ma se hai difficoltà batti un colpo.

I 12 volt, vanno collegati a monte del regolatore di temzione (LM7805), in particolare il positivo al pin1 (INPUT) ed il negativo al pin2 (GND), i 12v li colleghi anche al Vin di Arduino, e controlli che tutte le masse siano collegate.

Una volta caricato lo sketch, è sufficientre premere OK per entrare nei menù.

Ciao Riccardo.

schema.rar (6.18 KB)

quando carico lo Sketch ora mi da un errore
mi dice errore durante la compilazione

Definition of "RTC" DS1307.cpp.o:C:\User\Simon\AppData\Local\Temp\build9211767881763287177.tmp/DS1307.cpp:40:First Defined here

mi sapete dire cosa devo fare
lo devo dire,
sono veramente una frana...

sempre grazie siete sempre gentilissimi

simon

Probabilmente non hai installato la libreria, scaricala dal link del 2° post.

Rici

la libreria del RTC la ho carica come tutte le altre ora non mi ricordo da quale post lo presa,
ma la posso cancellare e riprovare a caricarlla
gentilmente mi potresti mandare il linck del secondo post.
grazie

simon

E' alla prima pagina di questo topic...

cmq: http://libds1307.googlecode.com/files/DS1307.zip

niente da fare mi da sempre lo stesso errore non riesco a capire dove sia il problema
sembra (credo) che non sia installata la libreria ma quando vado a controllare le librerie li è installata
che altro potrebbe essere?

simon

una volta che carico lo Sketch nel programma praticamente si aprono due schede una dove ce il programma e l altra dell' RTC.
è normale?