Arduino Nano mit NeoPixel LEDs seriell steuern (ausschalten)

  • Hi,

    ich habe einen Arduino Nano per USB an einem Raspberry Pi4 angeschlossen. Der Nano steuert eine kleine LED Lichterkette des Typs NeoPixel. Des Weiteren habe ich beim Pi 4 die "WakeUp" Funktion aktiviert. Mein Problem ist nun, dass wenn ich den Pi herunterfahre, der Arduino wegen des aktivierten WakeUp nicht ausschaltet.


    Ich suche nun eine Möglichkeit den Arduino irgendwie auszuschalten, ohne den vorhanden Sketch auf dem Arduino zu überschreiben. Gibt es da eine Möglichkeit?


    Danke und Gruß

    Obelix


  • Hi,

    ich nutze den Pi4 mit libreelec und suche auch nach einer Möglichkeit ihn vernünftig abzuschalten.

    Nach langem hin und her, habe ich grade einen Remotepi bestellt. Der macht den Pi komplett stromlos.

    Natürlich nur sinnvoll, wenn er auch per Fernbedienung bedient werden soll.


    Gruß Jan

    1:Dell PoweEdge T20; Xeon E3-1225 v3; 32GB RAM; Proxmox 5.4; MLD 5.4 als VDR-Server; 2 x Cine S2;
    2:Intel NUC i3 Passiv; 4GB RAM; 120GB SSD; easyvdr 3.5 als client; Harmony Hub

    2:Intel NUC i5 Passiv; 4GB RAM; 120GB SSD; easyvdr 3.5 als client; Harmony Hub
    3:Raspberry Pi 3B; MLD

  • Ich suche nun eine Möglichkeit den Arduino irgendwie auszuschalten, ohne den vorhanden Sketch auf dem Arduino zu überschreiben. Gibt es da eine Möglichkeit?

    Du könntest den Sketch für den Arduino so modifizieren, dass es extra Steuerbefehle für LEDs an/aus gibt und diese Befehle beim Booten bzw. Shutdown senden.


    Edit: ok, dafür muss man den Sketch überschreiben...

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ich suche nun eine Möglichkeit den Arduino irgendwie auszuschalten, ohne den vorhanden Sketch auf dem Arduino zu überschreiben. Gibt es da eine Möglichkeit?

    ja, siehe hier --> ein weiterer IR Einschalter für den RPI


    stm32 Anschluss weglassen und anstelle vom PI den Arduino anschließen. Die GPIO Pins sind ja beim Power-Off vom PI aus und schalten dann den Arduino ab. Quasi ein Arduino Slave vom RPI.

  • Du könntest den Sketch für den Arduino so modifizieren, dass es extra Steuerbefehle für LEDs an/aus gibt und diese Befehle beim Booten bzw. Shutdown senden.


    Edit: ok, dafür muss man den Sketch überschreiben...

    So stelle ich mir das vor. Modifizieren des Sketches sollte ja kein Problem sein. Ich will nur nicht jedesmal den Code für eine Änderung des Status komplett austauschen. Ich weiß nur nicht wie. Hier mal mein Sketch:


    Teile des Codes habe ich vom Beispiel How to control an LED pixel strip (WS2812B) with an Arduino and the FastLED library übernommen.


  • ja, siehe hier --> ein weiterer IR Einschalter für den RPI


    stm32 Anschluss weglassen und anstelle vom PI den Arduino anschließen. Die GPIO Pins sind ja beim Power-Off vom PI aus und schalten dann den Arduino ab. Quasi ein Arduino Slave vom RPI.

    Das geht leider nicht. Der STM32 wird ebenfalls benötigt. Also der STM32 und der Arduino Nano befinden sich am Pi. Der STM32 wird für den Lirc und zum einschalten benötigt. Der Nano für den NeoPixel. Die Gesamtkonstruktion werde ich demnächst hier veröffentlichen.


    The post was edited 2 times, last by obelix: Rechtschreibung ().

  • Das mache ich damit: Richtiger An-/Ausschalter für den Raspberry Pi. So geht’s Dazu ein STM32 wie im Thread ein weiterer IR Einschalter für den RPI beschrieben.


  • Hmmmm :/ So richtig Blicke ich es gerade nicht... :whistling: Ich habe den Nano nur am PI, da ich gehofft hatte, den Nano auch darüber steuern zu können. Jo, ich bin bezüglich Arduino blutiger Anfänger :whistling:.


    Neue Idee: ich steuere den Lüfter wie im Thread Raspberry Pi 4B Unterstützung von Uwe vorgeschlagen: Raspberry Pi: Lüfter mit NPN Transistor ein- und ausschalten. Wenn ich den Nano nicht per USB Anschließe, sondern zusätzlich zu den 5 Volt vom Lüfter, dann müsste das doch auch gehen, oder? Man würde über den NPN Transistor neben dem Lüfter auch die LEDs schalten..... :/


  • Man würde über den NPN Transistor neben dem Lüfter auch die LEDs schalten.....

    mit dem BC 547 wird das leistungsmäßig wohl nicht gehen mit dem Strip. je nach Länge wird der wohl einige 100mA brauchen. Nimm doch zum schalten einen kleinen TTL-FETund gut ist es.

  • mit dem BC 547 wird das leistungsmäßig wohl nicht gehen mit dem Strip. je nach Länge wird der wohl einige 100mA brauchen. Nimm doch zum schalten einen kleinen TTL-FETund gut ist es.

    Verstehe, aber dann bräuchte ich allerdings Unterstützung..... :saint: So tief bin ich da nicht in dem Thema drin....


  • So stelle ich mir das vor. Modifizieren des Sketches sollte ja kein Problem sein. Ich will nur nicht jedesmal den Code für eine Änderung des Status komplett austauschen. Ich weiß nur nicht wie. Hier mal mein Sketch:


    Teile des Codes habe ich vom Beispiel How to control an LED pixel strip (WS2812B) with an Arduino and the FastLED library übernommen.

    Versuch es mal so - damit solltest du über die serielle Verbindung mit "0" und "1" (also z.B. echo 1 > /dev/ttyACM0 - entweder als root oder als Mitglied in der Gruppe dialout) die LEDs aus- bzw. wieder einschalten können:

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Versuch es mal so - damit solltest du über die serielle Verbindung mit "0" und "1" (also z.B. echo 1 > /dev/ttyACM0 - entweder als root oder als Mitglied in der Gruppe dialout) die LEDs aus- bzw. wieder einschalten können:

    Bei mir wird für den Arduino das Device /dev/ttyUSB0 angelegt. Wenn ich einen echo Befehl darauf absetze, dann blinkt die rote LED vom Arduino kurz auf aber sonst passiert nichts.


  • Prinzipiell ist Deine Schaltung Arduino Nano mit NeoPixel LEDs seriell steuern (ausschalten) schon das was Du brauchst. Zwei Dinge stehen dem jedoch entgegen. Zum einen ist der Transistor BC547 zu schwach für größere Lasten und zum zweiten brauchst Du einen High-Side Switch.

    Der BC547 in deiner Lüfter Schaltung ist ein Low-Side Switch, das heißt, er schaltet den Verbraucher (hier Lüfter) nach Masse ab. Den Lüfter stört so was nicht, jedoch solche Dinge wie Arduino mit Massebezug würden so nicht arbeiten können. Hier muss man die 5 Volt abschalten.


    Das macht dann ein High-Side Switch:



    Grundsätzlich ist das die schon von früher gepostete Schaltung. Da ich aber davon ausgehe, das Du nicht mit SMD bauen willst, habe ich hier THT Bauteile genommen, also alles was man aufs Steckbrett oder Lochraster bauen kann.


    Schaltungsbeschreibung:


    Über JP5 Pin2 bekommt die Schaltung das vom RPI Pin 14 Schaltsignal (so wie gewohnt). Bei High Pegel dieses Signales schaltet T1 durch und zieht dabei das Gate von Q1 nach Masse. Q1 ist ein P-Channel Mosfet und der schaltet dann durch.

    JP1 ist der 5Volt Anschluss, der zum Netzteil oder sonstiger Stromversorgung geht. JP2 ist die Masse vom Netzteil. JP3 ist der geschaltete 5Volt Ausgang, JP4 der Masse Ausgang.

    Der Schalttransistor ist ein TTL FET, der schon bei 2-4Volt Ugs leitend wird. Er kann bis zu 74A schalten, jedoch dies nur mit höherer Ugs von 10Volt.

    Bei hier angenommenen 4,5Volt vom T1 sind es aber sicher 10A, die sollten für viele Fälle ausreichen. Wenn man wirklich die 10 Ampere schalten will, sollte man dem Q1 aber ein kleines Kühlblech spendieren (Rdson > 0,02 Ω )


    Den BC 547 hast Du sicher schon oder noch einen über,

    den IRF4905 gibt es eigentlich überall, Reichelt und co, Pollin, Conrad usw. Dort sind aber die Versandkosten unverhältnismäßig hoch, günstiger kommst Du weg, wenn du den beim Chinamann kaufst , bsw 5 Stück hier für 1,26 € --> https://www.ebay.de/itm/5PCS-I…d8b347:g:HJsAAOSw7p1aqd~4

    man muss dann nur geduldig sein und 3 Wochen warten.


    Die Widerstände sind vom Wert unkritisch, man kann durchaus auch andere Werte nehmen, R2 sollte vielleicht nicht kleiner werden, wegen Schwingneigung und der Charge Kapazität vom Gate Q1


    Hier noch zwei Bilder zum Anschließen des Mosfets:


    ..

  • Danke für die Schaltung und Erklärung. Ich habe das Glück, noch auf einen kleine Elektronikladen "um die Ecke" zugreifen zu können. Dort fahre ich die Tage mal vorbei.


  • Ich muss doch über den Chinamann gehen. Der Elektronikladen hat keine Mosfets da. Die Anzahl der Varianten wäre zu groß....


    seahawk1986 : Unabhängig von der Argus Schaltung, hast du eine Idee, wieso das mit dem Befehl absetzten über Seriell nicht funktioniert? Ich finde dein Sketch für die Steuerung sehr interessant. Man könnte da LEDs je nach Zustand vom Pi / VDR steuern.


    Ich werde mein Projekt jetzt mal fertig zusammenstellen, bei Thingiverse hochladen und dann hier im Forum posten.... Vielleicht habt ihr ja noch Ideen....


  • seahawk1986: Unabhängig von der Argus Schaltung, hast du eine Idee, wieso das mit dem Befehl absetzten über Seriell nicht funktioniert? Ich finde dein Sketch für die Steuerung sehr interessant. Man könnte da LEDs je nach Zustand vom Pi / VDR steuern.

    Ich weiß nicht genau, ob die FastLED Bilbiothek da irgendwelche Besonderheiten hinsichtlich der genutzten Pins hat - versuch mal ein Minimalbeispiel, bei dem du nur eine LED schaltest (falls dein Arduino keine onboard auf Pin 13 hat, kannst du auch eine über einen Vorwiderstand mit ca. 220 Ohm an einen anderen Pin hängen):

    Dann öffnest du den seriellen Monitor deiner Arduino-IDE und schickst dem Board jeweils eine 0 oder 1. Im Erfolgsfall solltest du jeweils eine Meldung bekommen. Wenn das klappt, schau mal, ob das mit dem oben gezeigten Shell-Befehl geht - falls nicht, könnte man Screen oder ein kleines Python-Skript mit pyserial nutzen, um die Schnittstelle mit den korrekten Einstellungen zu öffnen.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ich weiß nicht genau, ob die FastLED Bilbiothek da irgendwelche Besonderheiten hinsichtlich der genutzten Pins hat - versuch mal ein Minimalbeispiel, bei dem du nur eine LED schaltest (falls dein Arduino keine onboard auf Pin 13 hat, kannst du auch eine über einen Vorwiderstand mit ca. 220 Ohm an einen anderen Pin hängen):

    Dann öffnest du den seriellen Monitor deiner Arduino-IDE und schickst dem Board jeweils eine 0 oder 1. Im Erfolgsfall solltest du jeweils eine Meldung bekommen. Wenn das klappt, schau mal, ob das mit dem oben gezeigten Shell-Befehl geht - falls nicht, könnte man Screen oder ein kleines Python-Skript mit pyserial nutzen, um die Schnittstelle mit den korrekten Einstellungen zu öffnen.

    Wenn ich im seriellen Monitor der Arduino-IDE 0 oder 1 sende, dann funktioniert es. Also auch mit dem Sketch weiter oben. Ist nur die Frage, wieso es nicht mit echo in der Konsole geht.....