Cerca nel forum:
Acquaportal - Forum e Community

  





Benvenuti sul Forum di AcquaPortal, la più grande community italiana di acquariofilia!
Sul Forum di AcquaPortal puoi discutere con altri appassionati di acquariofilia, tenere un tuo Blog personale, inserire foto e video, chattare, ed aiutarci a creare un grande database con schede di pesci, invertebrati e prodotti di acquariofilia.


Per entrar a far parte della comunità occorre registrarsi.
Per farlo premi su

Registrazione


Al momento della registrazione ti verrà richiesto di accettare il Regolamento che ti consigliamo di leggere attentamente.
Ti consigliamo inoltre di leggere le FAQ per apprendere le funzionalità principali del forum.
Se invece sei un utente registrato e hai dimenticato i tuoi dati di accesso devi effettuare il Recupero dati.




Fai da te marino Per parlare delle tecniche di costruzione artigianale, per presentare le vostre realizzazioni, e per avere informazioni su dove reperire materiale ed attrezzatura risparmiando tempo e denaro.

Rispondi
Condividi Opzioni Visualizzazione
 
Vecchio 05-09-2013, 09:05   #1
-GUIDO-
Guppy
 
Registrato: Jun 2006
Città: Val di Sole- Trentino
Acquariofilo: Marino
N° Acquari: 1
Età : 57
Messaggi: 200
Foto: 0 Albums: 0
Post "Grazie" / "Mi Piace"
Grazie (Dati): 0
Grazie (Ricev.): 0
Mi piace (Dati): 0
Mi piace (Ricev.): 0
Mentioned: 0 Post(s)
Feedback 0/0%

Annunci Mercatino: 0
arduino ed automazione acquario

Ciao
Affascinato da cio che puo fare questa piattaforma hardware ho deciso di provare se riesco ad au-
tomatizzare le operazioni di routine del mio acquario.
Qualche risultato gia per me soddisfacente l'ho raggiunto, di seguito posto il codice che ho messo insieme fino ad ora...messo insieme perchè non è tutta farina del mio sacco,infatti online si trovano molti spunti.
Ci tengo a dire che se si pensa di usare arduino solo per risparmiare soldi
per l'acquisto di un controller bell'e pronto si sbaglia, online si trovano prodotti ottimi che ti evitano di dover studiare hardware e sistema operativo(infinite ore!).
il codice mostra sul display data e ora, con due temperature date da 2 sonde, una in vasca ed una all'interno della parte piu calda della plafo a led (autocostruita).

codice:
/////////MioAcquaController////////////////////////

#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
#include <OneWire.h>                   
#include <DallasTemperature.h>         


// inizializza la libreria con i Pin LCD
LiquidCrystal lcd(0);
RTC_DS1307 RTC;
int P1=6;
int P2=7;
int P3=8;
int oraagg;
int minagg;
int annoagg;
int meseagg;
int dayagg;
int menu =0;

  // assegno pin 3 per i dati sensori temperatura
#define ONE_WIRE_BUS 3

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

// gli indirizzi deli 2 sensori sono rilevati con un serial scanner
// posso aggiungere sensori aggiungendo gli indirizzi relativi
DeviceAddress sondaAcqua = { 0x28, 0xC4, 0x07, 0xA6, 0x04, 0x00, 0x00, 0x32 };
DeviceAddress sensorePlafo = { 0x28, 0x29, 0x6A, 0x84, 0x04, 0x00, 0x00, 0xDB };

void setup()
{
  // inizio la libreria
sensors.begin();
// settaggio a 10 bit della risoluzione dei sensori
sensors.setResolution(sondaAcqua, 10);
sensors.setResolution(sensorePlafo, 10);

  // Quante colonne e righe ha il display: 
  lcd.begin(20, 4);
  lcd.setCursor(7,0);             /////////////////////////////////////
  lcd.print("GUTTY");             ////////SPLASH
  lcd.setCursor(2,1);             ////////      SCREEN BY GUIDO           
  lcd.print("ACQUACONTROLLER");   /////////////////////////////////////
  
   
  delay(2000);
  lcd.clear();
  // Inizializzazione dei pulsanti
  pinMode(P1,INPUT);
  pinMode(P2,INPUT);
  pinMode(P3,INPUT);
  //inizializzo la libreria
  Serial.begin(9600);
  Wire.begin();
  RTC.begin();
  //RTC.sqw(1); 
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // settiamo la data e l'ora al momento della compilazione
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
    // di default il display visualizzerà data e ora
  int menu=0;
  }
  
 void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Errore");
} else {
lcd.print(tempC);
lcd.print(" C");
}
}
void loop()
{ 
  delay(1000);
sensors.requestTemperatures();
lcd.setCursor(0,2);
lcd.print("TEMP.Acqua: ");
printTemperature(sondaAcqua);
lcd.setCursor(0,3);
lcd.print("TEMP.Plafo: ");
printTemperature(sensorePlafo);

// verifichiamo se viene premuto il pulsante SET e incrementiamo l'indice del menu
  if(digitalRead(P1))
  {
   menu=menu+1;
  }
// a quale subroutine dobbiamo andare?
  if (menu==0)
  {
    DisplayDateTime();
    delay (100);
  }
  if (menu==1)
  {
    DisplaySetHour();
  }
  if (menu==2)
  {
    DisplaySetMinute();
  }
  if (menu==3)
  {
    DisplaySetYear();
  }
  if (menu==4)
  {
    DisplaySetMonth();
  }
  if (menu==5)
  {
    DisplaySetDay();
  }
  if (menu==6)
  {
    StoreAgg(); 
    delay(200);
    menu=0;
  }
  delay(100);
}



void DisplayDateTime ()
{
// mostriamo la data e l'ora correnti
  DateTime now = RTC.now();


  lcd.setCursor(12, 0);
  lcd.print("");
    
  if (now.hour()<=9)
  {
    lcd.print("0");
  }
  lcd.print(now.hour(), DEC);
  oraagg=now.hour();
  lcd.print(":");
  if (now.minute()<=9)
  {
    lcd.print("0");
  }
  lcd.print(now.minute(), DEC);
  minagg=now.minute();
  lcd.print(":");
  if (now.second()<=9)
  {
    lcd.print("0");
  }
  lcd.print(now.second(), DEC);

  lcd.setCursor(0, 0);
  lcd.print("");
  if (now.day()<=9)
  {
    lcd.print("0");
  }
  lcd.print(now.day(), DEC);
  dayagg=now.day();
  lcd.print("/");
  if (now.month()<=9)
  {
    lcd.print("0");
  }
  lcd.print(now.month(), DEC);
  meseagg=now.month();
  lcd.print("/");
  lcd.print(now.year(), DEC);
  annoagg=now.year();
}

void DisplaySetHour()
{
// Impostazione dell'ora
  lcd.clear();
  DateTime now = RTC.now();
  int ora=now.hour();
  if(digitalRead(P2)==HIGH)
  {
    if(oraagg==23)
    {
      oraagg=0;
    }
    else
    {
      oraagg=oraagg+1;
    }
  }
   if(digitalRead(P3)==HIGH)
  {
    if(oraagg==0)
    {
      oraagg=23;
    }
    else
    {
      oraagg=oraagg-1;
    }
  }
  lcd.setCursor(0,0);
  lcd.print("Imposta Ora:");
  lcd.setCursor(0,1);
  lcd.print(oraagg,DEC);
  delay(50);
}

void DisplaySetMinute()
{
// Impostazione dei minuti
  lcd.clear();
  if(digitalRead(P2)==HIGH)
  {
    if (minagg==59)
    {
      minagg=0;
    }
    else
    {
      minagg=minagg+1;
    }
  }
   if(digitalRead(P3)==HIGH)
  {
    if (minagg==0)
    {
      minagg=59;
    }
    else
    {
      minagg=minagg-1;
    }
  }
  lcd.setCursor(0,0);
  lcd.print("Imposta Minuti:");
  lcd.setCursor(0,1);
  lcd.print(minagg,DEC);
  delay(50);
}
  
void DisplaySetYear()
{
// Impostazione dell'anno
  lcd.clear();
  if(digitalRead(P2)==HIGH)
  {    
    annoagg=annoagg+1;
  }
   if(digitalRead(P3)==HIGH)
  {
    annoagg=annoagg-1;
  }
  lcd.setCursor(0,0);
  lcd.print("Imposta Anno:");
  lcd.setCursor(0,1);
  lcd.print(annoagg,DEC);
  delay(50);
}

void DisplaySetMonth()
{
// Impostazione del mese
  lcd.clear();
  if(digitalRead(P2)==HIGH)
  {
    if (meseagg==12)
    {
      meseagg=1;
    }
    else
    {
      meseagg=meseagg+1;
    }
  }
   if(digitalRead(P3)==HIGH)
  {
    if (meseagg==12)
    {
      meseagg=12;
    }
    else
    {
      meseagg=meseagg-1;
    }
  }
  lcd.setCursor(0,0);
  lcd.print("Imposta Mese:");
  lcd.setCursor(0,1);
  lcd.print(meseagg,DEC);
  delay(50);
}

void DisplaySetDay()
{
// Impostazione del giorno
  lcd.clear();
  if(digitalRead(P2)==HIGH)
  {
    if (dayagg==31)
    {
      dayagg=1;
    }
    else
    {
      dayagg=dayagg+1;
    }
  }
   if(digitalRead(P3)==HIGH)
  {
    if (dayagg==1)
    {
      dayagg=31;
    }
    else
    {
      dayagg=dayagg-1;
    }
  }
  lcd.setCursor(0,0);
  lcd.print("Imposta Giorno:");
  lcd.setCursor(0,1);
  lcd.print(dayagg,DEC);
  delay(50);
}

void StoreAgg()
{
// Salvataggio delle variabili
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("SALVATAGGIO IN");
  lcd.setCursor(0,1);
  lcd.print("CORSO");
  RTC.adjust(DateTime(annoagg,meseagg,dayagg,oraagg,minagg,0));
  
  delay(1000);
  lcd.clear();
}
fin qui ce l'ho fatta da solo, gli esperti di programmazione di questa IDE sorrideranno per certe soluzioni prese...
Ora vorrei aggiungere la parte che governa le luci in pwm.
Prima ho editato una routine semplice che prevedeva l'uso di delay ma da perfetto babbeo, quando l'ho inserita nel programma principale mi bloccava tutto....ovviamente

La soluzione piu semplice e migliore di sicuro è quindi quella di fare uso della libreria scritta da Nico, ed a questo punto chiedo aiuto!
eccola la libreria:http://www.acquariofilia.biz/showthread.php?t=418418
Nico è chiaro nella spiegazione ma mi sono incagliato comunque...
-GUIDO- non è in linea   Rispondi quotando


Vecchio 05-09-2013, 09:33   #2
-GUIDO-
Guppy
 
Registrato: Jun 2006
Città: Val di Sole- Trentino
Acquariofilo: Marino
N° Acquari: 1
Età : 57
Messaggi: 200
Foto: 0 Albums: 0
Post "Grazie" / "Mi Piace"
Grazie (Dati): 0
Grazie (Ricev.): 0
Mi piace (Dati): 0
Mi piace (Ricev.): 0
Mentioned: 0 Post(s)
Feedback 0/0%

Annunci Mercatino: 0
aggiungo 2 foto:





per completezza d'informazione il codice oltre che mettere a display data ed ora corrente
offre la possibilità di regolazione tramite pulsanti di set, piu e meno, salvando le impostazioni
....e qui non è farina del mio sacco! mi sarebbe voluto almeno un anno per poter gestire tutto ciò
ma questo è il bello dell'open source e proprio per questa filosofia mi piacerebbe che questo progetto servisse a tutti, magari chiamiamo quello che ne esce AQUAPORTALcontroller!
-GUIDO- non è in linea   Rispondi quotando
Vecchio 05-09-2013, 13:43   #3
Niko79
Guppy
 
Registrato: Nov 2009
Città: Augusta
Acquariofilo: Marino
Messaggi: 273
Foto: 0 Albums: 0
Post "Grazie" / "Mi Piace"
Grazie (Dati): 0
Grazie (Ricev.): 1
Mi piace (Dati): 1
Mi piace (Ricev.): 1
Mentioned: 0 Post(s)
Feedback 0/0%

Annunci Mercatino: 0
Complimenti Guido , direi che hai già raggiunto dei buoni risultati.

Ho letto che eri riuscito ad aggiungere i due tabs contenenti la testa e l'implementazione della libreria.
Bene non ti resta che importarla sul tuo codice generale creando anche l'oggetto "plafoniera":

codice:
/////////MioAcquaController////////////////////////

#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
#include <OneWire.h>                   
#include <DallasTemperature.h>
#include "Plafo.h"

Plafo plafo;

......
Quindi configuri gli orari di accensione sul metodo setup(), ad esempio con:
codice:
void setup()
{

 //Channel,startHour,startMinute,endHour,endMinute,fadeLen,maxPWM,pin
  plafo.setChannel(blue,18,0,4,0,30,180,7);//Dalle 18.00 alle 4.00, alba/tramonto 30 minuti, pwm massimo 180, pin 7  
  plafo.setChannel(white,18,15,3,45,75,180,5);//Dalle 18.15 alle 3.45, alba/tramonto 75 minuti
  plafo.setChannel(uv,19,30,2,30,0,HIGH,22);//Dalle 19.30 alle 2.30, accensione immediata, pin 22 (digitale)
  plafo.setChannel(moon,4,10,7,0,0,HIGH,23);//Dalle 4.10 alle 7.00

  // inizio la libreria
sensors.begin();
// settaggio a 10 bit della risoluzione dei sensori
sensors.setResolution(sondaAcqua, 10);
sensors.setResolution(sensorePlafo, 10);

....
Per poi aggiornare costantemente lo stato della plafoniera, sul ciclo loop passando il time del RTC:
codice:
void loop()
{ 

DateTime now = RTC.now();
plafo.perform(now.hour(),now.minute(),now.second());

  delay(1000);
sensors.requestTemperatures();
lcd.setCursor(0,2);
lcd.print("TEMP.Acqua: ");
printTemperature(sondaAcqua);

.....
In bocca al lupo
__________________
IO USERO' ACQUA DEL NOSTRO MARE
IO USERO' SABBIA DEL NOSTRO MARE
Niko79 non è in linea   Rispondi quotando
Vecchio 05-09-2013, 17:11   #4
-GUIDO-
Guppy
 
Registrato: Jun 2006
Città: Val di Sole- Trentino
Acquariofilo: Marino
N° Acquari: 1
Età : 57
Messaggi: 200
Foto: 0 Albums: 0
Post "Grazie" / "Mi Piace"
Grazie (Dati): 0
Grazie (Ricev.): 0
Mi piace (Dati): 0
Mi piace (Ricev.): 0
Mentioned: 0 Post(s)
Feedback 0/0%

Annunci Mercatino: 0
Grazie Nico, appena a casa provo con le tue spiegazioni, sono chiare e non dovrei sbagliare...
Certo che con il tuo display è tutto un altra cosa, io ho un 20x4, devo studiare come gestire il tutto in modo ottimale, magari con un pulsante che cambia screen.
Non vedo l'ora di arrivare a casa!
GRAZIE!
-GUIDO- non è in linea   Rispondi quotando
Vecchio 05-09-2013, 18:02   #5
Niko79
Guppy
 
Registrato: Nov 2009
Città: Augusta
Acquariofilo: Marino
Messaggi: 273
Foto: 0 Albums: 0
Post "Grazie" / "Mi Piace"
Grazie (Dati): 0
Grazie (Ricev.): 1
Mi piace (Dati): 1
Mi piace (Ricev.): 1
Mentioned: 0 Post(s)
Feedback 0/0%

Annunci Mercatino: 0
Originariamente inviata da -GUIDO- Visualizza il messaggio
Grazie Nico, appena a casa provo con le tue spiegazioni, sono chiare e non dovrei sbagliare...
Certo che con il tuo display è tutto un altra cosa, io ho un 20x4, devo studiare come gestire il tutto in modo ottimale, magari con un pulsante che cambia screen.
Non vedo l'ora di arrivare a casa!
GRAZIE!
Io per evitare di perdermi tra pulsanti e potenziometri ho acquistato un telecomando.
Il ricevitore necessita di solo un pin !
L'unico inconveniente è che la libreria di gestione (irremote) richiede un bel pò di memoria.
Comunque è semplicissima da utilizzare e trovi tantissimi esempi.
__________________
IO USERO' ACQUA DEL NOSTRO MARE
IO USERO' SABBIA DEL NOSTRO MARE
Niko79 non è in linea   Rispondi quotando
Vecchio 05-09-2013, 23:48   #6
-GUIDO-
Guppy
 
Registrato: Jun 2006
Città: Val di Sole- Trentino
Acquariofilo: Marino
N° Acquari: 1
Età : 57
Messaggi: 200
Foto: 0 Albums: 0
Post "Grazie" / "Mi Piace"
Grazie (Dati): 0
Grazie (Ricev.): 0
Mi piace (Dati): 0
Mi piace (Ricev.): 0
Mentioned: 0 Post(s)
Feedback 0/0%

Annunci Mercatino: 0
ciao
Aggiunto tutto come hai detto e GIRAAAAAAAAA!!! ehm...scusa
ho fatto breve prova con due led volanti e tutto è ok, ora imposto un fotoperiodo di prova per gustarmi il tuo fade.
A questo punto uno si chiede se sono impazzito a guardare 2 led accendersi lentamente per mezzora...nooo credetemi!

Domande: Ho visto che hai impostato un pwm massimo a 180 sui due canali white e blue,
avendo io drivers a 700ma posso alzare il pwm senza stressare i led?
eventualmente quanto vicino alla soglia 255?
-GUIDO- non è in linea   Rispondi quotando
Vecchio 06-09-2013, 11:23   #7
Niko79
Guppy
 
Registrato: Nov 2009
Città: Augusta
Acquariofilo: Marino
Messaggi: 273
Foto: 0 Albums: 0
Post "Grazie" / "Mi Piace"
Grazie (Dati): 0
Grazie (Ricev.): 1
Mi piace (Dati): 1
Mi piace (Ricev.): 1
Mentioned: 0 Post(s)
Feedback 0/0%

Annunci Mercatino: 0
Originariamente inviata da -GUIDO- Visualizza il messaggio
ciao
Aggiunto tutto come hai detto e GIRAAAAAAAAA!!! ehm...scusa
ho fatto breve prova con due led volanti e tutto è ok, ora imposto un fotoperiodo di prova per gustarmi il tuo fade.
A questo punto uno si chiede se sono impazzito a guardare 2 led accendersi lentamente per mezzora...nooo credetemi!

Domande: Ho visto che hai impostato un pwm massimo a 180 sui due canali white e blue,
avendo io drivers a 700ma posso alzare il pwm senza stressare i led?
eventualmente quanto vicino alla soglia 255?
Dipende dalle caratteristiche e dalla qualità dei led che stai utilizzando.
Se ad esempio sono da 3w e accettano una corrente massima di 700ma, con 180 su 255 sei a circa il 70% della potenza massima che è il valore che molti consigliano di non superare per non ridurre troppo la vita del led.
Se invece stai utilizzando led ad esempio da 10w che accettano una corrente massima di 1000ma, col tuo driver da 700ma puoi andare tranquillamente a 255 perché corrisponderà già al 70% della potenza.

Spero di essermi spiegato bene.
__________________
IO USERO' ACQUA DEL NOSTRO MARE
IO USERO' SABBIA DEL NOSTRO MARE
Niko79 non è in linea   Rispondi quotando
Vecchio 06-09-2013, 23:25   #8
-GUIDO-
Guppy
 
Registrato: Jun 2006
Città: Val di Sole- Trentino
Acquariofilo: Marino
N° Acquari: 1
Età : 57
Messaggi: 200
Foto: 0 Albums: 0
Post "Grazie" / "Mi Piace"
Grazie (Dati): 0
Grazie (Ricev.): 0
Mi piace (Dati): 0
Mi piace (Ricev.): 0
Mentioned: 0 Post(s)
Feedback 0/0%

Annunci Mercatino: 0
giusto, non ho detto che sono cree da 3 watt!
Con driver 700ma dovrebbero rendere 2,1 watt anche con pwm al massimo...quindi
presumo che spingendo su il pwm siano comunque protetti...o sbaglio?
Magari ho appena detto una sciocchezza.
-GUIDO- non è in linea   Rispondi quotando
Vecchio 14-09-2013, 00:27   #9
kikkino87
Avannotto
 
Registrato: Jul 2011
Città: noale
Acquariofilo: Marino
N° Acquari: 2
Messaggi: 83
Foto: 0 Albums: 0
Post "Grazie" / "Mi Piace"
Grazie (Dati): 0
Grazie (Ricev.): 0
Mi piace (Dati): 0
Mi piace (Ricev.): 0
Mentioned: 0 Post(s)
Feedback 0/0%

Annunci Mercatino: 0
Ragazzi volevo anche io fare uns cosa del genere mi date delle dritte su come collegare i led a arduino cosa devo usare i codici insomms mi fate uno schemino :D:D:D
Grazie

Inviato dal mio GT-I9300 con Tapatalk 2
kikkino87 non è in linea   Rispondi quotando
Vecchio 15-09-2013, 21:35   #10
-GUIDO-
Guppy
 
Registrato: Jun 2006
Città: Val di Sole- Trentino
Acquariofilo: Marino
N° Acquari: 1
Età : 57
Messaggi: 200
Foto: 0 Albums: 0
Post "Grazie" / "Mi Piace"
Grazie (Dati): 0
Grazie (Ricev.): 0
Mi piace (Dati): 0
Mi piace (Ricev.): 0
Mentioned: 0 Post(s)
Feedback 0/0%

Annunci Mercatino: 0
ciao
io sono ancora in fase sperimentale comunque dacci qualche info...
hai gia qualcosa o parti da zero?
-GUIDO- non è in linea   Rispondi quotando
Rispondi

Tag
acquario , arduino , automazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smile sono attive
Il codice IMG è attivo
il codice HTML è disattivato

Vai a



















Tutti gli orari sono GMT +2. Attualmente sono le 15:15. Powered by vBulletin versione 3.8.9
Copyright ©: 2000 - 2024, Jelsoft Enterprises Ltd.
Traduzione italiana Team: AcquaPortal Feedback Buttons provided by Advanced Post Thanks / Like v3.5.0 (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
User Alert System provided by Advanced User Tagging v3.2.5 Patch Level 2 (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
Copyright Zero Pixel Srl
Page generated in 0,24861 seconds with 15 queries