Hallo,
mein Name ist Heinz und ich bin auch gerade dabei eine Lichtsteuerung für mein Aquarium zu bauen, doch komme ich mit meinem Sketch nicht weiter.
Besitze einen Arduino Mega mit ds3231 und möchte 2 Leuchtstoffröhren mit 0-10V und ein LED-Stip dimmen.
Momentan teste ich den Aubau noch mit 3 LED´s, doch diese leuchten wann sie wollen.
hier einmal mein Sketch:
#include <Time.h>
#include <TimeLib.h>
#include "Wire.h"
int Lampe1 = 11; // Lampen Pin auf 11 setzen Licht
int Lampe2 = 12; // Lampen Pin auf 12 setzen Licht2
int Mond = 13; // Lampen Pin auf 13 setzen Mondlicht
int loga[64] =
{0,1,1,2,2,3,3,4,4,5,6,7,8,9,10,11,12,13,14,
16,17,19,21,23,25,27,29,32,
35,38,41,44,47,50,55,60,65,70,75,80,85,
90,95,100,105,110,115,120,125,130,135,
130,140,150,160,170,180,190,200,210,220,230,240,255};
#define DS1307_I2C_ADDRESS 0x68 // I2C Adresse
char buffer[20] = "";
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
//Zeit und Datum aus DS1307 auslesen und konvertieren
void getDateDs1307(int date[])
{
Wire.beginTransmission(DS1307_I2C_ADDRESS); // I2C-Kommunikation im Schreibmodus starten
Wire.write(0x00); // Registerzeiger auf 0 setzen
Wire.endTransmission(); // I2C-Kommunikation beenden
Wire.requestFrom(DS1307_I2C_ADDRESS, 7); // I2C-Kommunikation im Lesemodus starten
date[ 0 ] = bcdToDec(Wire.read() & 0x7f); // Sekunden
date[ 1 ] = bcdToDec(Wire.read()); // Minuten
date[ 2 ] = bcdToDec(Wire.read() & 0x3f); // Stunden
date[ 3 ] = bcdToDec(Wire.read()); // Wochentag
date[ 4 ] = bcdToDec(Wire.read()); // Tag
date[ 5 ] = bcdToDec(Wire.read()); // Monat
date[ 6 ] = bcdToDec(Wire.read()); // Jahr
}
/****************************************************************************************************
*/
void setup() {
Wire.begin(); // I2C-Bus einrichten
pinMode(Lampe1, OUTPUT);
pinMode(Lampe2, OUTPUT);
pinMode(Mond, OUTPUT);
Serial.begin (9600);
Serial.println("YourDuino.com DS1307 Real Time Clock - Set / Run Utility");
#ifdef AVR
Wire.begin();
#else
Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
}
/****************************************************************************************************
*/
void loop() {
Serial.begin (9600);
int licht1 ;
int licht2 ;
int licht3 ;
int date[ 7 ];
char str[30];
getDateDs1307( date ); // Datum und Uhrzeit aus DS1307 holen
int maxlicht = 255 ;
long dimmsekunde = date[1]*60;
int gesamtdimmsekunden = 1800; // Zeitliche Spanne des rauf und runter dimmens 1800sekunden sind 30 Minuten
int dimmrauf = maxlicht * dimmsekunde / gesamtdimmsekunden ;
int dimmrunter = maxlicht - (maxlicht * dimmsekunde / gesamtdimmsekunden);
if( date[ 2 ] <= 5 && date[ 1 ] < 45 ) { // von Mitternacht bis 5:45 Uhr (5:44:59)
licht1 = 0; // ist das Licht aus
licht2 = 0;
}
if( date[ 2 ] <= 5 && date[ 1 ] < 50 ) { // bis 5:49:59 ist das Mondlicht an
licht3 = 150;
}
// von 5:45 Uhr, bis 6 Uhr 15 berechnet sich eine Dimmstufe
// hochdimmen!
if ( date[2] == 5 && date[1] >= 45 ) {
licht1 = dimmrauf ;
}
if( date[2] == 5 && date[1] >= 55 ) {
licht2 = dimmrauf ;
}
if( date[2] >= 6 && date[1] >= 15){ // von 6:15 Uhr
licht1 = maxlicht ; //ist Lampe1 an
}
if( date[2] >= 6 && date[1] >=25){ // von 6:25Uhr
licht2 = maxlicht ; // ist Lampe2 an
}
// von 10:30 bis 11 Uhr wird wieder eine Dimmstufe berechnet
// runterdimmen!
if( date[2] >= 10 && date[1] >= 30 ) {
licht1 = dimmrunter;
}
if( date[2] >= 10 && date[1] >= 40 ) {
licht2 = dimmrunter;
}
if( date[2] >= 11 && date[2] <= 13 ) // von 11 Uhr, bis 13:59:59 Uhr Lampe1 auf Dimmstufe 50
{
licht1 = 50;
}
if( date[2] >= 11 && date[2] <= 13 ) { // von 11 Uhr, bis 13:59:59 Uhr Lampe2 auf Dimmstufe 50
licht2 = 50;
}
// von 14 Uhr, bis 14 Uhr 30 berechnet sich eine Dimmstufe
// hochdimmen!
if( date[2] = 14 ) {
licht1 = dimmrauf ;
}
if( date[2] = 14 && date[1] >= 10) {
licht2 = dimmrauf ;
}
// von 14:30 bis 21:44:59 ist das Licht an
if ( date[2] >= 14 && date[2] >= 30 ){ // ab 14:30
licht1 = maxlicht ; //ist Lampe1 an
}
if ( date[2] >= 14 && date[2] >= 40 ){ // ab14:40
licht2 = maxlicht ; // ist Lampe2 an
}
if( date[2] == 22 && date[2] < 35 ) { // ab 22:35 Uhr Lampe1 runterdimmen
licht1 = dimmrunter;
}
if( date[2] == 22 && date[2] < 45 ) { // ab 22:45 Uhr Lampe2 runterdimmen
licht2 = dimmrunter;
}
// und für den Rest des Tages (ab22 Uhr 05)
// wird das Licht abgedreht
if ( date[2] >= 22 && date[1] >= 5 ) { // ab22 Uhr 05
licht1 = 0; // wird das Lampe1 abgedreht
}
if ( date[2] >= 22 && date[1] >= 15 ) { // ab22 Uhr 15
licht2 = 0; // wird das Lampe2 abgedreht
}
if ( date[2] >= 22 ) // ab 22 Uhr
{
licht3 = 150; //Mondlicht auf Dimmstufe 150
}
analogWrite (Lampe1 , licht1 ); // jetzt noch schnell die Lampe tatsächlich anhand der
analogWrite (Lampe2 , licht2 );
analogWrite (Mond , licht3 ); // vorher bestimmten Werte einstellen