Éclairage d’escalier automatique élégant (partie1)

Dans la première Partie d'une nouvelle passionnante Série d'un élégant automatique marches des escaliers jusqu'à un maximum de 16 étages sur, à chaque marche de l'Escalier après l'autre, en Chenillard éclaire dès que l'un des deux Infrarotmelder, chacun individuellement, au haut et au bas de l'Escalier sont attachés, un Mouvement de signaler. Ici, chaque Escalier encore doucement par Commande PWM sur la Luminosité maximale hochgedimmt et, plus tard, jusqu'à extinction de nouveau atténue. De longues Périodes de temps, dans l'Escalier et reste allumé, ou d'un Niveau vers le haut ou herabdimmt est libre dans le Sketch est à votre discrétion réglable. Une telle Solution existe déjà dans le commerce (ici en Vidéo le Fonctionnement de voir).

aujourd'Hui, je montre comment une Fonction similaire de Contrôle à l'aide du Arduinos et de quelques Composants externes, même construire.

 

Nous avons besoin pour notre do-it-yourself marches des escaliers suivant l'Électronique de Pièces:

 

Nombre

Description

Remarque

2

PIR Module HC-SR501 PIR

détecteur de Mouvement

1

PCA9685 16 Canaux 12 Bit PWM Driver

 

1

Nano V3

 

1

MB102 Adaptateur d'Alimentation

Pour Breadboardaufbau

à 16

IRF520 MOS Driver Module 0-24V 5A

Nombre en fonction de Treppenzahl

1

Alimentation pour LED/Lampes pour les Niveaux

Maximum de 24 Volts

 

suivant le Schéma est le Kernsteuerung voir. Exemplaires mais seulement 2 Treiberstufen maximum de 16 Treiberstufen voir. Si plus Treiberstufen sont nécessaires, ils sont, mutatis mutandis, comme les deux tracés connecté. Il est à noter impérativement une Utilisation sécuritaire de Câbles électriques et de Câbles dimensions suffisantes, ainsi que d'un bloc d'Alimentation. Le bloc d'Alimentation doit la Surcharge et à tous les Treppenstufenlichter et l'Arduino avec la Tension continue de se fournir sans contrainte! Il existe un risque d'Incendie en cas de non appropriés Montage et/ou de l'Exploitation!

 

Nous construisons la Diffusion de notre Escalier comme suit sur une platine d'essai pour tester sur:

 

Construction sur plan de montage Expérimental

 

Im prochaine Étape, nous adaptons le code Source du Arduinos à ses propres Besoins. Intéressantes sont les suivantes 3 Lignes dans le Code:

#define Num_Stages 15
#define Delay_Stages 10
#define Delay_ON_to_OFF 5

 

Num_Stages

Définit le Nombre d'éclairer les Escaliers (un maximum de 16, à partir de 0 anzählend de commencer. Valeur maximale: 15)

Delay_Stages

Fade Période pour chaque marche de l'Escalier -> plus la Valeur est élevée et plus la Période, la plus lente.

Delay_ON_to_OFF

Période de la passe en utilisant l'Escalier est dans un État "à" reste.

 

Après, nous avons les valeurs, les Préférences personnelles, adaptées ai le Code sur l'Arduino être téléchargées :

 

 

// 2019 Tobias Kuch GPL 3.0
#include <Wire.h>

#define PWM_Module_Base_Addr 0x40 //10000000b Le dernier Bit de Adressbytes défini le type de Chirurgie. Si le Réglage est logique 1 0x41 Module 2
//est une opération de Lecture sélectionne alors un 0 logique d'une opération d'Écriture sélectionne.
#define OE_Pin  8           // Pin pour Output Enable
#define PIRA_Pin 2
#define PIRB_Pin 3

#define Num_Stages  15
#define Delay_Stages  10
#define Delay_ON_to_OFF  30  // Minimum Delay_ON_to_OFF dans les Seconds

octets Pwm_Channel = 0;
int Pwm_Channel_Brightness = 0;

bool Motion_Trigger_Down_to_Up = false;
bool On_Delay = false;

// interrupt Control
byte A60telSeconds24 = 0;
octets Seconds24;

ISR(TIMER1_COMPA_vect)
{   A60telSeconds24++;   if (A60telSeconds24 > 59)   {     A60telSeconds24 = 0;     Seconds24++;     if (Seconds24 > 150)     {       Seconds24 = 0;     }   }
}

void ISR_PIR_A()
{   bool PinState = digitalRead(PIRA_Pin);   if (PinState)   {     Motion_Trigger_Down_to_Up = true; // PIR A déclenché   }
}

void ISR_PIR_B()
{   bool PinState = digitalRead(PIRB_Pin);   if (PinState)   {     Motion_Trigger_Down_to_Up = true; // PIR B déclenché   }
}

void Init_PWM_Module(octets PWM_ModuleAddr)
{   pinMode(OE_Pin, OUTPUT);   digitalWrite(OE_Pin, HIGH); // Active LOW-Ausgangsaktivierungs-Pin (OE).   Wire.beginTransmission(PWM_ModuleAddr); // Transfert de données initier   Wire.write(0x01);                       // Choisissez le Mode 2 Registre de commande (Registre)   Wire.write(0x04);                       // Configurer une Puce: 0x04: totem pole Sortie 0x00: Open drain de Sortie.   Wire.endTransmission();                 // Cesse de Communication, Envoyez Stop Bit   Wire.beginTransmission(PWM_ModuleAddr); // Transfert de données initier   Wire.write(0x00);                      // Sélectionne le Mode 1 de Registre de commande (Registre)   Wire.write(0x10);                      // Configurer SleepMode   Wire.endTransmission();                // Cesse de Communication, Envoyez Stop Bit   Wire.beginTransmission(PWM_ModuleAddr); // Transfert de données initier   Wire.write(0xFE);                       // Sélectionne PRE_SCALE registre de commande (Registre)   Wire.write(0x03);                       // Set Prescaler. Le maximum de PWM Frequent est 1526 Hz si la PRE_SCALEer Regsiter sur "0x03h" est définie. Standard : 200 Hz   Wire.endTransmission();                 // Cesse de Communication, Envoyez Stop Bit   Wire.beginTransmission(PWM_ModuleAddr); // Transfert de données initier   Wire.write(0x00);                       // Sélectionne le Mode 1 de Registre de commande (Registre)   Wire.write(0xA1);                       // Configurer une Puce: ERrlaube All Call I2C Adresses, utilise l'Horloge interne, // Autorise Auto Increment Fonctionnalité   Wire.endTransmission();                 // Cesse de Communication, Envoyez Stop Bit
}


void Init_PWM_Outputs(octets PWM_ModuleAddr)
{   digitalWrite(OE_Pin, HIGH); // Active LOW-Ausgangsaktivierungs-Pin (OE).   for ( int z = 0; z < 16 + 1; z++)   {     Wire.beginTransmission(PWM_ModuleAddr);     Wire.write(z * 4 + 6);      // Sélectionne PWM_Channel_ON_L registre     Wire.write(0x00,);                     // Valeur pour les o. g. Registres     Wire.endTransmission();     Wire.beginTransmission(PWM_ModuleAddr);     Wire.write(z * 4 + 7);      // Sélectionne PWM_Channel_ON_H registre     Wire.write(0x00,);                     // Valeur pour les o. g. Registres     Wire.endTransmission();     Wire.beginTransmission(PWM_ModuleAddr);     Wire.write(z * 4 + 8);   // Choisissez PWM_Channel_OFF_L registre     Wire.write(0x00,);        // Valeur pour les o. g. Registres     Wire.endTransmission();     Wire.beginTransmission(PWM_ModuleAddr);     Wire.write(z * 4 + 9);  // Sélectionne PWM_Channel_OFF_H registre     Wire.write(0x00,);             // Valeur pour les o. g. Registres     Wire.endTransmission();   }   digitalWrite(OE_Pin, LOW); // Active LOW-Ausgangsaktivierungs-Pin (OE).
}

void setup()
{   //Initalisierung   pinMode(PIRA_Pin, ENTRÉE);   pinMode(PIRB_Pin, INPUT);   Serial.begin(9600);   Wire.begin(); // Initalisiere Bus I2C A4 (SDA), A5 (SCL)   Init_PWM_Module(PWM_Module_Base_Addr);   Init_PWM_Outputs(PWM_Module_Base_Addr);   noInterrupts();   attachInterrupt(0, ISR_PIR_A, CHANGE);   attachInterrupt(1, ISR_PIR_B, CHANGE);   TCCR1A = 0x00;   TCCR1B = 0x02;   TCNT1 = 0;      // Register 0 initialiser   OCR1A =  33353;      // Output Compare Registre prédéfinir   TIMSK1 |= (1 << OCIE1A);  // Timer Compare Interruption activer   les interruptions();
}

void Down_to_Up_ON()
{   Pwm_Channel = 0;   Pwm_Channel_Brightness = 0;   while (Pwm_Channel < Num_Stages + 1)   {     Wire.beginTransmission( PWM_Module_Base_Addr);     Wire.write(Pwm_Channel * 4 + 8);   // Choisissez PWM_Channel_0_OFF_L registre     Wire.écriture((octet)Pwm_Channel_Brightness & 0xFF);        // Valeur pour les o. g. Registres     Wire.endTransmission();     Wire.beginTransmission( PWM_Module_Base_Addr);     Wire.write(Pwm_Channel * 4 + 9);  // Sélectionne PWM_Channel_0_OFF_H registre     Wire.write((Pwm_Channel_Brightness >> 8));             // Valeur pour les o. g. Registres     Wire.endTransmission();     if (Pwm_Channel_Brightness < 4095)     {       Pwm_Channel_Brightness = Pwm_Channel_Brightness + Delay_Stages;       if (Pwm_Channel_Brightness > 4095) {         Pwm_Channel_Brightness = 4095;       }     } else if ( Pwm_Channel < Num_Stages + 1)     {       Pwm_Channel_Brightness = 0;       delay(200);       Pwm_Channel++;     }   }
}

void Down_to_Up_OFF()
{   Pwm_Channel = 0;   Pwm_Channel_Brightness = 4095;   while (Pwm_Channel < Num_Stages + 1)   {     Wire.beginTransmission( PWM_Module_Base_Addr);     Wire.write(Pwm_Channel * 4 + 8);   // Sélectionne PWM_Channel_0_OFF_L registre     Wire.écriture((octet)Pwm_Channel_Brightness & 0xFF);        // Valeur pour les o. g. Registres     Wire.endTransmission();     Wire.beginTransmission( PWM_Module_Base_Addr);     Wire.write(Pwm_Channel * 4 + 9);  // Sélectionne PWM_Channel_0_OFF_H registre     Wire.write((Pwm_Channel_Brightness >> 8));             // Valeur pour les o. g. Registres     Wire.endTransmission();     if (Pwm_Channel_Brightness > 0)     {       Pwm_Channel_Brightness = Pwm_Channel_Brightness - Delay_Stages;       if (Pwm_Channel_Brightness < 0) {         Pwm_Channel_Brightness = 0;       }     } else if ( Pwm_Channel < Num_Stages + 1)     {       Pwm_Channel_Brightness = 4095;       delay(200);       Pwm_Channel++;     }   }
}

void loop() {   if ((Motion_Trigger_Down_to_Up) and !(On_Delay))   {     Seconds24 = 0;     On_Delay = true;     Down_to_Up_ON();     Motion_Trigger_Down_to_Up = false;   }   if ((On_Delay) and  (Seconds24 > Delay_ON_to_OFF))   {     Motion_Trigger_Down_to_Up = false;     On_Delay = false;     Down_to_Up_OFF();   }
}

 

 

Je vous souhaite beaucoup de Plaisir lors de la Construire de ce Projet et jusqu'à la prochaine Partie.

 

 

 

 

Pour arduinoProjets pour les débutantsCapteurs

17 commentaires

Andreas Wolter

Andreas Wolter

@Maik: der passende Mikrocontroller ist in der Liste oben verlinkt. Das Netzteil mit über 8A sollte reichen. Den Gesamtbedarf des Stromes könnte man erhalten, wenn man die Ströme aller Verbraucher zusammenrechnet. Es hängt also davon ab, was für Verbraucher Sie verwenden.

Maik

Maik

Ich verfolge das Projekt nun schon länger und würde mich einfach mal dran machen, nach dem Motto man wächst mit seinen Aufgaben. Was für einen Arduino benötige ich denn und würde ein Netzteil 24V mit max. 8,3A reichen wenn ich das mit LED umsetze?

Andreas Wolter

Andreas Wolter

@Tony: RGB LEDs (die adressierbaren Neopixel mal ausgenommen) sind im Grunde drei LEDs mit verschiedenen Farben. Als erstes würde ich versuchen, statt zwei einfarbige LEDs drei farbige LEDs anzuschließen. Im Code müsste man dann die Helligkeit der drei Kanäle per Offset einstellen, um die gewünschte Farbe zu erhalten.

Tony

Tony

Moin, cooles Projekt, aber bekomme ich es mit RGBs umgesetzt? VG Tony

Helmut Tack

Helmut Tack

Zunächst, tolles Projekt. Ich habe mich schon an einem Projekt eines anderen Entwicklers heran getraut, aber die von ihm implementierte 220V Abschaltung mit Relais funktioniert nicht wirklich. Irgendwas am Quellcode ist da im Argen. Hilfe, wie so oft, der Fehler sitz vor der Tastatur. Da ich nicht gerne in anderen Codes herumkrame, habe ich mit Freuden dieses Projekt gefunden.
1. Frage : Brauch ich für 10 SDufen 10 PCA9685 16 Kanal 12 Bit PWM Driver oder nur einen?
2. Frage : Kann der Code um eine 220V Stromabschaltung per Relais erweitert werden. Wäre der Sicherheits- un d Umweltgedanke.
Ich werde das Projekt mal umsetzen und sehen, ob ich wieder (wie beim Mitbewerber) die Materialien und die Zeit in die “Tonne kloppe”
Das Projekt ist für einen lieben Menschen gedacht, dessen sehfähigkeit im Dunkeln gleich Null ist. Damit er noch lange sein Schlafzimmer im Obergeschoss des Hauses nutzen kann, will ich eine soche LED Beleuctung implementieren.
Liebe Grüße und schon mal danke für die Antwort, gerne auch per Mail.

Tobias

Tobias

Ich kann Wolfgang nur zustimmen. Bitte beachtet im eigenen Interesse alle Sicherheitsbestimmungen, VDE Bestimmungen, im Text genannte Hinweise und natürlich auf eine sichere und saubere Verlegung der Kabel.

Tobias

Tobias

Ich kann Wolfgang nur zustimmen. Bitte beachtet im eigenen Interesse alle Sicherheitsbestimmungen, VDE Bestimmungen, im Text genannte Hinweise und natürlich auf eine sichere und saubere Verlegung der Kabel.

Wolfgang

Wolfgang

Die Idee finde ich toll und ein Anstoß für das Zusammenwirken von Komponenten (auch für andere Projekte.
Aber:
Das Zusammenwirken von Steuerungen mit Lichtstrom (Netzstrom) ist eine echte Herausforderung, weil in unserer technischen Welt alles diesbezüglich mit Sicherheitsvorschriften geregelt ist, deren Nichtbeachtung fatale Folgen haben kann. In diesem Falle trifft die VDE für Kleinspannungen zu. Damit meine ich nicht die ARDUINO Steuerung sondern die Leistungssteuerung. Deswegen unterstütze ich die Kommentare meiner Vorgänger, die Beleuchtung auf LED im Kleinleistungsbereich (<5W) gegenüber X* max ca.100W vorschlagen. Abgesehen von der Wärmeentwicklung. Bei allen Projekten sollte auch die “Klimaverträglichkeit” mitspielen. Etwas, woran sich die “Maker-Szene” heran tasten sollte.

In einigen Kommentaren war die Aktivierung mit Lichtempfindlichkeit angesprochen: Die PIR Module haben 2 Einstellungen: Pulslänge bei Aktivierung und Umgebungshelligkeit.

Im Rettungsdienst sind wir immer wieder mit Verunglückten konfrontiert, die auf Treppen stürzen. Kabel sind nicht selten dabei ein Grund. Bitte, im eigenen Interesse, wenige Kabel und sichere Verlegung, gerade bei Stiegen und Treppen!

Udo Schulz

Udo Schulz

Es wäre schön, wenn die Lampen , wenn man oben an der Treppe ist, von oben nach unten angehen und wenn man unten ist, von unten nach oben angehen und entsprechend auch ausgehen.

Tobias

Tobias

vielen Dank für die ganze positive Rückmeldung ! Das Projekt kann ganz einfach auch mit LED Streifen ohne Änderung der Schaltung oder des Codes verwendet werden. Einfach an den Ausgang ein LED Streifen hängen, das wars..

Tim

Tim

Hallo
Ich bekomme nur Fehlermeldungen beim Kompilieren.
Arduino: 1.8.10 (Windows 10), Board: “Arduino Nano, ATmega328P”

treppenlicht1:58:16: error: expected primary-expression before ‘,’ token

pinMode(OE_Pin8, OUTPUT); ^

treppenlicht1:59:21: error: expected primary-expression before ‘,’ token

digitalWrite(OE_Pin8, HIGH); // Active LOW-Ausgangsaktivierungs-Pin (OE). ^

C:\Users\frogg\Documents\Arduino\treppenlicht1\treppenlicht1.ino: In function ‘void Init_PWM_Outputs(byte)’:

treppenlicht1:81:21: error: expected primary-expression before ‘,’ token

digitalWrite(OE_Pin8, HIGH); // Active LOW-Ausgangsaktivierungs-Pin (OE). ^

treppenlicht1:101:21: error: expected primary-expression before ‘,’ token

digitalWrite(OE_Pin8, LOW); // Active LOW-Ausgangsaktivierungs-Pin (OE). ^

C:\Users\frogg\Documents\Arduino\treppenlicht1\treppenlicht1.ino: In function ‘void Down_to_Up_ON()’:

treppenlicht1:128:22: error: ‘Num_Stages’ was not declared in this scope

while (Pwm_Channel < Num_Stages + 1) ^~~~~~~~~~

C:\Users\frogg\Documents\Arduino\treppenlicht1\treppenlicht1.ino:128:22: note: suggested alternative: ‘Num_Stages15’

while (Pwm_Channel < Num_Stages + 1) ^~~~~~~~~~ Num_Stages15

treppenlicht1:140:51: error: ‘Delay_Stages’ was not declared in this scope

Pwm_Channel_Brightness = Pwm_Channel_Brightness + Delay_Stages; ^~~~~~~~~~~~

C:\Users\frogg\Documents\Arduino\treppenlicht1\treppenlicht1.ino:140:51: note: suggested alternative: ‘Delay_Stages10’

Pwm_Channel_Brightness = Pwm_Channel_Brightness + Delay_Stages; ^~~~~~~~~~~~ Delay_Stages10

C:\Users\frogg\Documents\Arduino\treppenlicht1\treppenlicht1.ino: In function ‘void Down_to_Up_OFF()’:

treppenlicht1:158:22: error: ‘Num_Stages’ was not declared in this scope

while (Pwm_Channel < Num_Stages + 1) ^~~~~~~~~~

C:\Users\frogg\Documents\Arduino\treppenlicht1\treppenlicht1.ino:158:22: note: suggested alternative: ‘Num_Stages15’

while (Pwm_Channel < Num_Stages + 1) ^~~~~~~~~~ Num_Stages15

treppenlicht1:170:51: error: ‘Delay_Stages’ was not declared in this scope

Pwm_Channel_Brightness = Pwm_Channel_Brightness – Delay_Stages; ^~~~~~~~~~~~

C:\Users\frogg\Documents\Arduino\treppenlicht1\treppenlicht1.ino:170:51: note: suggested alternative: ‘Delay_Stages10’

Pwm_Channel_Brightness = Pwm_Channel_Brightness – Delay_Stages; ^~~~~~~~~~~~ Delay_Stages10

C:\Users\frogg\Documents\Arduino\treppenlicht1\treppenlicht1.ino: In function ‘void loop()’:

treppenlicht1:192:32: error: ‘Delay_ON_to_OFF’ was not declared in this scope

if ((On_Delay) and(Seconds24 > Delay_ON_to_OFF)) ^~~~~~~~~~~~~~~

C:\Users\frogg\Documents\Arduino\treppenlicht1\treppenlicht1.ino:192:32: note: suggested alternative: ‘Delay_ON_to_OFF30’

if ((On_Delay) and(Seconds24 > Delay_ON_to_OFF)) ^~~~~~~~~~~~~~~ Delay_ON_to_OFF30

Mehrere Bibliotheken wurden für “Wire.h” gefunden
Benutzt:
expected primary-expression before ‘,’ token

Diddi

Diddi

Das Projekt finde ich sehr gelungen, aber es fehlt noch ein Lichtsensor um bei Tageslicht nicht unnötig Strom zu verbrauchen.
Ein Kombisensor wäre die ideale Ergänzung.

Andreas

Andreas

Ich kann Mustafa Sari nur zustimmen, eine Umsetzung mit LED wäre super.

HJThom

HJThom

Hallo zusammen, ich finde das Thema auch total spannend. Direkt habe ich mir den Aufbau mal angeschaut und stellte mir wie Mustafa die Frage, warum das Geraffel wenn man das Ganze auch mitWS2812B realisieren kann? Die Möglichkeiten sind hier vielfältiger. Die HC-SR501 sind mir persönlich zu großflächig und somit ungenau aber das ist je nach Anwendung verschieden, ich würde auf eine Lichtschranke setzten. Ich verfolge das Thema mal weiter.

Danke und Gruß
HJThom

Dirk

Dirk

ein toller Sketch den ich ähnlich auch bei YouTube gesehen habe. Was mir fehlt sind ein paar Erklärungen um den Sketch nachvollziehen zu können. Ich werde es auf jeden Fall bauen uns ausprobieren.

Stephan Strittmatter

Stephan Strittmatter

Tolles Projekt! Ich kann mich da nur anschließen: ich fände eine Variante mit LED-Streifen auch super finden!
Ich bin gespannt.

Mustafa sari

Mustafa sari

Hi es wäre super, wenn ihr die Beleuchtung mal mit dem LED Streifen umsetzt.
Ich hatte schon lange überlegt ein Lauflicht pro Stufe zu realisieren und ich glaube das würde den meisten auch gefallen.
Über das PWM kann man die einzelnen Stufen dann nach und nach immer heller werden lassen.

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Messages de blogs recommandés

  1. Installez maintenant ESP32 via l'administrateur de la carte
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA-Over the Air-ESP Programmation par WiFi