Ardu-Aquarium Controller v. 3.3.1

questa me la segno :grin:

Effettivamente una domanda del genere in un topic che da oltre un anno parla solo di gestione di acquari... :grin: ma d'altra parte qualcuno ha mai visto un pesce finora? Possibile che li abbiano fritti tutti? :stuck_out_tongue_closed_eyes:

tra pompette, lampade e sensori non è rimasto spazio per i pesci! :grin:

Ciao Piermont,

pieromt:
a cosa serve questo schema???

Avrai capito ormai che michele73 ha postato una sua versione del pcb del controller.

@ Michele Menniti e lesto

Che spiritoooossiiii XD XD XD XD va bhe ci sta tutta, il fatto è che la "congiuntura economica rema a sfavore dello sviluppo del controller :~ di idee ce ne sono molte ma :roll_eyes:

Va bhe dai leggete più avanti che non è che sia stato proprio a bocce ferme...

Riccardo

Ciao a tutti,
ho iniziato a disegnare un po’ di PCB per i moduli del Controller che fino ad ora sicuramente funzionano, ma prima di ordinare vorrei il vostro parere, così ho messo in allegato i miei strafalcioni…
Premetto che su tutti i moduli I2C mancano le pullup sul bus, questo perché le metterò sulla scheda principale che ancora non ho fatto perché ci sono ancora diverse cose da definire.
Breve descrizione:
- Display I2C interface: nulla di eclatante, ne esistono di già fatte, ma io ho voluto rendere regolabile anche la backlight, così l’ho disegnata in modo che i due trimmer fuoriescano dal bordo del display per poter essere regolati facilmente e vedere gli effetti della regolazione.
- Switch with I2C interface: già pubblicata in quest’altro topic, Lettura Tasti con PCF8574 - Generale - Arduino Forum ora però la integro nel controller, fa il debounce dei tasti e con il solito PCF si connette al controller/Arduino
- Display & switch I2C interface: riunisce le due sopra, l’ho fatta per dare un’opzione in più qui infatti è possibile innestare un PCB dei tasti fatto a parte, così ognuno ci attacca i tasti che vuole, anche qui ci sono i due trimmer per regolare contrasto e backlight, con display e tasti montati dovrebbe rimanere spazio sufficiente per infilare un cacciavite e regolarli. Purtroppo ho dovuto fare i conti con i limiti delle misure di eagle free.
- Only switch NAVIMEC / Omron: come detto sopra, per dare la possibilità a tutti di usare i tasti che ognuno preferisce, ne ho fatti due, uno per i miei ed uno per tasti più generici.
- RTC: ne esistono di già fatti, ma ho voluto divertirmi ugualmente
- Led PWM: schedina per fare il PWM con le strip led, ho messo morsetti separati per coloro che useranno alimentatori separati per ogni linea
- Water level sensor: Per utilizzare il sensore di livello dell’acqua, questo http://www.milonetech.com/uploads/Std_eTape_Datasheet.pdf

Grazie per il tempo che mi dedicherete. :slight_smile:

edit 14/04/2014: rimossi i file per revisione degli stessi.

Ciao Riciweb,
bel lavoro mi piace molto bello.

bella rici, schedine bellissime, te le stampano proprio in viola ? :slight_smile:

su molti schemi hai dimenticato i valori di resistenze, condensatori ecc. vedi ad esempio quella per il sesnore livello, oppure quelle i2c. riguardale tutte

Si uso https://oshpark.com e le fanno così, lo ho già usato e per il poco che capisco la qualità è ottima, in rete c'è sicuramente qualcosa di più economico, ma con loro è tutto così easy che faccio fatica a cambiare, se poi arrivo a 10 pezzi per scheda e supero i 150 pollici totali, il prezzo scende a 1$ per pollice quadrato :D.
Per i valori invece ? superficialità da principiante... :blush: lunedì sistemo tutto.

Ciao e grazie per averle guardate.

I miei complimentiiiii, ma hai realizzato solo la versione smd?
è possibile avere un PCB ovviamente pagando.
grazie ciao max

Testato:
bella rici, schedine bellissime, te le stampano proprio in viola ? :slight_smile:
su molti schemi hai dimenticato i valori di resistenze, condensatori ecc. vedi ad esempio quella per il sesnore livello, oppure quelle i2c. riguardale tutte

Ancora grazie per la tua segnalazione, ho messo i valori come da tuo giusto suggerimento, spero di non aver dimenticato nulla...
Riallego qui e nel post precedente.

maxweb74:
I miei complimentiiiii, ma hai realizzato solo la versione smd?
è possibile avere un PCB ovviamente pagando.
grazie ciao max

Più avanti, tempo permettendo vedrò di fare anche le versioni DIL, per i PCB, magari sentiamoci in PM ma non dovrebbero esserci problemi, se non quelli strettamente lagati al raggiungimento di alcune quote che poi determineranno il prezzo finale dei singoli pcb.

I pcb, possono tranquillamente essere usati anche in tanti altri progetti, quindi se altri fossero SERIAMENTE/AFFIDABILMENTE INTERESSATI mi scrivano in PM.

Riccardo.

edit 14/04/2014: rimossi i file per revisione degli stessi.

Ciao Riciweb,
posso chiederti una cosa se non ti disturba?
sono riuscito a pilotare PCF 8574AP
con solo questo sistema:

#include <IOexp.h>
#include <Wire.h>
IOexp SCHDOSATORE(0x38);
void setup()
{
  Wire.begin(); // join i2c bus (address optional for master)
 // Serial.begin(9600);
}
void loop()
{
  SCHDOSATORE.write( P0, false);
  delay(500);
  SCHDOSATORE.toggle(P0);
  delay(500);  
}

il consiglio che mi hai dato di usare - File/Esempi/02.Digital/BlinkWithoutDelay come faccio a cambiare il pin 13 le ho provate tutte quelle che conosco molto poche sinceramente

grazie mille

messaggio coretto da maiuscolo a minuscolo

edit by mod: per favore includere il codice usando gli appositi tag

usare il maiuscolo equivale a urlare, cerca di farne a meno.

Anche le variabili e il codice sono scritte in maiuscolo/minuscolo per uno scopo preciso, anche se non influisce sul funzionamento è per leggibilità.

In maiuscolo le costanti, con la prima lettera mnaiuscola i topi di classe, con la prima lettera minuscola le variabili

scusate ma non mi si toglieva anche disinserito il tasto non scriveva in minuscolo
scusate scusate ma ultimamente o il pc e fuori o la linea adsl info e ko

ciao lesto,
scusa ancora mi puoi aiutare a capire questa cosa
grazie

lesto:
usare il maiuscolo equivale a urlare, cerca di farne a meno.

Ciao lesto, in realtà stamattina, il forum non funzionava molto bene, perché anche a me è capitato, di visualizzarlo tutto in maiuscolo, anche ora i titoli dei topic sono tutti in maiuscolo, in più in alcuni momenti, cambiava anche il font del titolo, magari Leo ha una spiegazione.

michele73:
Ciao Riciweb,
posso chiederti una cosa se non ti disturba?

Michele, l'esempio che ti ho suggerito, serve a capire un metodo, a te non deve interessare l'uso del pin 13, ma il metodo che viene usato, ad ogni modo puoi "immaginare" che il pin 13 sia l'equivalente di uno dei pin di SCHDOSATORE, e applicare il metodo che ti ho suggerito per temporizzare l'attuazione del dosatore. Ma tu hai un problema in più, nel senso che devi interrogare RTC per sapere se è il momento giusto per dosare e a quel punto far funzionare il dosatore utilizzando il metodo che ti ho suggerito.

Ciao Riccardo.

Ciao Riciweb,
grazie all'ultima spiegazione forse mi sono svegliato puoi vedere se ho capito bene la prima parte milles
posto il codice che sono riuscito a fare, mi puoi illuminare come posso variare "long interval = 50;" per impostare diversamente i tempi vedi sotto sottolineati
ancora grazie per l'aiuto

_________
// Teste I2C - IO Expander pcf8574P
// Example code for the IOexp libary
// Analog In 5 - SCL
// Analog In 4 - SDA
// Endereço I2C 0 0 0 A2 A1 A0

#include <IOexp.h>
#include <Wire.h>

IOexp schdosatore(0x38);

int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;

long interval = 50;
//[u]long interval1 = 700;[/u]       
//[u]long interval2 = 1000;[/u]

void setup()
{
  Wire.begin(); // join i2c bus 
  Serial.begin(9600);
  schdosatore.write(P0,OUTPUT);
  schdosatore.write(P1,OUTPUT);
  schdosatore.write(P2,OUTPUT);
  schdosatore.write(P3,OUTPUT);
  schdosatore.write(P4,OUTPUT);
  schdosatore.write(P5,OUTPUT);
  schdosatore.write(P6,OUTPUT);
  schdosatore.write(P7,OUTPUT);
}

void dosatore0()
{
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval)
  {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
    
    // set the LED with the ledState of the variable:
    schdosatore.write(P0 , ledState);
   }
}

void dosatore1()
{
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval)
  {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
    
    // set the LED with the ledState of the variable:
    schdosatore.write(P1 , ledState);
    }
}

void dosatore2()
{
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval)
  {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
    
    // set the LED with the ledState of the variable:
    schdosatore.write(P2 , ledState);
    }
}

void loop()
{
  dosatore0();
  dosatore1();
  dosatore2();
}

edit by mod: per favore includere il codice usando gli appositi tag code

Ciao Michele…
Se avessi provato a compilare ciò che hai postato avresti saputo senza chiederlo che non può funzionare, per errori di vario genere…
Ad esempio hai usato il metodo di dichiarazione dei pin di Arduino per dichiarare i pin del PCF, eppure hai usato un esempio della IOexp ed avresti dovuto sapere che i pin del PCF non vanno dichiarati come input o output

schdosatore.write(P0,OUTPUT);

Non so quante volte te lo ho scritto, ma continuare ad usare sketch scritti da altri non solo non ti aiuta a capire cosa fai, ma ti fa commettere diversi errori, che da ciò che vedo sono soprattutto dovuti al fatto che non ti sei mai messo seriamente ad imparare come si programma Arduino… :relaxed:
In più, te lo scrivo simpaticamente :P, mi metti nella condizione dello zoppo che aiuta lo sciancato perché non è che io sia questa grande cima in programmazione, credimi! :frowning:
Ad ogni modo ecco cosa hai fatto: hai preso l’esempio dei millis, lo hai messo nel frullatore insieme a quello della IOexp e di nuovo hai chiesto se così poteva funzionare, ma non è così che si fa :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:
Scrivendo oltretutto tre funzioni identiche ma una per ogni dosatore.
Voglio aiutarti, ma tu devi impegnarti e studiare un pochino come tutti io compreso facciamo.
Iniziamo:
Aprendo il file .h della IOexp vedrai che ogni pin del PCF ha un suo indirizzo, quindi puoi dichiarare come costanti i dosatori e dargli un nome per esmpio

const byte fertilizzante = 0x1; //corrisponde al pin 0 del pcf
const byte biocondizionatore = 0x2; //corrisponde al pin 1 del pcf

e via così per i dosatori.
Altra cosa, puoi dichiarare dei tempi di dosaggio, suppongo che a x tempo di funzionamento del dosatore corrispondano tot ml di liquido erogato, quindi puoi fare una cosa del genere:

unsigned long unadose = 10000; //1 secondo
unsigned long duedosi = 20000; //2 secondi
unsigned lond tredosi = 30000; //3 secondi

a questo punto puoi scriverti una funzione tipo questa:

void attivadosatore( byte dosatore, unsigned long dose)
{ schdosatore.write(dosatore, true); //attivo il dosatore
//calcolo il tempo trascorso in base a dose
// e se il tempo di funzionamento del dosatore è >= a dose…
schdosatore.write(dosatore, false); //disattivo il dosatore
}

All’interno del loop quando è il momento giusto richiamerai la funzione scrivendo:

attivadosatore(fertilizzante, tredosi);
attivadosatore(biocondizionatore, unadose);

Ora mi aspetto che tu metta su una bread o quello che ti pare per poter provare in modo efficace lo sketch che scriverai da solo senza scopiazzare in giro ]:smiley: ]:smiley: ]:smiley:
Ciao

P.S. leggi qua e fatti due risate http://www.leonardomiliani.com/2013/la-sindrome-di-gundam/

rici mancano ancora altri component negli schemi :wink:

:astonished: Cosa?
Lo sapevo che ne combinavo una delle mie... :blush:

Ciao Riciweb,
grazie ancora per aiuto, ma devo imparare anch'io come tutti del resto da qualcuno hanno imparato.
buona giornata