Post Reply
134 Beiträge • Seite 9 von 9
Beitragvon omega » 26 Feb 2016 02:08
Hi Sabri,

sabrikara hat geschrieben:Probieren bis es irgendwann geht, so mache ichs ;)

wenn das alle so gemacht hätten, würden wir noch immer auf Bäumen leben. Man sollte schon verstehen, was man macht. Die meisten, die es damals nämlich nicht verstanden haben, sind beim Ausprobieren ex gegangen.
Benjamin Frankling z.B. hatte mit seinem Drachen lediglich einen Haufen Glück. Er hätte genausgut bei seinem Humbug drauf gehen können und wir hätten heute keinen Blitzableiter.

Grüße, Markus
Benutzeravatar
omega
Beiträge: 2184
Registriert: 12 Sep 2012 20:53
Wohnort: München
Bewertungen: 9 (100%)
Beitragvon sabrikara » 26 Feb 2016 07:36
Hi Markus,

das ist richtig. Aber ich muss nicht zwingend erst verstehen dann machen. Durchs Probieren lernt und versteht man dann, was da passiert.
Liebe Grüße
Sabri
Benutzeravatar
sabrikara
Beiträge: 509
Registriert: 25 Feb 2013 20:05
Wohnort: Essen
Bewertungen: 1 (100%)
Beitragvon woller » 26 Feb 2016 16:37
oh mann, hatte es nur noch nicht gepostet aber auf dem Arduino schon umgeschrieben.
sieht so aus als ob der Code in der 14 Uhr Dimmschleife hängen bleibt.
hier mein jetziger Code:
Code #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);

}

/****************************************************************************************************
 */
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

#define STUNDE date[2]
#define MINUTE date[1]

int maxlicht = 255 ;
long  dimmsekunde = MINUTE*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( STUNDE <= 5 && MINUTE < 45 ) {                // von Mitternacht bis 5:45 Uhr (5:44:59)
        licht1 = 0;                                 // ist Lampe1 aus     
      }
 
     if( STUNDE <= 5 && MINUTE < 55 ) {              // von Mitternacht bis 5:45 Uhr (5:54:59)
        licht2 = 0;                                 // ist Lampe1 aus
        }
 
 
   if (STUNDE >= 5 && MINUTE >= 45 ) {              // ab 5:45 Uhr
          licht1 = dimmrauf ;                       // Lampe1 hochdimmen!
  }
   if( STUNDE >= 5 && MINUTE >= 55 ) {               // ab 5:55 Uhr
          licht2 = dimmrauf ;                       // Lampe2 hochdimmen!
     }
 
 
   if( STUNDE >= 6 &&  MINUTE >= 15 ) {              // ab 6:15 Uhr
       licht1 = maxlicht ;                           // ist Lampe1 an
      }
     
    if( STUNDE >= 6    &&  MINUTE >= 25){             // ab 6:25 Uhr
         licht2 = maxlicht ;                         // ist Lampe2 an
       }
 
 
   if( STUNDE >= 10 && MINUTE >= 30 ) {              // ab 10:30 Uhr
          licht1 = dimmrunter , -50 ;                       // wird Lampe1 runter gedimmt
  }
   if( STUNDE >= 10 && MINUTE >= 40 ) {              // ab 10:40 Uhr
          licht2 = dimmrunter , -50 ;                       // wird Lampe2 runter gedimmt
  }

   if( STUNDE >= 11  )      {                        // ab 11 Uhr
           licht1 = 50;                              // ist Lampe1 auf Dimmstufe 50

}
   if( STUNDE  >= 11  &&  MINUTE >= 10   ) {          // ab 11:10 Uhr
         licht2 = 50;                                // ist Lampe2 auf Dimmstufe 50
 }

    if( STUNDE >= 14 ) {                              // ab 14 Uhr
          licht1 = dimmrauf ;                         // wird Lampe1 hoch gedimmt
  }
    if( STUNDE >= 14  &&  MINUTE >= 10) {               // ab 14:10 Uhr
          licht2 = dimmrauf ;                         // wird Lampe2 hoch gedimmt
  }

 
   if ( STUNDE >= 14 && MINUTE >= 30  ){               // ab 14:30     
         licht1 = maxlicht ;                           // ist Lampe1 an
  }
  if  ( STUNDE  >= 14 && MINUTE >= 40 ){                // ab 14:40                     
           licht2 = maxlicht ;                         // ist Lampe2 an
  }
 
  if( STUNDE >= 21  && MINUTE >= 35  ) {                // ab 21:35 Uhr
          licht1 = dimmrunter;                          // wird Lampe1 runter gedimmt
  }   
    if( STUNDE >= 21 && MINUTE >= 45  ) {               // ab 21:45 Uhr
           licht2 = dimmrunter;                         // wird Lampe2 runter gedimmt
   }

  // wird das Licht abgedreht
 
   if ( STUNDE >= 22 && MINUTE >= 5 ) {                  // ab 22:05 Uhr
           licht1 = 0;                                   // ist Lampe1 aus
  }
    if ( STUNDE >= 22 && MINUTE >= 15 ) {                 // ab 22:15 Uhr
          licht2 = 0;                                    // ist Lampe2 aus
  }
 


   if ( STUNDE >= 22 ||  STUNDE <=5 )     {               // ab 22 Uhr  bis 5:59:59 Uhr
         licht3 = dimmrauf ,-150;                         // ist Mondlicht auf Dimmstufe 150
}
   
 analogWrite (Lampe1 , licht1 );                          // jetzt noch schnell die Lampe tatsächlich anhand der
 analogWrite (Lampe2 ,  licht2);                          // vorher bestimmten Werte einstellen
 analogWrite (Mond ,  licht3);     
   

}



Gruß Heinz
woller
Beiträge: 6
Registriert: 23 Feb 2016 20:29
Bewertungen: 0 (0%)
Beitragvon woller » 26 Feb 2016 18:08
habe jetzt nur mit LED1 getestet und das selbe Ergebnis zur vollen Stunde geht sie aus um dann wieder hoch zu dimmen
woller
Beiträge: 6
Registriert: 23 Feb 2016 20:29
Bewertungen: 0 (0%)
Beitragvon omega » 27 Feb 2016 01:08
Hi Sabri,

sabrikara hat geschrieben:Durchs Probieren lernt und versteht man dann, was da passiert.

stimmt auch wieder.

Grüße, Markus
Benutzeravatar
omega
Beiträge: 2184
Registriert: 12 Sep 2012 20:53
Wohnort: München
Bewertungen: 9 (100%)
Beitragvon omega » 27 Feb 2016 02:09
Hallo Heinz,

woller hat geschrieben:sieht so aus als ob der Code in der 14 Uhr Dimmschleife hängen bleibt.

Dein Sketch enthält keine einzige Schleife. In einer Schleife geht es bekanntermaßen rund. Das passiert aber nur bei einem for, while oder do, nicht aber bei einem if.

das selbe Ergebnis zur vollen Stunde geht sie aus um dann wieder hoch zu dimmen

Bau mal einen delay(1000) in loop() ein, damit sich Dein Arduino nicht tot rennt. Dem wird ja ganz schwindelig. Einmal pro Sekunde die PWM-Werte bei 255 Helligkeitsänderungen in 30 Minuten zu errechnen und zu setzen, ist mehr als ausreichend.
Dann nimmst Du den Poor Man's Debugger: gib mit Serial.println die Werte auf Deinem PC aus, die Dir verdächtig erscheinen. An die Lampen braucht Dein Arduino dazu nicht angeschlossen zu sein.
So kommst Du Deinem Problem vielleicht eher auf die Spur.

Serial.begin(9600) brauchst Du in loop() nicht. Steht ja schon in setup().

Was bezweckst Du mit dem Comma Operator bei z.B.
Code licht1 = dimmrunter , -50 ;

licht1 wird dadurch immer auf -50 gesetzt. Da gibt's noch andere solche Stellen.

Hast Du schon mal ausgerechnet was
Code int dimmrauf = maxlicht * dimmsekunde / gesamtdimmsekunden ;
int dimmrunter = maxlicht - (maxlicht * dimmsekunde / gesamtdimmsekunden);

ergeben, wenn dimmsekunde = 59*60 ist? dimmrauf wird dann 501 und dimmrunter -246.

Grüße, Markus
Benutzeravatar
omega
Beiträge: 2184
Registriert: 12 Sep 2012 20:53
Wohnort: München
Bewertungen: 9 (100%)
Beitragvon woller » 27 Feb 2016 12:12
würde mich mal als totalen Anfänger bezeichnen und bin schon mal froh das ich mit dem Code so weit wie jetzt bin und hoffe mit eurer Hilfe bekommen ich den Rest auch hin. Mit dem Poor Man's Debugger kann ich leider momentan noch gar nichts anfangen.
habe den Code geändert und möchte damit bezwecken das licht1 von 255 bis Stufe 50 runterdimmt

Code   if( STUNDE >= 10 && MINUTE >= 30 ) {
 licht1 = dimmrunter > 50 ;


aber funktioniert wohl auch wieder nicht :nosmile:

komme irgentwie nicht weiter
könnte die Formel so funktionieren?

Code int dimmrauf = 0 ++ (dimmsekunde / gesamtdimmsekunden) ;
int dimmrunter = maxlicht - (dimmsekunde / gesamtdimmsekunden);
woller
Beiträge: 6
Registriert: 23 Feb 2016 20:29
Bewertungen: 0 (0%)
Beitragvon omega » 27 Feb 2016 13:28
Hallo,

woller hat geschrieben:Mit dem Poor Man's Debugger kann ich leider momentan noch gar nichts anfangen.

dann wird es höchste Zeit, daß Du Dich damit beschäftigst. Wenn Du Deinen eigenen Code nicht verstehst, solltest Du Dir mal ansehen, was er mit Deinen Variablen anstellt.

habe den Code geändert und möchte damit bezwecken das licht1 von 255 bis Stufe 50 runterdimmt
Code   if( STUNDE >= 10 && MINUTE >= 30 ) {
 licht1 = dimmrunter > 50 ;

aber funktioniert wohl auch wieder nicht :nosmile:
An Deiner Stelle würde ich jetzt mal beginnen zu verstehen, was Du da eigendlich programmiert hast.
In Worten:
Wenn es halb elf oder später ist, dann setze licht1 auf eins, wenn dimmrunter größer fünfzig ist.
Wenn dagegen dimmrunter kleiner oder gleich fünfzig ist, setze licht1 auf Null.
"dimmrunter > 50" ist ein Vergleich, der als Ergebnis true (1) oder false hat (0) hat.

könnte die Formel so funktionieren?

Code int dimmrauf = 0 ++ (dimmsekunde / gesamtdimmsekunden) ;
int dimmrunter = maxlicht - (dimmsekunde / gesamtdimmsekunden);

Könnte? Warum rechnest Du es denn nicht nach?
Die erste Zeile compiliert nicht. Der Inkrement-Operator "++" ist unär, hat demnach nur einen Operanden. Bei Dir sind es aber zwei. Aus "0 ++" würde 1, aber dann fehlt ein Operater zum Rest des arithmetischen Ausdrucks.

Grüße, Markus
Benutzeravatar
omega
Beiträge: 2184
Registriert: 12 Sep 2012 20:53
Wohnort: München
Bewertungen: 9 (100%)
Beitragvon max4flowgrow » 15 Mai 2016 16:49
Hi,

sorry, wenn ich hier zwischenfunke - es geht mir aber dezidiert um den Einstiegstopic, nämlich eine LED-Leuchte (Smartarray Q16) mit dem Netzteil Meanwell LCM-40 zu dimmen - allerdings direkt mit dem RaspberryPi 3 und nicht mit einem Arduino.

Hierzu habe ich genau die Schaltung befolgt, wie sie auf den ersten Seiten hier im thread beschrieben wird - lediglich hab ich den 5V-Ausgang des RaspberryPi genommen anstelle des Arduino. Das müsste doch auch gehen, oder?

Ergebnis: Ich kann zwar an- und ausschalten, aber wenn ich z.B. auf 80% dimme, dann flackert die LED-Leuchte... Von Dimmen kann ansonsten keine Rede sein.

Die Schaltung scheint zu stimmen, aber die Art und Weise, wie ich die PWM in Python anspreche, die ist mir nicht klar, denn das, was Ihr im Arduino macht, das lässt sich wohl leider nicht einfach übertragen...

Hat jemand einen Tipp, wie das zu lösen ist? Wäre super...

Liebe Grüße
Markus
max4flowgrow
Beiträge: 2
Registriert: 15 Mai 2016 16:37
Bewertungen: 0 (0%)
Beitragvon max4flowgrow » 15 Mai 2016 18:24
Hi,

muss mich korrigieren: Gate ist an PIN 11 (phys.) des Raspberry angeschlossen, erhält also nur 3,3V.

Wenn ich nun nach einer Anleitung wie dieser vorgehe (vgl. http://www.toptechboy.com/raspberry-pi/raspberry-pi-lesson-27-analog-voltages-using-gpio-pwm-in-python/), dann kann ich die LED bestenfalls zum Flackern bringen, z.B. wenn ich den cycle extrem heruntersetze, aber sie leuchtet immer mit derselben Stärke, d.h. lässt sich so nicht dimmen.

Was mache ich falsch?

Liebe Grüße
Markus
max4flowgrow
Beiträge: 2
Registriert: 15 Mai 2016 16:37
Bewertungen: 0 (0%)
Beitragvon steppy » 16 Mai 2016 14:00
Hallo Markus,
wenn es flackert tut sich ja schonmal was. Ich würde zunächt einmal eingrenzen, ob die Software oder die Hardware Probleme macht. Hast du die einfache Schaltung aus deinem Link getestet, also nur ein Widerstand und eine mini-LED an dem Port. Falls das nämlich geht, ist der Fehler in deiner Schaltung zu suchen, sonst in der Software.

Gruß
Stefan
Benutzeravatar
steppy
Beiträge: 210
Registriert: 18 Aug 2014 08:42
Bewertungen: 4 (100%)
Beitragvon Wuestenrose » 16 Mai 2016 20:34
'N Abend...

max4flowgrow hat geschrieben:muss mich korrigieren: Gate ist an PIN 11 (phys.) des Raspberry angeschlossen, erhält also nur 3,3V.

Dann schaltet der MOSFET vermutlich nicht ganz durch. Alternative: Durch einen Transistor ersetzen, dessen Basis Du allerdings nicht direkt mit dem Raspberry ansteuern kannst. Du schaltest einfach einen 47-kOhm-Widerstand zwischen den Ausgangspin des Raspberry und die Basis des Transistors. Sein Kollektor kommt ohne irgendetwas dazwischen oder sonstwie dazuzuschalten an "DIM +" des LCM-40. Seinen Emitter verbindest Du mit Minus der Raspberry-Spannungsversorgung und "DIM -" des LCM-40. Es gibt sonst keine weitere Verbindung zum LCM.

Grüße
Robert
生活中的每一天都不可避免地会增加可以吻我屁股的人数。
Benutzeravatar
Wuestenrose
Beiträge: 4803
Registriert: 26 Jun 2009 10:46
Wohnort: 奥格斯堡古城
Bewertungen: 2 (100%)
Beitragvon Wuestenrose » 17 Mai 2016 08:06
Morgen…

Ein simpler NPN-Kleinleistungstransistor wie der BC547 genügt. Habe ich vergessen zu erwähnen.


Grüße
Robert
生活中的每一天都不可避免地会增加可以吻我屁股的人数。
Benutzeravatar
Wuestenrose
Beiträge: 4803
Registriert: 26 Jun 2009 10:46
Wohnort: 奥格斯堡古城
Bewertungen: 2 (100%)
Beitragvon Silverdriver » 20 Apr 2017 22:37
Hallo, ich bin neu hier im Forum und habe mich extra wegen diesem Beitrag angemeldet.
Ich habe vor genau diese Schaltung mit einem Arduino UNO + Echtzeituhr DS3231 nachzubauen um mein Meanwell Netzteile zu Dimmen mit Sonnenaufgang und Sonnenuntergang.
Jetzt habe ich das Problem das ich in der Programmierung noch ein frischling bin, aber vielleicht würde mir ja jemand helfen oder sogar eine Quelle für einen laufendes Programm nennen.

Das ganze soll recht simpel sein.
Ich möchte einfach zu Uhrzeit X die dimmung starten (Sonnenaufgang)
Dann eine gewisse Zeit beleuchten (Tageslicht 10 Stunden)
Dann das Licht wieder runterdimmen bzw ganz abschalten (Sonnenuntergang)

Ich würde mich sehr freuen wenn ihr mir da weiterhelfen würdet.

Als Hardware habe ich: Arduino UNO, DS3231 Echtzeituhr, LCD Display 1602 und für das PWM Problem 5V auf 10V habe ich einen NPN BD241B + 1K widerstand + 5,1K widerstand das sollte so funktionieren oder?

So wurde mir der Anschluss empfohlen: An den Kollektor des Transistors kommt ein 5k widerstand und dann an DIM+, am Emitter geht es zurück zu DIM- (=GND) und die Basis wird über einen Widerstand (so...1000 Ohm oder größer) mit dem Microcontroller-Pin verbunden.
DIM- muss zudem noch mit der Masse vom Microcontroller verbunden sein.

Vielen Dank
Silverdriver
Beiträge: 1
Registriert: 20 Apr 2017 20:00
Bewertungen: 0 (0%)
134 Beiträge • Seite 9 von 9
Ähnliche Themen Antworten Zugriffe Letzter Beitrag
Arduino-Aquariumsteuerung?
von kos » 21 Jun 2012 18:32
13 8425 von Ortin Neuester Beitrag
29 Jun 2012 20:26
MeanWell Netzteil
Dateianhang von Diskus79 » 02 Aug 2015 13:31
6 433 von omega Neuester Beitrag
03 Aug 2015 23:24
Wie sind eure Erfahrungen mit 4er Relay für den Arduino
von Ingo79 » 31 Okt 2014 13:50
1 307 von Wuestenrose Neuester Beitrag
31 Okt 2014 15:25
Aquaduino - Arduino powered Aquarium Controller
von NatroN » 05 Jan 2015 15:47
11 2158 von Starmbi Neuester Beitrag
08 Mär 2016 21:34
LED dimmen ?
von Pardu » 30 Nov 2016 22:02
6 435 von Wuestenrose Neuester Beitrag
02 Dez 2016 08:05

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste