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
Vecchio 23-05-2016, 18:51   #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, controller con display grafico

ciao
Dal 2013 ho controllato il mio marino da 200l con arduino , beneficiando anche del prezioso aiuto di chi popola questo forum ho potuto creare quello che mi serviva.
Display 20x4, rtc, ds18b20 (2),a display stampavo data e ora, temperatura vasca con pulsante per accedere a nuova pagina dove visualizzavo min e max di plafo e vasca, led di allarme in caso di temperature troppo elevate o basse, sfruttando l'ottima libreria di Nico79 controllavo la plafo led (autocostruita).

Ora per causa di qualche problemino di vista sono passato a display 128x64 st7920 che mi permette di stampare mooolto piu in grande cio che è bene vedere anche solo se si passa lontano dall'acquario

Per ora ho un po tradotto cio che era il codice con display 20x4 ma mi sono inpantanato perche la libreria u8g non lavora esattamente come una liquidCrystal: Stampo ora e data, temperatura vasca in grande min e max a display in tempo reale.

Problemi:
- non ho ancora capito come posso fare un lcd.clear premendo un pulsante con sta u8g
mi servirebbe per accedere a nuova pagina con stato dei 2 relè e ventola che vorrei gestire

- sempre per il suddetto scopo vorrei usare Alarm.alarmRepeat() (e rispettiva libreria) che mi darebbe opportunità
di temporizzare gli eventi.

- non mi riesce di far funzionare la mitica libreria di Nico79

direi che dopo sta compilation di lacune posto il codice che è meglio...
codice:
 
// Aggiungo librerie
#include "U8glib.h"
#include <SPI.h>
#include <Wire.h>
#include "RTClib.h"
#include <OneWire.h>
#include <DallasTemperature.h>

  
float massimaAcqua = -50;   // dichiaro la variabile "massima"
float minimaAcqua = 65;     //dichiaro la variabile "minima"
float massimaPlafo =-50;   // dichiaro la variabile "massima interna"
float minimaPlafo = 65;     //dichiaro la variabile "minima interna"
float temperature;

char temperatureString[4] = "-";
char massimaAcquaString[5] = "-";
char minimaAcquaString[5] = "-";
char massimaPlafoString[5] = "-";
char minimaPlafoString[5] = "-";

int P1 = A0;          // assegno pin pulsante 
int P2 = A1;          // assegno pin pulsante 
int P3 = A2;          // assegno pin pulsante 
int P4 = A3;          // assegno pin pulsante 

int pinLed[] = {2,3,5,6};
int bottone[] = {A0, A1, A2, A3};
int statoLed= 0;

// Include the OneWire library
#define ONE_WIRE_BUS 32 //assegno pin dati (sensori temperatura)  Pin 32

// Setup OneWire bus 
OneWire oneWire(ONE_WIRE_BUS);

// Setup DallasTemperature per lavorare con OneWire bus
DallasTemperature sensors(&oneWire);

DeviceAddress sensAcqua = { 0x28, 0xFF, 0x72, 0x61, 0x00, 0x16, 0x03, 0x1D};
DeviceAddress sensPlafo = { 0x28, 0x29, 0x6A, 0x84, 0x04, 0x00, 0x00, 0xDB };


// setup u8g  
 U8GLIB_ST7920_128X64_1X u8g(18, 16, 17);


// Setup RTC
  RTC_DS1307 RTC;
  char monthString[37]= {"GenFebMarAprMagGiuLugAgoSetOttNovDic"};
  int  monthIndex[122] ={0,3,6,9,12,15,18,21,24,27,30,33};
  String thisMonth = "";
  String thisTime = "";
  String thisDay="";

  
  
void draw(void) {
  // graphic commands to redraw the complete screen should be placed here  
 // u8g.setFont(u8g_font_profont15);
  u8g.setFont(u8g_font_helvB08); 
  //
  //***** RTC **********
  DateTime now = RTC.now();
  // display date at bottom of screen
  thisDay = String(now.day(), DEC) + "/"; 
  thisMonth="";
  for (int i=0; i<=2; i++){
    thisMonth += monthString[monthIndex[now.month()-1]+i];
  }  
  thisDay=thisDay + thisMonth + "/"; 
  thisDay=thisDay + String(now.year() , DEC);
  const char* newDay = (const char*) thisDay.c_str(); 
  u8g.drawStr(60,11, newDay);   
  // ********************* 
  // display time in digital format
  thisTime="";
  thisTime=String(now.hour()) + ".";
  if (now.minute() < 10){ thisTime=thisTime + "0";} // add leading zero if required
  thisTime=thisTime + String(now.minute()) + ".";
  if (now.second() < 10){ thisTime=thisTime + "0";} // add leading zero if required
  thisTime=thisTime + String(now.second());
  const char* newTime = (const char*) thisTime.c_str();
  u8g.setFont(u8g_font_helvB08);
  u8g.drawStr(2,11, newTime);  
 
  //stampo temperatura acqua grande
  u8g.setFont(u8g_font_6x10);
  u8g.drawStr( 2, 25, "temp Acqua");
  
    if (temperature == -127) {
    u8g.setFont(u8g_font_7x14);  
    u8g.drawStr( 12, 43, "errore");   
    }else {
      u8g.setFont(u8g_font_ncenB18);
  u8g.drawStr( 2, 50, temperatureString);
  u8g.drawStr(55,50,"°");
    }
  
        //PLAFO//
 
         u8g.setFont(u8g_font_5x8);
         u8g.drawStr( 70, 23, "-ACQUA"); //da rivedere... dovrebbe essere "plafo"
         u8g.drawStr( 70, 30, "max");
         u8g.setFont(u8g_font_courB08);
           if (temperature == -127) {
               u8g.setFont(u8g_font_5x8);  
               u8g.drawStr( 100, 30, "errore");   
            }else {
         u8g.drawStr( 100, 30, massimaPlafoString);
            }
         u8g.setFont(u8g_font_5x8);
         u8g.drawStr( 70, 39, "min");
         u8g.setFont(u8g_font_courB08);
            if (temperature == -127) {
               u8g.setFont(u8g_font_5x8);  
               u8g.drawStr( 100, 39, "errore");   
            }else {
         u8g.drawStr( 100, 39, minimaPlafoString);
            }
            
   //imposto condizione che restituisce valore "massima e minima"
             if (temperature > massimaPlafo)
        massimaPlafo = temperature;    
      if (temperature < minimaPlafo)
        minimaPlafo = temperature;
      
      temperature = sensors.getTempC(sensPlafo);               
         
          //ACQUA//
          
         u8g.setFont(u8g_font_5x8);
         u8g.drawStr( 70, 47, "-PLAFO"); // da rivedere... dovrebbe essere "acqua"
         u8g.drawStr( 70, 54, "max");
         u8g.setFont(u8g_font_courB08);
           if (temperature == -127) {
               u8g.setFont(u8g_font_5x8);  
               u8g.drawStr( 100, 54, "errore");   
            }else {
         u8g.drawStr( 100, 54, massimaAcquaString);
            }
         u8g.setFont(u8g_font_5x8);
         u8g.drawStr( 70, 64, "min");
         u8g.setFont(u8g_font_courB08);
           if (temperature == -127) {
               u8g.setFont(u8g_font_5x8);  
               u8g.drawStr( 100, 64, "errore");   
            }else {
         u8g.drawStr( 100, 64, minimaAcquaString);
         }
            
     //imposto condizione che restituisce valore "massima e minima"
             if (temperature > massimaAcqua)
        massimaAcqua = temperature;    
      if (temperature < minimaAcqua)
        minimaAcqua = temperature;
        
  temperature = sensors.getTempC(sensAcqua);
  
  u8g.setFont(u8g_font_timB12);
  u8g.drawStr( 2,64,"menu");
  u8g.setFont(u8g_font_4x6);
  u8g.drawStr( 44,59,"tasto");
  u8g.drawStr( 44,64,"verde");

}
void setup(void) {
{ 
  for(int indice = 0; indice < 4; indice++)  
  {   
  pinMode(pinLed[indice], OUTPUT);  
  pinMode(bottone[indice], INPUT);
  }
 } 

  Serial.begin(9600);
  // If you want to set the aref to something other than 5v
  analogReference(EXTERNAL);
  Wire.begin();
  RTC.begin();
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

}

void loop() {
  // picture loop
  u8g.firstPage();  
  do {
       u8g.drawHLine(0, 13, 128);// disegno linea orizzontale
       u8g.drawHLine(0, 15, 128);// disegno linea orizzontale
       u8g.drawLine(65, 15, 65, 64);//disegno linea verticale
    draw();
  } while( u8g.nextPage() );

  {  
  for(int indice = 0; indice < 4; indice++)  
  {  
  int leggiBottone=digitalRead(bottone[indice]);
 
  if (leggiBottone == 1)
  {
     if (statoLed == 0)
     {
 
       statoLed=120;
       analogWrite(pinLed[indice], statoLed);
       delay(1000);
 
     } else {
 
       statoLed=0;
       analogWrite(pinLed[indice], statoLed);
       delay(1000);
      }
    }
  }
}

   // Update the sensor readings
  sensors.requestTemperatures();
 dtostrf(temperature, 2, 1, temperatureString);
 
  //PLAFO

 //leggo temperature
 
         dtostrf(massimaPlafo, 2, 1, massimaPlafoString);
         dtostrf(minimaPlafo, 2, 1, minimaPlafoString);
 
 //ACQUA
  // Read Temperature
  
         dtostrf(massimaAcqua, 2, 1, massimaAcquaString);
         dtostrf(minimaAcqua, 2, 1, minimaAcquaString);
    
    // rebuild the picture after some delay
  delay(100);
}
Per ora nel codice ho inserito l'accensione della plafo in manuale tramite pulsanti visti i problemi sopra citati
aggiungo foto display, temperatura acqua da errore perche non ho sonda attiva per ora
per ultimo...uso arduino mega.
Questo è quanto

__________________
__________________________________________________ ___________________________

ogni stort el gà l'sò drit
-GUIDO- non è in linea   Rispondi quotando


Vecchio 25-05-2016, 13:41   #2
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
Ciao, per il clear dello schermo potresti dare un'occhiata a questo link.

Per quanto riguarda la classe di gestione della plafoniera quale è il problema in particolare ?
__________________
IO USERO' ACQUA DEL NOSTRO MARE
IO USERO' SABBIA DEL NOSTRO MARE
Niko79 non è in linea   Rispondi quotando
Vecchio 25-05-2016, 23:09   #3
-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
Riguardo il clear ho provato l'esempio che mi hai linkato che fa un loop fra la prima e la seconda stringa regolato da delay() e mi sembrava di aver capito, poi ho voluto regolarlo tramite pulsante ma non sono riuscito, non pulisce schermo da prima scritta. Ci devo studiare un attimo perchè vorrei tramite pulsante uscire da schermo principale e tornarci premendo nuovamente.
In merito alla classe, riesco a compilare ma non lavora, forse è l'RTC ma ci devo riguardare con un po di tranquillità, nel "tradurre" il codice per il nuovo display mi sarò perso qualche cosa.
Sto provando anche qualcosa con time.alarm certo che la tua alba e tramonto sono una figata rispetto
al normale pwm
__________________
__________________________________________________ ___________________________

ogni stort el gà l'sò drit
-GUIDO- non è in linea   Rispondi quotando
Vecchio 31-05-2016, 14:54   #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
l'errore che mi da è
plafo was not name type
__________________
__________________________________________________ ___________________________

ogni stort el gà l'sò drit
-GUIDO- non è in linea   Rispondi quotando
Vecchio 01-06-2016, 13:12   #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
Questo errore lo ottieni con il codice che hai postato sopra o nel frattempo hai fatto modifiche ?
__________________
IO USERO' ACQUA DEL NOSTRO MARE
IO USERO' SABBIA DEL NOSTRO MARE
Niko79 non è in linea   Rispondi quotando
Vecchio 01-06-2016, 14:41   #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
Risolto!
dovrei vergognarmi a dirlo.... digitato male dichiarazione tua libreria... no comment

devo chiedere scusa ma soprattutto ringraziarti ancora per il tuo codice messo online e la disponibilità che dai, GRAZIE!

Per il resto sono soddisfatto del nuovo display, finalmente stampo una temperatura leggibile anche da lontano.
Ora mi dedicherò al famoso lcd.clear per pulire schermo principale e passare ad un menu settaggio, in verità sono tentato di usare tua classe per comandare anche 4 relè (pompe e skimmer).
__________________
__________________________________________________ ___________________________

ogni stort el gà l'sò drit
-GUIDO- non è in linea   Rispondi quotando
Rispondi

Tag
arduino , con , controller , display , grafico
Opzioni
Visualizzazione

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 06:40. 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,22573 seconds with 17 queries