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
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 marinoPer 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.
visto che qualcuno me lo chiede in mp e se ne parla giusto qua in giro adesso, vi posto il codice alba/tramonto e display.
chiaramente:
1) dovete adattare i collegamenti al VOSTRO display, perchè non tutti funzionano allo stesso modo. questo è per schermi hitachi HD44780 e compatibili... il mio è 20x4
ho lasciato tutta la parte decrittiva per mia comodità. voi potete anche cancellarvela... ;
2) dovete avere un RTC;
3) è fatta per mia esigenza, quindi ha tre stringhe per le mie 3 tipologie di led: "progfreddo" sono i 20.000°K, "progcaldo" i 10.000°K e "progblu" i royal blu.
4) la stringa alba/tramonto ha segnato sopra l'orario che va da 00 (mezzanotte) a 23 (secondo voi?) e sotto le 3 stringhe con la PERCENTUALE di luminosità di quei led che varia in 60 minuti.
perciò se dalle 9 alle 10 la stringa dei led varia da 50 a 100, significa che in un'ora raggiunge il 100%.
se volete farlo in più tempo basta che allungate i tempi (es. ore 9 50%, ore 10 75%, ore 11 100%).
tutto quello che so l'ho scritto.
ora arrangiatevi! -28
ps: chiaramente lo sketch non visualizza HELLO WORLD come scritto....
codice:
/*
LiquidCrystal Library - Hello World
Demonstrates the use a 16x2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.
This sketch prints "Hello World!" to the LCD
and shows the time.
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/
// include the library code:
#include <LiquidCrystal.h>
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
const int Button1 = 0;
const int Button2 = 1;
const int LedFreddo = 9, LedCaldo = 10, LedBlu = 11;
int posx=0,posy=1;
LiquidCrystal lcd(13, 12, 5, 4, 3, 2);
String MenuArray[5][5]={{"Titolo 1" ,"Titolo 2" ,"Titolo 3" ,"Titolo 4" ,"Titolo 5"},
{"Submenu 1 1","Submenu 2 1","Submenu 3 1","Submenu 4 1","Submenu 5 1"},
{"Submenu 1 2","Submenu 2 2","Submenu 3 2","Submenu 4 2","Submenu 5 2"},
{"Submenu 1 3","Submenu 2 3","Submenu 3 3","Submenu 4 3","Submenu 5 3"},
{"Submenu 1 4","Submenu 2 4","Submenu 3 4","Submenu 4 4","Submenu 5 4"} } ;
// 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
const int ProgFreddo[24]={ 0, 0, 0, 0, 0, 1, 5, 30, 70,100,100,100,100,100,100,100,100,100, 40, 20, 10, 0, 0, 0};
const int ProgCaldo[24]= { 0, 0, 0, 0, 0, 0, 0, 3, 30, 70,100,100,100,100,100, 70,100,100,100, 70, 0, 0, 0, 0};
const int ProgBlu[24]= { 4, 4, 4, 4, 4, 6, 15, 30, 50, 70,100,100, 80, 50, 50,100,100,100,100,100,100, 50, 4, 4};
int OutFreddo, OutCaldo, OutBlu;
void setup() {
Serial.begin(9600);
pinMode(Button1, INPUT);
pinMode(Button2, INPUT);
pinMode(LedFreddo, OUTPUT);
pinMode(LedCaldo, OUTPUT);
pinMode(LedBlu, OUTPUT);
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
// Print a message to the LCD.
setSyncProvider(RTC.get); // the function to get the time from the RTC
}
void loop() {
int i;
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
CalcolaLed();
VisualizzaOra();
delay(1000);
// print the number of seconds since reset:
lcd.clear();
}
void DisplayMenu() {
if (!digitalRead(Button1)==HIGH) {
posx++;
if (posx>4) posx=0;
}
if (!digitalRead(Button2)==HIGH) {
posy++;
if (posy>4) posy=1;
}
lcd.setCursor(4,2) ;
lcd.print(MenuArray[0][posx]);
lcd.setCursor(4,3) ;
lcd.print(MenuArray[posy][posx]);
}
void VisualizzaOra(){
lcd.setCursor(12,0);
if (hour()<10) lcd.print("0");
lcd.print(hour());
lcd.print(":");
if (minute()<10) lcd.print("0");
lcd.print(minute());
lcd.print(":");
if (second()<10) lcd.print("0");
lcd.print(second());
}
void CalcolaLed() {
int OraAttuale, OraFutura, Minuto, Differenza;
float Incremento, Attuale, T1;
OraAttuale= hour()%24;
OraFutura = (OraAttuale+1)%24;
Minuto=minute();
//---------------------------------------------------------------------------
Differenza=ProgFreddo[OraFutura]-ProgFreddo[OraAttuale];
Incremento=Differenza/60.0;
Attuale=Incremento*Minuto+ProgFreddo[OraAttuale];
OutFreddo= Attuale * 255 / 100 ;
lcd.setCursor(0,0);
lcd.print("F:");
lcd.print((int)Attuale);
//---------------------------------------------------------------------------
Differenza=ProgCaldo[OraFutura]-ProgCaldo[OraAttuale];
Incremento=Differenza/60.0;
Attuale=Incremento*Minuto+ProgCaldo[OraAttuale];
OutCaldo= Attuale * 255 / 100 ;
lcd.setCursor(0,1);
lcd.print("C:");
lcd.print((int)Attuale);
//---------------------------------------------------------------------------
Differenza=ProgBlu[OraFutura]-ProgBlu[OraAttuale];
Incremento=Differenza/60.0;
Attuale=Incremento*Minuto+ProgBlu[OraAttuale];
OutBlu= Attuale * 255 / 100 ;
lcd.setCursor(0,2);
lcd.print("B:");
lcd.print((int)Attuale);
//---------------------------------------------------------------------------
analogWrite(LedFreddo, OutFreddo);
analogWrite(LedCaldo, OutCaldo);
analogWrite(LedBlu, OutBlu);
T1=analogRead(A0)*0.49;
lcd.setCursor(0,3);
lcd.print("T:");
lcd.print((int)T1);
}
pps: io ho usato mosfet per il pwm.
ppps: qua non me lo incolonna giusto, penso che nel programma di arduino lo faccia...
pppps: prima di dire che non funziona, controllate BENE i vostri collegamenti... -28
Bravo simo!!!
Deduco che a te funzioni....
chiedo troppo per un video??? ( ovviamente dovresti stringere di molto i tempi...) ma era per capite se fa gli scatti tra un valore e l'altro....
visto che qualcuno me lo chiede in mp e se ne parla giusto qua in giro adesso, vi posto il codice alba/tramonto e display.
chiaramente:
1) dovete adattare i collegamenti al VOSTRO display, perchè non tutti funzionano allo stesso modo. questo è per schermi hitachi HD44780 e compatibili... il mio è 20x4
ho lasciato tutta la parte decrittiva per mia comodità. voi potete anche cancellarvela... ;
2) dovete avere un RTC;
3) è fatta per mia esigenza, quindi ha tre stringhe per le mie 3 tipologie di led: "progfreddo" sono i 20.000°K, "progcaldo" i 10.000°K e "progblu" i royal blu.
4) la stringa alba/tramonto ha segnato sopra l'orario che va da 00 (mezzanotte) a 23 (secondo voi?) e sotto le 3 stringhe con la PERCENTUALE di luminosità di quei led che varia in 60 minuti.
perciò se dalle 9 alle 10 la stringa dei led varia da 50 a 100, significa che in un'ora raggiunge il 100%.
se volete farlo in più tempo basta che allungate i tempi (es. ore 9 50%, ore 10 75%, ore 11 100%).
tutto quello che so l'ho scritto.
ora arrangiatevi! -28
ps: chiaramente lo sketch non visualizza HELLO WORLD come scritto....
codice:
/*
LiquidCrystal Library - Hello World
Demonstrates the use a 16x2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.
This sketch prints "Hello World!" to the LCD
and shows the time.
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/
// include the library code:
#include <LiquidCrystal.h>
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
const int Button1 = 0;
const int Button2 = 1;
const int LedFreddo = 9, LedCaldo = 10, LedBlu = 11;
int posx=0,posy=1;
LiquidCrystal lcd(13, 12, 5, 4, 3, 2);
String MenuArray[5][5]={{"Titolo 1" ,"Titolo 2" ,"Titolo 3" ,"Titolo 4" ,"Titolo 5"},
{"Submenu 1 1","Submenu 2 1","Submenu 3 1","Submenu 4 1","Submenu 5 1"},
{"Submenu 1 2","Submenu 2 2","Submenu 3 2","Submenu 4 2","Submenu 5 2"},
{"Submenu 1 3","Submenu 2 3","Submenu 3 3","Submenu 4 3","Submenu 5 3"},
{"Submenu 1 4","Submenu 2 4","Submenu 3 4","Submenu 4 4","Submenu 5 4"} } ;
// 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
const int ProgFreddo[24]={ 0, 0, 0, 0, 0, 1, 5, 30, 70,100,100,100,100,100,100,100,100,100, 40, 20, 10, 0, 0, 0};
const int ProgCaldo[24]= { 0, 0, 0, 0, 0, 0, 0, 3, 30, 70,100,100,100,100,100, 70,100,100,100, 70, 0, 0, 0, 0};
const int ProgBlu[24]= { 4, 4, 4, 4, 4, 6, 15, 30, 50, 70,100,100, 80, 50, 50,100,100,100,100,100,100, 50, 4, 4};
int OutFreddo, OutCaldo, OutBlu;
void setup() {
Serial.begin(9600);
pinMode(Button1, INPUT);
pinMode(Button2, INPUT);
pinMode(LedFreddo, OUTPUT);
pinMode(LedCaldo, OUTPUT);
pinMode(LedBlu, OUTPUT);
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
// Print a message to the LCD.
setSyncProvider(RTC.get); // the function to get the time from the RTC
}
void loop() {
int i;
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
CalcolaLed();
VisualizzaOra();
delay(1000);
// print the number of seconds since reset:
lcd.clear();
}
void DisplayMenu() {
if (!digitalRead(Button1)==HIGH) {
posx++;
if (posx>4) posx=0;
}
if (!digitalRead(Button2)==HIGH) {
posy++;
if (posy>4) posy=1;
}
lcd.setCursor(4,2) ;
lcd.print(MenuArray[0][posx]);
lcd.setCursor(4,3) ;
lcd.print(MenuArray[posy][posx]);
}
void VisualizzaOra(){
lcd.setCursor(12,0);
if (hour()<10) lcd.print("0");
lcd.print(hour());
lcd.print(":");
if (minute()<10) lcd.print("0");
lcd.print(minute());
lcd.print(":");
if (second()<10) lcd.print("0");
lcd.print(second());
}
void CalcolaLed() {
int OraAttuale, OraFutura, Minuto, Differenza;
float Incremento, Attuale, T1;
OraAttuale= hour()%24;
OraFutura = (OraAttuale+1)%24;
Minuto=minute();
//---------------------------------------------------------------------------
Differenza=ProgFreddo[OraFutura]-ProgFreddo[OraAttuale];
Incremento=Differenza/60.0;
Attuale=Incremento*Minuto+ProgFreddo[OraAttuale];
OutFreddo= Attuale * 255 / 100 ;
lcd.setCursor(0,0);
lcd.print("F:");
lcd.print((int)Attuale);
//---------------------------------------------------------------------------
Differenza=ProgCaldo[OraFutura]-ProgCaldo[OraAttuale];
Incremento=Differenza/60.0;
Attuale=Incremento*Minuto+ProgCaldo[OraAttuale];
OutCaldo= Attuale * 255 / 100 ;
lcd.setCursor(0,1);
lcd.print("C:");
lcd.print((int)Attuale);
//---------------------------------------------------------------------------
Differenza=ProgBlu[OraFutura]-ProgBlu[OraAttuale];
Incremento=Differenza/60.0;
Attuale=Incremento*Minuto+ProgBlu[OraAttuale];
OutBlu= Attuale * 255 / 100 ;
lcd.setCursor(0,2);
lcd.print("B:");
lcd.print((int)Attuale);
//---------------------------------------------------------------------------
analogWrite(LedFreddo, OutFreddo);
analogWrite(LedCaldo, OutCaldo);
analogWrite(LedBlu, OutBlu);
T1=analogRead(A0)*0.49;
lcd.setCursor(0,3);
lcd.print("T:");
lcd.print((int)T1);
}
pps: io ho usato mosfet per il pwm.
ppps: qua non me lo incolonna giusto, penso che nel programma di arduino lo faccia...
pppps: prima di dire che non funziona, controllate BENE i vostri collegamenti... -28
Un lavoro interessante e codice snello però ho due critiche (senza offesa si intende) da farti la prima riguarda l'uso del delay (di 1 secondo) nel Loop...così facendo blocchi il programma e l'uso dei tasti menu viene ritardato.......secondo non mi piace l'uso degli array predefiniti per l'alba tramonto..non puoi da menu scegliere i tempi di accensione spegnimento e..con passi predefiniti ho l'impressione che la dimmerazione venga scattosa....potevi sfruttare di più l'RTC........appena posso posterò il codice che sto usando io per la prossima plafo che sto relaizzando (anche se è per il dolce).....è preso in parte da altre realizzazioni (vedi typhoon)...e modificato....di contro rispetto al tuo è decisamente molto più lungo anche se più completo.
si, infatti io ho fatto il più semplice possibile. era, diciamo, più che altro un programmino provvisorio per vedere su funzionava il tutto...
e poi non ho avuto più voglia di modificarlo...
comunque posso dirti che perlomeno non è scattoso...
ps: non l'ho fatto io, eh! ma mio cugino ing. io non c'ho capito un caxxo!
il mio problema più grosso è non far sciogliere il mosfet, a causa dei 4/5A che ci passano dentro....
si, infatti io ho fatto il più semplice possibile. era, diciamo, più che altro un programmino provvisorio per vedere su funzionava il tutto...
e poi non ho avuto più voglia di modificarlo...
comunque posso dirti che perlomeno non è scattoso...
ps: non l'ho fatto io, eh! ma mio cugino ing. io non c'ho capito un caxxo!
il mio problema più grosso è non far sciogliere il mosfet, a causa dei 4/5A che ci passano dentro....
allora aspetto il tuo per provarlo! -28
Il mio è fatto per pilotare dei driver appositi con ingresso dimmerabile PWM...ciò non toglie che può essere collegato a dei mosfet
sono dei semplici driver comprati su ebay da un venditore Cinese (un classico)..sono da 350 ma e 700 ma (ma ci sono anche altri tipi)..puoi comandare fino a 6 7 led (da 1 o 3 w) per ognuno.....dipende dall'alimentazione (io li alimento a 24 volt)