beckhoff ->RGBW Neopixel 12V oder 24V ? -> com zu arduino oder raspberry how2doit?

fhartmann

Level-2
Beiträge
44
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
beckhoff ->RGBW Neopixel 12V oder 24V ? -> com zu arduino oder raspberry how2doit?

Hallo

Mein Ziel ist es 16m (beispiel: https://www.adafruit.com/product/2842 ) RDBW LED Streifen jeden einzelnen DOT individuell eine Id zu geben und RGBW entsprechend frei einstellbar zu regeln, und dies natürlich von meiner bereits vorhandenen Infrastruktur. na ja etwas erweitern da komm ich nicht drum rum...doch habe momentan keinen ansatz wie ich das realisieren soll oder es bei einem wunsch belassen soll.

Ich hab mich nun endlich mit den Arduino und raspberry pi sw auseinandergesetzt und dabei festgestellt das es coole funktionen gibt bei denen man auf einem LED Strip einzelne LED`s ansteuern und auch scenen wie lauflicht etc programmieren kann. Leider jedoch 3.3 oder 5v je nach dem. ebenfalls festgestellt das es nur bis 12 V digitale LED streifen gibt welche jedes einzelne pixel ansteuern kann, dies zwar mit einem level up converter auch von einem arduino ohne grösseren aufwand betrieben werden kann.

Nun zu meiner Frage: gibt es Möglichkeiten bei dem über eine Beckhoffsteuerung LED streifen die einzelnen RGBW dots mit einem Digitalen Signal frei programmiert werden können. Hat jemand eine idee wie es realisierbar wäre ohne sich stundenlang an den Lötkolben zu setzen? mit 12VDC könnte ich leben bevorzuge jedoch 24VDC ? Speisung der RGBW streifen mit "Digital bus Signal" wie zum beispiel der Arduino es macht. z.b. https://www.adafruit.com/product/2842
Hat jemand so etwas bereits realisiert?

Folgende Infrastruktur habe ich zur verfügung und funktioniert im Haus auch ganz ok.
Beckhoff Controller CX9020, --> Twincat 2.11 und einem microwebserver den ich mit spider Control für die visu verwende.
-> KL-DigIn/Out KL-AnalogIn/Out klemmen ; Busklemmen Enocean und Dali
-> Enocean brauche ich vorallem für die schalter und melder bei denen ich kein zusatzrohr für kabel ziehen wollte
-> DALI für die LED streifen welche ich für scenen benötige. Das ganze ist auf 24VDC ausgelegt das ich nicht gerne dicke CU leitungen im haus ziehe.

Vielen Dank für ideen und ansätze im Voraus

gruss
 
Guten Morgen,

Wirklich viel kann ich dir da nicht (noch nicht) helfen.
Habe etwas ganz ähnliches vor. Mein Testaufbau beschränkt sich derzeit auf einen Arduino und ein paar Meter LED Streifen. Das ansteuern mit den Sketchen funktioniert.
Mein Ansatz ist jetzt den Arduino ins Netzwerk zu holen und ihm darüber zu sagen welche LED gerade was machen sollen. Ob der Befehl jetzt direkt über die Beckhof kommen kann ? Bin mir da nicht sicher. Aber habe hier sowieso einen Raspi am laufen auf dem IOBroker läuft. Wenn es irgendwie geht dann sicher so.
Habe einen Bekannten der bei dem Thema recht Fit ist doch ist der zzt unterwegs. Daher sage ich mal wenn du Ansätze hast lass uns mal gucken ob man das zusammen hin bekommt.

Besten Gruß
 
Hallo,
an den 5V kommst Du vermutlich nicht vorbei, dazu musst Du bei 16m auch zwischen einspeisen sonnst wird es ziemlich dunkel.
Würde auch auf die WS2812B (NEOPIXEL) Variante der LED-Streifen setzen, das ist im der aus Deinem ersten Link, dies ist kein Exot und leicht zu beschaffen.

Die Ansteuerung würde ich einem Arduino anvertrauen und entweder per Ethernet oder Seriel die Kommunikation zwischen der Beckhoff SPS und dem Arduino aufbauen.
Zwischen einer S7-1500 -> Arduino-Mega mit Ethernet-Schild -> LED-Streifen habe ich dies genau so gehandhabt.
 
Hallo,
an den 5V kommst Du vermutlich nicht vorbei, dazu musst Du bei 16m auch zwischen einspeisen sonnst wird es ziemlich dunkel.
Würde auch auf die WS2812B (NEOPIXEL) Variante der LED-Streifen setzen, das ist im der aus Deinem ersten Link, dies ist kein Exot und leicht zu beschaffen.

Die Ansteuerung würde ich einem Arduino anvertrauen und entweder per Ethernet oder Seriel die Kommunikation zwischen der Beckhoff SPS und dem Arduino aufbauen.
Zwischen einer S7-1500 -> Arduino-Mega mit Ethernet-Schild -> LED-Streifen habe ich dies genau so gehandhabt.

Kannst du mal ein wenig mehr dazu erzählen ?
Hast du den Sketch fertig hergenommen oder selber erstellt ?
Wie „spricht“ die S7 den Ardurino an ? Also welches Protokoll ? Das ist ja an sich genau das was wir beiden zzt Vorhaben..

Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kurz:
Den Sketch habe ich selbst erstellt.. na ja, eher zusammengestellt. Es sind folgende Bibliotheken eingebunden Ethernet2.h, SPI.h, Adafruit_NeoPixel.h und aus deren Beispielen habe ich mein Programm zusammen kopiert.

Arduino Sketch lauscht auf UDP-Port und empfängt da 6 Int Werte (12 Byte) an Daten.
1. Kommando 1->Set Pixel 2. Show Pixel und dann Kommandos für Lauflichter usw.
2. Position des 1. LEDs das ich ansprechen möchte
3. Länge oder anzahl der LEDs die ich beschreiben möchte
4. R rote Anteil
5. G grüne Anteil
6. B blauber Anteil

Für die letzten drei Werte hätte mir je ein Byte gereicht, aber da ich ein Array verwendet habe, war es so einfacher.

Der Ablauf ist auf der Arduino Seite also wie folgt wenn ein Befehl per UDP kommt speicher es in einem Array ab, wandel es in integer. Dann eine Case Verzweigung, die das Kommando interpretiert und dann ggf die Parameter verwendet um die NeoPixel Funktionen anzusprechen.

Im Sketch habe ich mehr LEDs angegeben als ich habe, die stören nicht. UDP habe ich genommen weil einfach ;) SPS Seitig schicke ich die Befehle immer und immer wieder zyklisch raus (muss ich da noch was zu schreiben?). Wenn der Arduino und/oder die Streifen ausgehen bekommen sie die Befehle neu.

Hier mal der gekürzte Code (ohne Sonderfunktionen, die verwirren hier nur).
Die ganzen Serial.print Ausgaben sind nicht wirklich erforderlich und dienen nur zur Kontrolle.

Testen kann man es übrigens gut ohne SPS, mit einem Terminalprogramm wie z.B. dem Hercules SETUP utility.


Code:
[FONT=Consolas]#include <SPI.h>       
#include <Ethernet2.h>
#include <Adafruit_NeoPixel.h>

#define PIN 2
#define NUMPIXELS 1000
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);


byte mac[] = {
  0x90, 0xA2, 0xDA, 0x10, 0xB1, 0xA6
};
IPAddress ip(192, 168, 0, 200);

unsigned int localPort = 2000;    

char packetBuffer[UDP_TX_PACKET_MAX_SIZE];  
char replyBuffer[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; 
byte workBuffer[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; 
int i;

int C,P,L,R,G,B = 0;
int Count = 0;


EthernetUDP Udp;

void setup() {
  Ethernet.begin(mac, ip);
  Udp.begin(localPort);

  Serial.begin(9600);
  
  pixels.begin();
}

void loop() {
  // if there's data available, read a packet
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    Count = 0;
    Serial.print(F("Received packet of size "));
    Serial.println(packetSize);
    Serial.print(F("From "));
    IPAddress remote = Udp.remoteIP();
    for (int i = 0; i < 4; i++) {
      Serial.print(remote[i], DEC);
      if (i < 3) {
        Serial.print(F("."));
      }
    }
    Serial.print(F(", port "));
    Serial.println(Udp.remotePort());

    // read the packet into packetBufffer
    Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
    Serial.print(F("Content: "));
    Serial.println(packetBuffer);
    
    for(i=0;i<=11;i++)
    {
      workBuffer[i] = replyBuffer[i] = packetBuffer[i];      
    }
    
    C = int(workBuffer[0] << 8) + int(workBuffer[1]);
    P = int(workBuffer[2] << 8) + int(workBuffer[3]);
    L = int(workBuffer[4] << 8) + int(workBuffer[5]);
    R = int(workBuffer[6] << 8) + int(workBuffer[7]);
    G = int(workBuffer[8] << 8) + int(workBuffer[9]);
    B = int(workBuffer[10] << 8) + int(workBuffer[11]);

    Serial.print(F("Command: "));
    Serial.print(C);
    Serial.print(F(","));
    Serial.print(P);
    Serial.print(F(","));
    Serial.print(L);
    Serial.print(F(","));
    Serial.print(R);
    Serial.print(F(","));
    Serial.print(G);
    Serial.print(F(","));
    Serial.print(B);
    Serial.println(F(";"));
    
    switch(C) {

    case 1: //LED SET 
      for(i=0;i<L;i++){
        pixels.setPixelColor(P+i, pixels.Color(R,G,B));
      }
    break;
    
    case 2: //LED SHOW 
       pixels.show();
       delay(2);
      for(int i=0;i<NUMPIXELS;i++){
        pixels.setPixelColor(i, pixels.Color(0,0,0));
      }       
    break;
     //Sonderbefehle könnten hier stehen 
    default:
     ;
    break;
    }
  }
  delay(2);
  Count++;
}[/FONT]
 
Hallo zusammen

danke schon mal im Voraus. es gibt wieder Testaufbauten und sonnenaufgänge hinter dem Monitor ;)

von Dr.MirakulixX
Mein Ansatz ist jetzt den Arduino ins Netzwerk zu holen und ihm darüber zu sagen welche LED gerade was machen sollen. Ob der Befehl jetzt direkt über die Beckhof kommen kann ? Bin mir da nicht sicher. Aber habe hier sowieso einen Raspi am laufen auf dem IOBroker läuft. Wenn es irgendwie geht dann sicher so.
Habe einen Bekannten der bei dem Thema recht Fit ist doch ist der zzt unterwegs. Daher sage ich mal wenn du Ansätze hast lass uns mal gucken ob man das zusammen hin bekommt.

einen oder mehrere arduino`s ins netz einbinden diesen Gedanken hatte ich auch schon, und scheint mir sinnvoll. ioBroke kenne ich nicht, kann somit nicht mehr dazu schreiben.

Wenn du keine zeitkritischen Lösungen brauchst, bin ich sofort dabei da etwas zusammen zu kopieren und Hardwaretest zu machen, Mein Ziel wäre es das ich der community eine komplette funktionierende Lösung bis ende 2019 präsentieren könnte, damit sich auch andere darüber freuen könnten. Doch neben familie, hausumbau, arbeit etc... soll der fun factor nicht durch zeit gebremmst werden.

von ​blackpeat
Hier steht drin wie das Protokoll theoretisch aussieht. Ich bin mir nicht sicher ob du diese schnellen Pulse mit den Standart IO Klemmen hin bekommst.
Nein ich denke auch das die Standart IO`s nicht mit der notwendigen Frequenz arbeiten, da bräuchte es vermutlich Fastoutputs, doch ich denke einen Arduino vor ein paar $ tuts auch und paar widerstände und condensatoren tuns auch. habe ganz kurz im netz gesucht und z.b. folgenden 12V streifen gefunden
https://www.aliexpress.com/item/-/32850903847.html?spm=a2g0s.13010208.99999999.260.78993c00AbhOnw
https://www.aliexpress.com/item/-/32849706081.html?spm=a2g0s.13010208.99999999.260.421f3c0054pCpy


Da brauche ich sicherlich einen DATA Verstärker, und verschiedene Einspeisepunkte.

@zotos vielen Dank für das teilen und groben erklähren deiner anwendung. Da denke ich mich mal rein, und habe nun eine Richtung.

bestelle mal so einen Ethernet shield für arduino, und probier mal die com zwischen Beckhoff und Arduino mit deinem program aus. es könnte sein das da noch das eine oder andere Problemchen auftritt und evtl. fragen stelle. ist das ok?

nochmalls Vielen Dank und weitere beträge sind willkommen :)

Liebe grüsse
 
Zuletzt bearbeitet:
Guten Abend.
Nein es ist keines Wegs Zeitkritisch. Habe da vor Wochen mit angefangen und bis auf ein paar kleine Mods in einem fertigen Sketch und unzähligen LED Spielereien habe ich ja noch gar nichts.
Werde jetzt auch erstmal ein LAN bzw WLAN Shield besorgen und dann testen.
Haben ja hier schon einige Gut erklärte Tipps bekommen [emoji4][emoji120]
In diesem Sinne wünsche ich einen guten Abend.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ioBroke kenne ich nicht, kann somit nicht mehr dazu schreiben.

Die Software heißt ioBroker und ist auf jeden Fall einen Blick wert.
Durch die Vielzahl der unterstützen Schnittstellen ist es interessant als Universalgateway.
Ebenfalls sehr gut geeignet, ist NodeRed.
Dinge wie die Kopplung zu Arduinos, Multimedia und Ähnlichen lassen sich damit recht einfach umsetzen.
Vieles kann man einfach grafisch im Webbrowser zusammenklicken.

Gruß
Blockmove
 
Ich nochmalls...

Hätte mir jemand ein beispiel oder die namen den benötigten fb die ich benötige um eine udp verbindung im tc 2 aufzusetzen um ein paar bytes(und oder) arrays an daten uber udp mit einem arduino uno, due oder mega auszutauschen kann.

Ethernet verbindungen in codesys ist für mich neuland.

Vielen herzlichen dank



Gesendet von iPhone mit Tapatalk
 
Zurück
Oben