Pages: 1 [2] 3 4 ... 8   Go Down
Author Topic: Arduino & acquario  (Read 8344 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
domani sono in fiera e prendo un arduino

Intendi la fiera a Malpensa?
Vale la pena ?

Ciao Grazie

Andrea
Logged

Padova
Offline Offline
Jr. Member
**
Karma: 0
Posts: 73
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao io ho preso direttametne un lcd 20x4 con un controller i2c lo paghi un po' di piu ma puoi anche fartelo .... io non ci ho manco provato preso e funziona benissimo.
PEr i menu io mi sono sbattuto e sono riuscito a gestire i menu.. vi posto il codice appena arrivo a casa così ci mettiamo le mani in tre ...
sono partito proprio dall'RTC quindi è gestito anche quello .... apriamo in google per gestire il codice?

ciao
Logged

Battipaglia (SA)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Come pezzi base avevo pensato di dividere il controller
in 3 parti
1-core dove e arduino
2-lcd  & tastiera
3-scheda di potenza costituite da 2 schede separate pilotate I2C

in modo da fare il modulo 1 solo per dolce chi mette 2 moduli ha tutte le uscite per il marino

per i menù nessuno ha qualche idea su come tentare di impostarli???
Logged

Padova
Offline Offline
Jr. Member
**
Karma: 0
Posts: 73
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Alfa75,

anche se fa schifo nell'ordine e nella sintassi questo è quello che ho buttato giù fino ad ora, se hai suggerimenti e consigli ovviamente son ben accetti
Code:
/*========================================================================== Schede Relè   ======================================================================================

Variabile    Accessorio            Variabile      
  Stato                               Pin
R1          Pompa Mandata 1         PMand1
R2          HQI Luce 1              HQI1
R3          HQI Luce 2              HQI2
R4          Sonda Rabbocco          SRab
R5          Sonda Ricambio          SRic
R6          Sonda Sump              SSump
R7          Pompa Mandata Skimmer   PMandS  
R8          Pompa Skimmer           PAirSk

L1          Pompa Risalita 2        PMand2
L2          T5 Gruppo1              T5Gr1
L3          T5 Gruppo2              T5Gr2
L4          Pompa Cambio Acqua      PRic
L5          Riscaldatore Sump       TempS
L6          Pompa REA               PRea
L7          Pompe Corrente          PCorr1
L8          Pompe Corrente          PCorr2

===========================================================================    Definizione Pin     ==============================================================================*/

const int PMand1 = 22;         //fatta
const int HQI1 =  23;          //fatta
const int HQI2 =  24;          //fatta
const int SRab =  25;        
const int SRic =  26;
const int SSump =  27;
const int PMandS =  28;

const int PMand2= 29;        
const int PAirSk = 30;
const int T5gr1 = 31;
const int T5gr2 = 32;  
const int PRic =  33;
const int TempS = 34;
const int PRea =  35;
const int PCorr1 =  36;
const int PCorr2 =  37;  

/*========================================================================== Definizione Stati Relay      =======================================================================*/

int R1 = 0;                    //Pompa mandata 1
int R2 = 0;                    //Illuminazione HQI 1
int R3 = 0;                    //Illuminazione HQI 2
int R4 = 0;
int R5 = 0;
int R6 = 0;
int R7 = 0;
int R8 = 0;

int L1 = 0;                    //Pompa mandata 2
int L2 = 0;                    //Illuminazione T5 1
int L3 = 0;                    //Illuminazione T5 2
int L4 = 0;
int L5 = 0;
int L6 = 0;
int L7 = 0;
int L8 = 0;

int SR1, SR2;                  //Variabili per lo storico
/*========================================================================== Variabili di temporizzazione =======================================================================*/
int keyInput, livello, menu;
long tempo_btn = 0, debounce = 500, tempo_men = 0, ritorno;  //Tempo tra due letture successive di un bottone (500 ms)
// DS1307 funzioni ora
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
int fullYear, phase, fase;
long YY, MM, K1, K2, K3, JD;  
double AG, IP;  
/*===============================================================================================================================================================================*/

// Definizione delle variabili temporali

int mil_time= 0;

int rol_mandata = 1;                      //Intervallo alternanza della pompa di mandata
int mil_mandata = 0;

/*
ALBA                  TRAMONTO
Accendo T5 1          Spengo HQI 1
Accendo T5 2          Spengo HQI 2
Accendo HQI 1         Spengo T5 1
Accendo HQI 2         Spengo T5 2
*/

//int alba = 30;
//int tramonto = 30;

int T5gr1_on = 32;
int T5gr2_on = 33;
int HQI1_on = 34;                       //Accendione lampada HQI Gruppo 1
int HQI2_on = 35;                      //Accendione lampada HQI Gruppo 2

int HQI1_off = 36;                     //Spegnimento lampada HQI Gruppo 1
int HQI2_off = 37;                      //Spegnimento lampada HQI Gruppo 2
int T5gr1_off = 38;
int T5gr2_off = 39;

/*========================================================================== Variabili di inclusione ============================================================================*/
#define VERSION "1.00"
#include <OneWire.h>
#include <Wire.h>
#include <DallasTemperature.h>
#include <LCDi2cR.h>  
#define DS1307_I2C_ADDRESS 0x68
LCDi2cR lcd = LCDi2cR(4,40,0x63,0);


#define DS1307_I2C_ADDRESS 0x68
#define ONE_WIRE_BUS 3
#define TEMPERATURE_PRECISION 9
/*===============================================================================================================================================================================*/
/*==========================================================================     configurazione temperature   ===================================================================*/
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

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

// arrays to hold device addresses
DeviceAddress Ther0, Ther1, Ther2;

/*==========================================================================     configurazione rtc  ============================================================================*/
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return ( (val/10*16) + (val%10) );
}

// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return ( (val/16*10) + (val%16) );
}

void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)

{
  // Reset the register pointer
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // A few of these need masks because certain bits are control bits
  *second     = bcdToDec(Wire.receive() & 0x7f);
  *minute     = bcdToDec(Wire.receive());
  *hour       = bcdToDec(Wire.receive() & 0x3f);  // Need to change this if 12 hour am/pm
  *dayOfWeek  = bcdToDec(Wire.receive());
  *dayOfMonth = bcdToDec(Wire.receive());
  *month      = bcdToDec(Wire.receive());
  *year       = bcdToDec(Wire.receive());
}

/*===============================================================================================================================================================================*/



void setup()
{
  lcd.clear();
  lcd.init();  
  lcd.setCursor(0,5);
  lcd.print("Open Reef");             // Show Version
  lcd.setCursor(1,8);
  lcd.print (VERSION);
  keyInput=40;
  menu=0;
  delay(5000);
  Serial.begin(9600);
int R1 = 0;
/*==========================================================================     verifica setup sonde============================================================================*/


 // start del monitor sotto la data
   lcd.setCursor(3,0);
   lcd.print("IC Control Library");

  // Start up the library
  sensors.begin();

  // locate devices on the bus
  lcd.setCursor(3,0);
  //lcd.print("Locating devices...");
  lcd.print("Found ");
  lcd.print(sensors.getDeviceCount(), DEC);
  lcd.println(" devices.");
  // report parasite power requirements
  lcd.setCursor(3,0);
  lcd.print("ParasitePower is: ");
  if (sensors.isParasitePowerMode()) lcd.print("ON");
  else lcd.print("OFF");
  delay(1000);

// assign address manually.  the addresses below will beed to be changed
  // to valid device addresses on your bus.  device address can be retrieved
  // by using either oneWire.search(deviceAddress) or individually via
  // sensors.getAddress(deviceAddress, index)
  //insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };
  //outsideThermometer   = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 };

  // search for devices on the bus and assign based on an index.  ideally,
  // you would do this to initially discover addresses on the bus and then
  // use those addresses and manually assign them (see above) once you know
  // the devices on your bus (and assuming they don't change).
  //
  // method 1: by index
  lcd.clear ();
  lcd.print ("Errori rilevamento");
  lcd.setCursor (1,0);
  if (!sensors.getAddress(Ther0, 0)) lcd.print ("Non rilevato Device0");
  lcd.setCursor (2,0);
  if (!sensors.getAddress(Ther1, 1)) lcd.print ("Non rilevato Device1");
  lcd.setCursor (3,0);
  if (!sensors.getAddress(Ther2, 2)) lcd.print ("Non rilevato Device2");

  
  // Definiamo la funzione dei pin

  pinMode(PMand1, OUTPUT);
  pinMode(HQI1, OUTPUT);
  pinMode(HQI2, OUTPUT);
  pinMode(SRab, OUTPUT);  
  pinMode(SRic, OUTPUT);
  pinMode(SSump, OUTPUT);  
  pinMode(PMandS, OUTPUT);
  pinMode(PAirSk, OUTPUT);
  pinMode(PMand2, OUTPUT);
  pinMode(T5gr1, OUTPUT);
  pinMode(T5gr2, OUTPUT);
  pinMode(PRic, OUTPUT);
  pinMode(TempS, OUTPUT);  
  pinMode(PRea, OUTPUT);
  pinMode(PCorr1, OUTPUT);  
  pinMode(PCorr2, OUTPUT);
  //delay (1000);
« Last Edit: September 12, 2010, 05:08:22 pm by michele.massaro » Logged

Padova
Offline Offline
Jr. Member
**
Karma: 0
Posts: 73
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
void loop()
{
   getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
   mil_time = (hour *100) + minute;
   fullYear = (2000 + year);
 
   keyInput=lcd.keypad();
 
 if (menu == 0 && keyInput == 20)
 {
    menu = 1;
 }
 if (menu == 0 && keyInput ==40)
  {
    menu = 40;
 }
 switch (menu)
  {
  case 40:
    //Schermata ciclo sistema
    lcd.clear();
    menu1();
    menu = 0;
    delay(100);
    break;
    
  case 1:
 
    lcd.clear();
    lcd.setCursor(0,0);        
    lcd.print("MENU PRINCIPALE   ");            
    lcd.setCursor(1,0);        
    lcd.print("1 REGOLAZIONI");
    lcd.setCursor(2,0);
    lcd.print("2 ACCENSIONI ");
    lcd.setCursor(3,0);
    lcd.print("3 TARATURA ");
    
    keyInput=lcd.keypad();
    
    if(keyInput == 1)
    {
    menu = 11;
    tempo_btn = millis();  
    }
    if(keyInput == 2)
    {
    menu = 12;
    tempo_btn = millis();  
    }
    if(keyInput == 3)
    {
    menu = 13;  
    tempo_btn = millis();
    }
    if(keyInput == 30)
    {
    menu = 0;  
    tempo_btn = millis();
    }
    delay(100);
    break;
 case 11:
    //Schermata menu regolazioni
    lcd.clear();
    lcd.setCursor(0,0);        
    lcd.print("MENU REGOLAZIONI   ");
    lcd.setCursor(1,0);        
    lcd.print("1 DATA E ORA ");
    lcd.setCursor(2,0);        
    lcd.print("2 VARIABILI  ");
    lcd.setCursor(3,0);  

    keyInput=lcd.keypad();
    if(keyInput == 1 && millis() - tempo_btn > debounce)
    {
    menu = 21;
    tempo_btn = millis();  
    }
    if(keyInput == 2 && millis() - tempo_btn > debounce)
    {
    menu = 22;
    tempo_btn = millis();    
    }
    if(keyInput == 30 && millis() - tempo_btn > debounce)
    {
    menu = 1;
    tempo_btn = millis();    
    }
    delay(100);
    break;
case 12:
    //Schermata menu principale
    noMenu();
    if(keyInput == 30 && millis() - tempo_btn > debounce)
    {
    menu = 1;
    tempo_btn = millis();    
    }
    break;
case 13:
    //Schermata menu principale
    noMenu();
    if(keyInput == 30 && millis() - tempo_btn > debounce)
    {
    menu = 1;
    tempo_btn = millis();    
    }
    break;
case 21:
    //Schermata menu principale
    noMenu();
    if(keyInput == 30 && millis() - tempo_btn > debounce)
    {
    menu = 11;
   tempo_btn = millis();    
    }
    
    break;  
case 22:
    //Schermata menu principale
    noMenu();
    if(keyInput == 30 && millis() - tempo_btn > debounce)
    {
    menu = 11;
    tempo_btn = millis();    
    }
    break;    
  } //switch...
  
   GHQI1 ();
   GHQI2 ();
   GT5gr1 ();
   GT5gr2 ();
   Mandata ();
  
} //loop()...
Logged

Boschi di Baricella (Bologna)
Offline Offline
Newbie
*
Karma: 0
Posts: 16
Arduino Ke Figata!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho appena preso in mano il mio primo Arduino!!!! l'ho collegato e si sta installando...speriamo che Svita trovi i driver necessari!!! ;D

Probabilmente sono io ad essere rincoglionito...ma come si caricano i programmi in macchina?...poi... vedo 14 pin digitali e 6 analogici, credo si parli sempre di uscite..ma noi abbiamo bisogno anche di ingressi, sia digitali che analogici!!!
Comunque adesso attendo l'arrivo del display 20X4...poi mi metto dietro a fare l'interfaccia seriale-I2C, sono arrivati anche gli IC!!!!!! ;D
Logged

Battipaglia (SA)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://acquadolce.altervista.org/LCD_keypad.pdf

ecco il modulo di controllo costituito dall'LCD e il Keypad 3X4
tutto I2C
con 2 pcf8574

lcd è un 16x2 ma ha la stessa piedinatura del 20x4 per cui e solo una questione di ingombro

che ne pensate???
Logged

Padova
Offline Offline
Jr. Member
**
Karma: 0
Posts: 73
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Vinca i pin possono essere impostati sia come ingressi che come uscite quindi nessun problema.

Alfa molto bello direi e buono se fa quello che ti serve ..... ops non ne capisco na cippa però ..... hahaha smiley-razz smiley-razz, quindi valuto l'aspetto grafico.
Logged

Battipaglia (SA)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

scusa ma tu tastiera ed lcd come li hai collegati? Permette di collegare i due in una scatola a se stante con un classico cavo telefonico 4poli e relativo plug. Metto qui la sonda di temp. che misura la temperatura ambiente? Se vi interessano pubblico i file.
Logged

Campagne Aretine
Offline Offline
God Member
*****
Karma: 0
Posts: 816
Arduino è una figata
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Avrei 2 domande che non riguardano il vostro progetto smiley-grin
1) come si chiamano e quanto costano quelle pompe che vendono per fare le bollicine negli acquari. Se le dovessi cercare tipo su ebay qual'e` la keyword?
2) si trovano dei cavi riscaldanti per acquari che arrivano fino a 80-90 gradi? come si chiamano?
Logged

Padova
Offline Offline
Jr. Member
**
Karma: 0
Posts: 73
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Calamaro,
quello delle bollicini è l'areatore qui puoi trovare modelli e costi (indicativamente sono quelli più bassi che puoi trovare ... http://www.aquariumline.com/catalog/areatori-accessori-c-45.html ) li trovi a 1 2 o 4 vie, con diverse potenze .... c'è anche un modello elettronico anche in questo caso più spendi migliore è la meccanica e il materiale delle membrane .... alcuni modelli li trovi anche come ricambi)
I cavetti riscladatori non penso arrivino a 80/90 gradi mica devi fare bollire l'acqua ... http://www.aquariumline.com/catalog/dennerle-1647-cavetto-riscaldante-boden-fluter-24v100watt-p-3002.html .... io ne ho uno da 75w non hanno regolatore e non ho mai misurato la temperatura ma 80/90 gradi dubito altrimenti anche i rettili li piastri.
Logged

Campagne Aretine
Offline Offline
God Member
*****
Karma: 0
Posts: 816
Arduino è una figata
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A me queste cose servivano per metterle in una vaschetta di pvc in cui terrei il percloruro ferrico per fare le basette elettroniche. 80-90 gradi sarebbe buono... meglio se mi portano il tutto a ebollizione incipiente, mi sa che ne dovro` modificare uno. pero` 168euri son tantini smiley-grin
Grazie mille smiley-grin
Logged

Global Moderator
Milano, Italy
Offline Offline
Edison Member
*****
Karma: 19
Posts: 1175
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

una resistenza tipo quella dei forni/fornetti oppure delle lavatrici potrebbe andare?
Logged

F

Campagne Aretine
Offline Offline
God Member
*****
Karma: 0
Posts: 816
Arduino è una figata
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si il problema e` che quelle sono di materiale ferroso che il percloruro corrode. andrebbero rivestite di qualcosa tipo  un termorestringente resistente ai 100 e passa gradi. Comunque dovro` fare delle prove, magari mettere una retroazione con un LM35 e quando l'acido supera tot gradi un relee spenge la serpentina...
questo e` lo schizzo del progetto!
« Last Edit: September 15, 2010, 04:23:56 am by Calamaro » Logged

Campagne Aretine
Offline Offline
God Member
*****
Karma: 0
Posts: 816
Arduino è una figata
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

le quote son sbagliate. Lo spazio utile interno deve essere 20x10x30 cm
per un totale di 6000cm^3 la capienza dovrebbe essere 6 litri smiley-grin tanta roba ...
Logged

Pages: 1 [2] 3 4 ... 8   Go Up
Jump to: