Bonjour et bienvenue à une continuation de la série élégant éclairage d’escalier. Aujourd’hui, étendre comme le nombre maximum d’escaliers que notre contrôleur peut contrôler à partir de seulement 16 à Fulminate 992 étapes!
Ainsi, même les propriétaires d’un escalier plus long devraient être en mesure d’ajuster facilement le contrôle à leurs fins en fonction de vos besoins et souhaits.
Cet ajustement se fait facilement et facilement en ajustant les variables du programme « Overall_Stages » au nombre désiré d’escaliers de 1 à 992.
Eh bien, l’un ou l’autre peut se demander comment j’atteindras ce grand nombre de sorties PWM à seulement 20 sorties disponibles d’un AZ-Delivery Nano V3. Le secret réside dans les 6 morceaux d’adresse du PCA9685. Chaque PCA9685 peut fournir 16 canaux PWM. La disposition de la chaîne de marguerites de la carte empêche le chaos du câble et permet aux 62 contrôleurs de se connecter confortablement.
En adressant binaire les planches, l’une des 62 adresses d’une portée de 40h à 7Eh peut être attribuée à un module comptant vers le haut. Il en résulte le maximum possible 992 sorties avec 16 sorties par module.
Le code a été écrit par moi de sorte que l’adresse des modules est abstraite par l’utilisateur et est calculée automatiquement. Ce n’est que la somme totale des escaliers à préciser dans une variable et un nombre attrayant de modules à attacher comme une chaîne de marguerites à l’autobus I2C. Dans le cas des modules, il faut prêter attention à une adresse ascendante des modules.
Dans l’image suivante, vous pouvez voir comment les modules doivent être connectés et adressés :
Pour notre projet actuel, nous avons besoin de :
Nombre |
Description |
Note |
2 |
Capteur de mouvement |
|
jusqu’à 62 |
Nombre selon le nombre d’escaliers /16 |
|
1 |
|
|
1 |
Pour la configuration de la planche à pain |
|
jusqu’à 992 |
Nombre selon le nombre d’escaliers |
|
1 |
Alimentation électrique pour LED/lampes pour les marches |
Maximum 24 volts |
Veuillez noter que le circuit n’a pas été testé avec l’assemblage complet, mais seulement avec 2 modules de type PCA9685. Une assemblée complète avec 62 modules n’est donc Théoriquement Décrit. Dans la pratique, il faut tenir compte des longueurs maximales des autobus I2C, de la sécurité des pannes, de la transmission du signal propre, de l’alimentation suffisamment dimensionnée, des câbles, des connexions sécurisées et plus encore. Toutes les références à cela des parties précédentes s’appliquent en particulier dans la partie d’aujourd’hui.
Voici le code mis à jour pour la partie d’aujourd’hui:
Code par Tobias Kuch 2019 mailto:tobias.kuch@googlemail.com Code en vertu de GPL 3.0 #include <Fil.H (en)> #define PWM_Module_Base_Addr 0x40 1000000b Le dernier morceau de l’adresse byte définit l’opération à effectuer. Lorsqu’il est réglé à la logique 1 0x41 module 2 etc. Gamme d’adresses0x40 - 0x47 sélectionne une opération de lecture tandis qu’un 0 logique sélectionne une opération d’écriture. #define OE_Pin 8 Pin pour l’activation de sortie #define CPU_LED_Pin 13 #define PIRA_Pin 2 #define PIRB_Pin 3 #define Num_Stages_per_Module 16 #define Delay_Stages 5 #define Delay_ON_to_OFF 2 Minimum Delay_ON_to_OFF en secondes Int Overall_Stages = 16; nombre maximum d’étapes : 62 x 16 et 992 Int delay_per_Stage_in_ms = 200; Int Pwm_Channel = 0; Int Pwm_Channel_Brightness = 0; Bool Motion_Trigger_Down_to_Up = Faux; Bool Motion_Trigger_Up_to_Down = Faux; Bool On_Delay = Faux; Octet PwMModules = 0; Octet StagesLeft (en) = 0; interrompre le contrôle Octet A60telSecondes24 = 0; Octet Seconds24; Isr (Isr)(TIMER1_COMPA_vect) { A60telSecondes24++; Si (A60telSecondes24 > 59) { A60telSecondes24 = 0; Seconds24++; Si (Seconds24 > 150) { Seconds24 = 0; } } } Vide ISR_PIR_A() { Bool PinState (En) = digitalRead (en)(PIRA_Pin); Si (PinState (En)) { Si (!(Motion_Trigger_Up_to_Down) Et !(Motion_Trigger_Down_to_Up)) { digitalWrite (en)(CPU_LED_Pin, Haute); Motion_Trigger_Down_to_Up = Vrai; } PIR A déclenché } Autre { digitalWrite (en)(CPU_LED_Pin, Faible); } } Vide ISR_PIR_B() { Bool PinState (En) = digitalRead (en)(PIRB_Pin); Si (PinState (En)) { Si (!(Motion_Trigger_Down_to_Up) Et !(Motion_Trigger_Up_to_Down)) { digitalWrite (en)(CPU_LED_Pin, Haute); Motion_Trigger_Up_to_Down = Vrai; } PIR B déclenché } Autre { digitalWrite (en)(CPU_LED_Pin, Faible); } } Vide Init_PWM_Module(Octet PWM_ModuleAddr) { pinMode(OE_Pin, Sortie); pinMode(CPU_LED_Pin, Sortie); digitalWrite (en)(OE_Pin, Haute); Épingle d’activation de sortie LOW active (OE). Fil.commenceTransmission(PWM_ModuleAddr); Initier le transfert de données Fil.Écrire(0x00); // Fil.Écrire(0x06); Réinitialisation logicielle Fil.endTransmission(); Stop Communication - Envoyer Stop Bit Retard(400); Fil.commenceTransmission(PWM_ModuleAddr); Initier le transfert de données Fil.Écrire(0x01 (en)); Sélectionnez Mode 2 Registre (Registre de commande) Fil.Écrire(0x04); Configurer Chip: 0x04: sortie de poteau mort 0x00: Sortie de vidange ouverte. Fil.endTransmission(); Stop Communication - Envoyer Stop Bit Fil.commenceTransmission(PWM_ModuleAddr); Initier le transfert de données Fil.Écrire(0x00); Sélectionnez Mode 1 Registre (Registre de commande) Fil.Écrire(0x10); Configurer SleepMode Fil.endTransmission(); Stop Communication - Envoyer Stop Bit Fil.commenceTransmission(PWM_ModuleAddr); Initier le transfert de données Fil.Écrire(0xFE (en)); Sélectionnez PRE_SCALE inscrivez-vous Fil.Écrire(0x03); Réglez Prescaler. La fréquence maximale pwM est de 1526 Hz si le PRE_SCALEer l’opérateur est réglé à "0x03h". Standard: 200 Hz Fil.endTransmission(); Stop Communication - Envoyer Stop Bit Fil.commenceTransmission(PWM_ModuleAddr); Initier le transfert de données Fil.Écrire(0x00); Sélectionnez Mode 1 Registre (Registre de commande) Fil.Écrire(0xA1 (en)); Configurer Chip: ERrlaube All Call I2C adresses, utiliser l’horloge interne, / Autoriser la fonction d’incrément automatique Fil.endTransmission(); Stop Communication - Envoyer Stop Bit } Vide Init_PWM_Outputs(Octet PWM_ModuleAddr) { digitalWrite (en)(OE_Pin, Haute); Épingle d’activation de sortie LOW active (OE). Pour ( Int Z = 0; Z < 16 + 1; Z++) { Fil.commenceTransmission(PWM_ModuleAddr); Fil.Écrire(Z * 4 + 6); Sélectionnez PWM_Channel_ON_L inscrivez-vous Fil.Écrire(0x00); Valeur pour le registre ci-dessus Fil.endTransmission(); Fil.commenceTransmission(PWM_ModuleAddr); Fil.Écrire(Z * 4 + 7); Sélectionnez PWM_Channel_ON_H inscrivez-vous Fil.Écrire(0x00); Valeur pour le registre ci-dessus Fil.endTransmission(); Fil.commenceTransmission(PWM_ModuleAddr); Fil.Écrire(Z * 4 + 8); Sélectionnez PWM_Channel_OFF_L inscrivez-vous Fil.Écrire(0x00); Valeur pour le registre ci-dessus Fil.endTransmission(); Fil.commenceTransmission(PWM_ModuleAddr); Fil.Écrire(Z * 4 + 9); Sélectionnez PWM_Channel_OFF_H inscrivez-vous Fil.Écrire(0x00); Valeur pour le registre ci-dessus Fil.endTransmission(); } digitalWrite (en)(OE_Pin, Faible); Épingle d’activation de sortie LOW active (OE). } Vide Configuration() { Initalisation Série.Commencer(115200); pinMode(PIRA_Pin, Entrée); pinMode(PIRB_Pin, Entrée); Série.Commencer(9600); Tandis que (!Série) { ; attendre que le port en série se connecte. Nécessaire pour l’USB natif } PwMModules = Overall_Stages / 16; StagesLeft (en) = Overall_Stages % 16; Si (StagesLeft (en) >= 1) { PwMModules++; } Fil.Commencer(); Initalisia I2C Bus A4 (SDA), A5 (SCL) Pour (Octet ModuleCompte = 0; ModuleCompte < PwMModules; ModuleCompte++) { Init_PWM_Module(PWM_Module_Base_Addr + ModuleCompte); Init_PWM_Outputs(PWM_Module_Base_Addr + ModuleCompte); } noInterrupts(); attacherInterrupt(0, ISR_PIR_A, changement); attacherInterrupt(1, ISR_PIR_B, changement); TCCR1A (EN) = 0x00; TCCR1B (EN) = 0x02; TCNT1 (en) = 0; Inscription initiale avec 0 OCR1A = 33353; Pré-documents Output Compare Register TIMSK1 (en) |= (1 << OCIE1A); Activez Timer Compare Interrupt Interrompt(); } Vide Down_to_Up_ON() { Série.println("Down_to_Up_ON"); Octet Calc_Num_Stages_per_Module = Num_Stages_per_Module; Pour (Octet ModuleCompte = 0; ModuleCompte < PwMModules; ModuleCompte++) { Pwm_Channel = 0; Pwm_Channel_Brightness = 4095; Si ((StagesLeft (en) >= 1) Et (ModuleCompte == PwMModules - 1)) { Calc_Num_Stages_per_Module = StagesLeft (en); } Autre { Calc_Num_Stages_per_Module = Num_Stages_per_Module; } Pwm_Channel = 0; Pwm_Channel_Brightness = 0; Tandis que (Pwm_Channel < Calc_Num_Stages_per_Module + 1) { Fil.commenceTransmission( PWM_Module_Base_Addr + ModuleCompte); Fil.Écrire(Pwm_Channel * 4 + 8); Sélectionnez PWM_Channel_0_OFF_L inscrivez-vous Fil.Écrire((Octet)Pwm_Channel_Brightness & 0xff); Valeur pour le registre ci-dessus Fil.endTransmission(); Fil.commenceTransmission( PWM_Module_Base_Addr + ModuleCompte); Fil.Écrire(Pwm_Channel * 4 + 9); Sélectionnez PWM_Channel_0_OFF_H inscrivez-vous Fil.Écrire((Pwm_Channel_Brightness >> 8)); Valeur pour le registre ci-dessus Fil.endTransmission(); Si (Pwm_Channel_Brightness < 4095) { Pwm_Channel_Brightness = Pwm_Channel_Brightness + Delay_Stages; Si (Pwm_Channel_Brightness > 4095) { Pwm_Channel_Brightness = 4095; } } Autre Si ( Pwm_Channel < Num_Stages_per_Module + 1) { Pwm_Channel_Brightness = 0; Retard(delay_per_Stage_in_ms); Pwm_Channel++; } } } } Vide Up_to_DOWN_ON() { Série.println("Up_to_DOWN_ON"); Octet Calc_Num_Stages_per_Module = Num_Stages_per_Module; Int ModuleCompte = PwMModules - 1; Tandis que (ModuleCompte >= 0) { Pwm_Channel_Brightness = 0; Si ((StagesLeft (en) >= 1) Et (ModuleCompte == PwMModules - 1)) { Calc_Num_Stages_per_Module = StagesLeft (en); } Autre { Calc_Num_Stages_per_Module = Num_Stages_per_Module; } Pwm_Channel = Calc_Num_Stages_per_Module; Tandis que (Pwm_Channel > -1) { Fil.commenceTransmission( PWM_Module_Base_Addr + ModuleCompte); Fil.Écrire(Pwm_Channel * 4 + 8); Sélectionnez PWM_Channel_0_OFF_L inscrivez-vous Fil.Écrire((Octet)Pwm_Channel_Brightness & 0xff); Valeur pour le registre ci-dessus Fil.endTransmission(); Fil.commenceTransmission(PWM_Module_Base_Addr + ModuleCompte); Fil.Écrire(Pwm_Channel * 4 + 9); Sélectionnez PWM_Channel_0_OFF_H inscrivez-vous Fil.Écrire((Pwm_Channel_Brightness >> 8)); Valeur pour le registre ci-dessus Fil.endTransmission(); Si (Pwm_Channel_Brightness < 4095) { Pwm_Channel_Brightness = Pwm_Channel_Brightness + Delay_Stages; Si (Pwm_Channel_Brightness > 4095) { Pwm_Channel_Brightness = 4095; } } Autre Si ( Pwm_Channel >= 0) { Pwm_Channel_Brightness = 0; Retard(delay_per_Stage_in_ms); Pwm_Channel--; Si ( Pwm_Channel < 0) { Pwm_Channel = 0; Pause; } } } ModuleCompte = ModuleCompte - 1; } } Vide Down_to_Up_OFF() { Série.println("Down_to_Up_OFF"); Octet Calc_Num_Stages_per_Module = Num_Stages_per_Module; Pour (Octet ModuleCompte = 0; ModuleCompte < PwMModules; ModuleCompte++) { Pwm_Channel = 0; Pwm_Channel_Brightness = 4095; Si ((StagesLeft (en) >= 1) Et (ModuleCompte == PwMModules - 1)) { Calc_Num_Stages_per_Module = StagesLeft (en); } Autre { Calc_Num_Stages_per_Module = Num_Stages_per_Module; } Tandis que (Pwm_Channel < Calc_Num_Stages_per_Module + 1) { Fil.commenceTransmission( PWM_Module_Base_Addr + ModuleCompte); Fil.Écrire(Pwm_Channel * 4 + 8); Sélectionnez PWM_Channel_0_OFF_L inscrivez-vous Fil.Écrire((Octet)Pwm_Channel_Brightness & 0xff); Valeur pour le registre ci-dessus Fil.endTransmission(); Fil.commenceTransmission(PWM_Module_Base_Addr + ModuleCompte); Fil.Écrire(Pwm_Channel * 4 + 9); Sélectionnez PWM_Channel_0_OFF_H inscrivez-vous Fil.Écrire((Pwm_Channel_Brightness >> 8)); Valeur pour le registre ci-dessus Fil.endTransmission(); Si (Pwm_Channel_Brightness > 0) { Pwm_Channel_Brightness = Pwm_Channel_Brightness - Delay_Stages; Si (Pwm_Channel_Brightness < 0) { Pwm_Channel_Brightness = 0; } } Autre Si ( Pwm_Channel < Num_Stages_per_Module + 1) { Pwm_Channel_Brightness = 4095; Retard(delay_per_Stage_in_ms); Pwm_Channel++; } } } } Vide Up_to_DOWN_OFF() { Série.println("Up_to_DOWN_OFF"); Octet Calc_Num_Stages_per_Module = Num_Stages_per_Module; Int ModuleCompte = PwMModules - 1; Tandis que (ModuleCompte >= 0) { Pwm_Channel_Brightness = 4095; Si ((StagesLeft (en) >= 1) Et (ModuleCompte == PwMModules - 1)) { Calc_Num_Stages_per_Module = StagesLeft (en); } Autre { Calc_Num_Stages_per_Module = Num_Stages_per_Module; } Pwm_Channel = Calc_Num_Stages_per_Module; Tandis que (Pwm_Channel > -1) { Fil.commenceTransmission(PWM_Module_Base_Addr + ModuleCompte); Fil.Écrire(Pwm_Channel * 4 + 8); Sélectionnez PWM_Channel_0_OFF_L inscrivez-vous Fil.Écrire((Octet)Pwm_Channel_Brightness & 0xff); Valeur pour le registre ci-dessus Fil.endTransmission(); Fil.commenceTransmission(PWM_Module_Base_Addr + ModuleCompte); Fil.Écrire(Pwm_Channel * 4 + 9); Sélectionnez PWM_Channel_0_OFF_H inscrivez-vous Fil.Écrire((Pwm_Channel_Brightness >> 8)); Valeur pour le registre ci-dessus Fil.endTransmission(); Si (Pwm_Channel_Brightness > 0) { Pwm_Channel_Brightness = Pwm_Channel_Brightness - Delay_Stages; Si (Pwm_Channel_Brightness < 0) { Pwm_Channel_Brightness = 0; } } Autre Si ( Pwm_Channel >= 0) { Pwm_Channel_Brightness = 4095; Retard(delay_per_Stage_in_ms); Pwm_Channel--; Si ( Pwm_Channel < 0) { Pwm_Channel = 0; Pause; } } } ModuleCompte = ModuleCompte - 1; } } Vide Boucle() { Si ((Motion_Trigger_Down_to_Up) Et !(On_Delay) ) { Seconds24 = 0; On_Delay = Vrai; Down_to_Up_ON(); } Si ((On_Delay) Et (Seconds24 > Delay_ON_to_OFF) Et (Motion_Trigger_Down_to_Up) ) { Down_to_Up_OFF(); Motion_Trigger_Down_to_Up = Faux; On_Delay = Faux; Seconds24 = 0; } Si ((Motion_Trigger_Up_to_Down) Et !(On_Delay) ) { Seconds24 = 0; On_Delay = Vrai; Up_to_DOWN_ON(); } Si ((On_Delay) Et (Seconds24 > Delay_ON_to_OFF) Et (Motion_Trigger_Up_to_Down)) { Up_to_DOWN_OFF(); Motion_Trigger_Up_to_Down = Faux; On_Delay = Faux; Seconds24 = 0; } }
Je vous souhaite beaucoup de plaisir avec la réplique et jusqu’à la prochaine partie de la série. Comme toujours, vous pouvez trouver tous les projets précédents sous la page GitHub https://github.com/kuchto
10 commentaires
Andreas Wolter
@Schische: die Helligkeit wird über die PWM geregelt. Der Parameter müsste daher Pwm_Channel_Brightness sein. Das Maximum wird auf 4095 festgelegt. Leider wurde keine Variable bzw. Konstante verwendet. Somit muss man den Grenzwert an mehreren Stellen ändern.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Schische
Hallo,
super Anleitung! Ich habe die Steuerung bei mir im Haus nachgebaut und es funktioniert sehr gut. Eine Frage habe ich: die LED’s an den Stufen sind mir leider zu hell. Welche Parameter muss ich ändern, damit die Treiber nicht komplett durchschalten? Danke
Muharrem
@ Markus ich möchte dein Vorhaben auch realisieren. Könntest du mir bitte behilflich sein.
Ich bedanke mich im Voraus
Markus
Material:
xx ws2812b Leds (xx = Anzahl je nachdem wieviele man verbrauchen will), Strips oder einzelne
1 Arduino Nano
1 Bluetooth Modul HC-06
2 Bewegungsmelder HC-SR501
1 Lichtsensor
1 Netzteil 5V xx Ampere ( Je nachdem wie viele Leds man verbraucht)
Led Kabel 5 Adrig
Lötkolben und Zinn
Phantasie
Vorwort:
Überlegung war ein Treppenlicht zu bauen, was erkennt wenn oben oder unten jemand die Treppe benutzen möchte. Beim Bauen viel mir immer mehr ein was man machen könnte, so wurde es immer komplexer. So ist das Endergebnis mit Bluetooth mit dem Handy verbunden worden um Farben oder Effekte, sowie verschiedene Daten zu übermitteln. Ein Lichtsensor wurde verbaut, damit die Beleuchtung nicht andauernd anspringt, sondern nur wenn es dunkel genug ist.
Weitere Überlegungen:
Was brauche ich? In meiner zweiten Version habe ich Kabelkanäle genommen, da passte sogar der Nano und das BT Modul rein. Löcher für die Leds in der richtigen Lage der Stufen gebohrt und eingeklebt. Da im Nachhinein noch der Lichtsensor eingebaut wurde, muss ich durch den Kanal ein 5 adriges Led Kabel verlegen. Erste das 5V, Zweite GND, Dritte Datenkabel Leds, Vierte BW2, Fünfte der Lichtsensor. BW1 wird direkt an den nano gemacht.
Hab noch mehrere Versionen in laufe der Entwicklung erstellt, so hab ich auch welche mit Holzleisten gemacht, oder mit einer Fräse unten in den Treppenstufen eine Nut rein gefräst. Möglichkeiten sollte es genug geben. Man muss nur seine Phantasie spielen lassen.
Effekte wurden nach und nach eingebaut. Z.B. Wenn man die Treppe benutzt das die Treppen nach und nach der Richtung die man läuft angehen, und wenn man oben ankommt die langsam hinter sich ausgehen (sieht gut aus). Notbeleuchtung eingebaut, die die Treppe soweit beleuchten das man den Weg findet, man kann die Farbe der Beleuchtung ändern, die Zeiten etc. . Partybeleuchtung eingebaut. Es gibt auch hier noch etliche Möglichkeiten die einem einfallen. Die einzelnen Effekte konnte man dann mit einer App verändern oder ein oder ausschalten.
Meine nächsten Versionen, benutzen den Esp8266 (Wlan statt Bluetooth), so dass ich die Beleuchtung auch in meine Homeautomation per MQTT steuern kann. Dies ist aber noch in der Mache, das verschling doch ganz schön viel Zeit.
Ich weiß das einige nun wahrscheinlich den Code oder die App oder sonst was haben möchte. Ich habe damit aber so viel Zeit verbracht das ich das so nicht machen werde, bin aber bereit zu helfen wenn es im Eigenbau zu Fragen oder Problemen kommt.
Dirk
Hallo an alle,
ich komme hier mit einer vielleicht etwas peinlichen Frage weil ich mich vielleicht einfach nur verrechne. Aber ich bin mir unsicher über den Kabelquerschnitt bei der Stromversorgung für die Lampen. Ich möchte Led Ringe verwenden, die wollen 5 Volt und ziehen 0,24 A wenn ich das aus dem Datenblatt richtig lese. Wenn ich jetzt 16 (16 Stufen) Stück parallel mit der nötigen Leistung versorgen will, welchen Kabelquerschnitt braue ich ich dann ohne diese zu Überlasten ? Das sind dann ja schon knapp 20 Watt und das bei 3 Meter Leitungslänge. Will ja nicht die Treppe abfackeln. Oder sollte man mit mehreren Reihenschaltungen und mehr Volt arbeiten. Wäre sehr dankbar für einen Tipp.
Gruß, Dirk
Tobias
Hallo Georg,
Die Beleuchtung kommt sehr nahe an das Video, jedoch variiert die Ausschalt Sequenz der Treppe ein bisschen, da immer die nächste Treppenstufe erst dann anfängt, hoch oder herunterzudimmen, wenn die vorherige bereits Ihren Endzustand (aus oder ein) erreicht hat. Im Video passiert das augenscheinlich parallel in der Ausschalt Sequentz. Ich helfe, soweit es zeitlich im Rahmen bleibt, gerne weiter . Mailadresse: tobias.kuch@googlemail.com.
Gruß
Tobias
Tobias
Hallo Markus,
Könntest du dein tolles Projekt mit Code für Nano und Handyapp, Aufbauanleitung und Beschreibung dann nicht auch uns allen zur Verfügung stellen ? So hätten auch andere etwas davon
Gruß
Tobias
Uwe
Lieber Tobias, hallo AZ-Team,
zuerst Mal danke für die Beiträge und die Mühe damit. Nach den Kommentaren von Wolfgang und Thomas habe ich auch noch einige Ideen.
Zunächst einmal wäre es sinnvoll, bei Fortsetzungen einer Beitragsreihe die Kommentare zu konsolidieren. Es gibt Leser, die auch aus den Kommentaren vielleicht noch Ideen schöpfen können.
Aus den Fragen und Anregungen der Kommentatoren ist zu entnehmen, dass es auch andere Vorschläge gibt. Ich gehe davon aus, dass AZ diese auch gerne veröffentlichen würde, wenn man diese einreicht. Hier wäre vielleicht ein Hinweis angebracht, wie man das macht.
Nun ist der Interessenkreis hier sehr verschieden: AZ-Delivery lebt vom Vertrieb von Komponenten und nutzt die Beiträge dazu, Interesse für sein Portal zu wecken, Es gibt Leser, die sich für die Elektronik interessieren, die jedoch Nachhilfe bei der Programmerstellung benötigen, andere suchen einfach eine Idee zum Nachbauen. Wieder andere haben vielleicht mit Mechanik keinerlei Probleme, denen ist Strom jedoch ein Rätsel. Dazwischen sitzt der Autor und kann es keinem richtig Recht machen – eigentlich wollte er ja nur an seiner Idee teilhaben lassen.
Ich finde die hier vorgestellte Idee super (würde mir auch den Vorschlag von Markus ansehen wollen) – habe als Kybernetiker mit dem Verständnis von Automaten, Startbedingungen und Betrachtung (was wäre wenn…) keine Probleme. Nur habe ich mich nie mit der Programmentwicklung in der Tiefe beschäftigt. Für mich wäre es hilfreich, wenn im Code einige Kommentare drin wären, die das Verständnis des Codes für eine evtl Adaption erleichtern. Hierfür wäre ich sogar bereit, einen Obulus zu bezahlen. Die Anregung hier: vielleicht könnte man unter der Rubrik Literatur ein komplettes “Make” für ?? anbieten, dann mit ausführlichen Hinweisen zu VDE, Code, mechanischer Sicherheit etc?
Georg L.
Hallo Markus, kannst deine Lösung auch gerne teilen, dann können alle nachvollziehen, ob es einfacher ist. @Tobias, funktioniert die Beleuchtung dann wie im Video des ersten Teiles zu sehen?
Markus
Ich finde das alles zu umständlich, habe selber schon mehrere Treppenbeleuchtung gebaut und programmiert. Habe aber die WS2812 genommen, nano mit Bluetooth Verbindung (mit einer selbstgeschriebenden App um Veränderungen vor zu nehmen) , Mini IR Bewegungssensor PIR AM312. Das ganze läuft Problemlos.