Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Arduino Lektion 31: 12bit RGB NeoPixel Ring

Posted on 26. Juni 201716. August 2024 by Stefan Draeger

Ein Pixel Ring ist, wie die Bezeichnung es erahnen lässt, ein Ring aus eine Anzahl n NeoPixel. Es gibt diese Ringe in diversen Ausführungen. In diesem Beispiel möchte ich gerne den „12bit RGB NeoPixel Ring“ vorstellen.

12bit NeoPixel Ring Ansicht vorne
12bit NeoPixel Ring Ansicht vorne

Auf der Rückseite sind die Anschlüsse für die Verbindung zum Arduino (IN) bzw. zu einem weiteren Ring (OUT) vorhanden.

Betreibt man mehrere Ringe hintereinander, ist dabei die maximale Stromstärke, welche der Arduino Mikrocontroller am 5V Ausgang anbietet, zu beachten, der Arduino UNO liefert am 5V PIN max. 200mA.

12bit NeoPixel Ring Ansicht hinten
12bit NeoPixel Ring Ansicht hinten

Als Erstes müssen also nun die drei Leitungen für Strom & Daten an den Ring gelötet werden, ich nutze dafür Breadboardkabel, da diese gleich mit passendem Stecker für den Arduino UNO geliefert werden.

Breadboardkabel am 12bit NeoPixel Ring
Breadboardkabel am 12bit NeoPixel Ring

  • Bezugsquellen
  • Bauformen
  • Technische Daten
  • Schaltplan
  • Quellcode
    • Ein einfaches Beispiel
      • Video
    • Ein Kompass mit dem 3 Achsen Lagesensor HMC5883L
      • Aufbau
      • Wichtig
      • Quellcode
      • Video
  • Downloads
  • Fazit

Bezugsquellen

Ein NeoPixel Ring wird in diversen Onlineportalen angeboten. Auf der Plattform ebay.de* habe ich den günstigsten Preis gesehen und „zugeschlagen“. Die Lieferzeit war mit ca. 2 Wochen relativ kurz und sehr verträglich, des Weiteren hatte der Preis von 1,77 € inkl. kostenlosem Versand für zusätzlichen Reiz gesorgt.

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Bauformen

Es gibt die NeoPixel einzeln als Ring, Stripe und Board, somit sind den Ideen für eigene Entwicklungen keine Grenzen gesetzt.

16bitNeoPixelBoard & 12bitNeoPixelRing
16bitNeoPixelBoard & 12bitNeoPixelRing

Technische Daten

  • Durchmesser 38 mm
  • Gewicht ca. 3,3 g
  • Spannung 5V

Schaltplan

Der 12bit NeoPixel Ring verfügt über 3 PINs welche mit IN, VCC und GND bezeichnet sind. Diese PINs werden wie folgt am Arduino UNO angeschlossen.

12bit NeoPixel RingArduino UNO
 IN digital PIN 8*
 VCC 5V
 GND GND

*Der digitale PIN kann natürlich frei gewählt werden, sollte aber dann im Quellcode angepasst werden.

Quellcode

Ein einfaches Beispiel

Für den Betrieb des 12bit NeoPixel Ring wird eine Bibliothek bereitgestellt, diese kann im GitHub Repository von Adafruit heruntergeladen werden. Nachdem also nun die Bibliothek heruntergeladen und installiert wurde, kann mit dem Quellcode begonnen werden.

Im Nachfolgenden werde ich der kürze halber den „12bit NeoPixel Ring“ nur noch als Ring bezeichnen.

Als Erstes muss natürlich die Bibliothek eingebunden werden, dazu wird in die erste Zeile das Include geschrieben:

#include <Adafruit_NeoPixel.h>

Im nächsten Schritt muss nun noch definiert werden, auf welchem PIN der Ring angeschlossen wurde:

#define PIN 8

Sollte der Ring also an einer anderen PIN angeschlossen, muss dieses hier angepasst werden.

Zusätzlich wird jetzt eine Variable definiert wie viele NeoPixel der Ring hat, dadurch kann dieses Beispiel ganz leicht für andere Ringe Bsp. mit 16 oder 24 NeoPixel abgewandelt werden.

int numPixels = 12;

Nun müssen wir das Adafruit_NeoPixel Objekt initialisieren, dazu werden folgende Parameter erwartet:

  • Anzahl der NeoPixel,
  • PIN an welchem der Ring angeschlossen wurde,
  • Pixel Typ
    • NEO_GRB  – GRB bitstream
    • NEO_RGB  – RGB bitstream
    • NEO_KHZ800 – 800 KHz
    • NEO_KHZ400 – 400 KHz
Adafruit_NeoPixel strip = Adafruit_NeoPixel(numPixels, PIN, NEO_GRB + NEO_KHZ800);

Nun folgt auch schon die Setup Funktion, in welcher die Grundeinstellungen gesetzt werden.

void setup() {
  strip.begin();
  strip.setBrightness(50); //die Helligkeit setzen 0 dunke -> 255 ganz hell
  strip.show(); // Alle NeoPixel sind im Status "aus".
}

In der Loop Funktion, welche die gesamte Laufzeit des Arduinos ausgeführt wird, kommt nun der Farbwechsel pro NeoPixel hinzu. In diesem Beispiel sollen alle NeoPixel für 1 Sek. in der Farbe Rot aufleuchten und dann nach Grün wechseln.

uint32_t red = strip.Color(255, 0, 0); //RGB Farbe Rot
uint32_t green = strip.Color(0, 255, 0); //RGB Farbe Grün
 
void loop() {  
 for(uint16_t i=0; i<strip.numPixels(); i++) { //Für jeden NeoPixel
      strip.setPixelColor(i, red); // Farbe Rot setzen
      strip.show(); //Anzeigen
      delay(1000); //Warten von 1 sek.
      strip.setPixelColor(i, green); //Farbe Grün setzen 
      strip.show(); //Anzeigen
      //Wenn noch NeoPixel folgen dann den Wert "i" um 1 erhöhen und von vorne beginnen wenn nicht Schleife beenden.
  }
  //Weiter zum Anfang der Loop Funktion.
}

Video

12bit NeoPixel Ring
Dieses Video auf YouTube ansehen.

Ein Kompass mit dem 3 Achsen Lagesensor HMC5883L

Den 3 Achsen Lagesensor habe ich Tutorial Arduino Lektion 14: 3 Achsen Lagesensor, HMC5883L ausgiebig beschrieben daher möchte ich auf diesen Sensor nicht im Speziellen eingehen.

Ziel dieses kleinen Projektes soll es sein ein 3 Achsen Lagesensor, als Kompass zu benutzen, es soll dabei der Norden mit einem Roten NeoPixel markiert werden, die restlichen NeoPixel sollen in der Farbe Grün aufleuchten.

Dieses ist nur ein Beispiel und kann gewiss keinen Kompass ablösen!

Benötigte Komponenten:

  • Arduino UNO, (oder vergleichbares)
  • 170 PIN Breadboard,
  • 3 Achsen Sensor HMC5883L,
  • 6 Breadboardkabel
    • 4 Breadboard Kabel für den 3 Achsen Sensor,
    • 2 Breadboardkabel für die Stromversorgung
  • 12bit NeoPixel Ring

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Aufbau

Da der 12bit NeoPixel Ring nur über 12 LEDs verfügt ergibt dieses eine Auflösung 30° das ist in der Praxis natürlich nicht verwendbar jedoch als kleines Beispiel völlig ausreichend.

ModulPINArduino UNO
12bit NeoPixel RingINdigital PIN 8
VCC5V
GNDGND
HMC5883LVCC5V
GNDGND
SCLanalog PIN 5
SDAanalog PIN 4
Einfacher Kompass mit 3Achsen Lagesensor & 12bit NeoPixel Ring
Einfacher Kompass mit 3Achsen Lagesensor & 12bit NeoPixel Ring

Wichtig

Es sind 12 NeoPixel in dem Ring, gezählt wird aber von 0 bis 11, d.h. wenn man das NeoPixel an der Position 1 aktivieren bzw. verändern möchte, muss man die Position 0 ansprechen.

Quellcode

#include <Adafruit_NeoPixel.h>
#include <Wire.h> //I2C Arduino Bibliothek

#define address 0x1E //0011110b, I2C 7Bit Adresse des HMC5883 Chips
#define PIN 8
 
int x; //X Achse
int y; //Y Achse
int z; //Z Achse

int numPixels = 12;

Adafruit_NeoPixel strip = Adafruit_NeoPixel(numPixels, PIN, NEO_GRB + NEO_KHZ800);

uint32_t red = strip.Color(255, 0, 0); //RGB Farbe Rot
uint32_t green = strip.Color(0, 255, 0); //RGB Farbe Grün

void setup() {
  strip.begin();
  strip.setBrightness(5); //die Helligkeit setzen 0 dunke -> 255 ganz hell
  drawGreenRing();

  Serial.begin(9600); //Baudrate
  Wire.begin();
  Wire.beginTransmission(address); //Beginnen der Kommunikation über die Adresse, für das setzen der Konfiguration
  Wire.write(0x02); //select mode register
  Wire.write(0x00); //Modus für das fortlaufende lesen der Werte.
  Wire.endTransmission(); //Beenden der Kommunikation.  
}
 
void loop() {  
 drawGreenRing();
 float northDirection = getNorthDirection();
 int northNeoPixel =  calcNorthNeoPixel(northDirection);
 northNeoPixel = (numPixels-1) - northNeoPixel;
 
 if(northNeoPixel<0){
  northNeoPixel = northNeoPixel *(-1);
 }
 
 strip.setPixelColor(northNeoPixel, red); 
 strip.show();
 delay(1000);
}

//Berechnet aus dem Winkel die Position des NeoPixels.
int calcNorthNeoPixel(float northDirection){
  int result = 0;
  int steps = 360 / numPixels;
  if(northDirection > 0 && northDirection < steps){
    result = 0;
  } else {
    result = northDirection / steps;  
  }
  return result;
}

//Setzt alle NeoPixel in die Farbe Grün.
void drawGreenRing(){
  for(uint16_t i=0; i<strip.numPixels(); i++){
    strip.setPixelColor(i, green); 
  }
  strip.show(); //Anzeigen
}

//Liefert den Winkel in Richtung Norden.
float getNorthDirection(){
  float northDegrees = 0;
  Wire.beginTransmission(address); //Beginnen der Kommunikation
  Wire.write(0x03); //select register 3, X MSB register
  Wire.endTransmission(); //Beenden der Kommunikation
  
  //Lesen der Daten vom 6 fach Register (2 Register pro Achse)
  Wire.requestFrom(address, 6);
  if(6<=Wire.available()){
    x = Wire.read()<<8; //X msb
    x |= Wire.read(); //X lsb
    z = Wire.read()<<8; //Z msb
    z |= Wire.read(); //Z lsb
    y = Wire.read()<<8; //Y msb
    y |= Wire.read(); //Y lsb

    float heading = atan2(y, x);
    
    //Je nach Position auf der Erde muss hier ggf. 
    //eine Anpassung der Deklination geschehen.
    float declinationAngle = 0.22;
    heading += declinationAngle;
  
    if(heading < 0){
      heading += 2*PI;
    }
   
    if(heading > 2*PI){
      heading -= 2*PI;
    }
    
    northDegrees = heading * 180/M_PI; 
  }

  return northDegrees;
}

Video

Arduino Kompass mit 12bit NeoPixel Ring & 3 Achsen Lagesensor (HMC5338L)
Dieses Video auf YouTube ansehen.

Downloads

Arduino Lektion 31: 12bit RGB NeoPixel Ring – einfaches BeispielHerunterladen
Arduino Lektion 31: 12bit RGB NeoPixel Ring – KompassHerunterladen

Fazit

Beim Experimentieren mit dem 12bit NeoPixel Ring ist mir aufgefallen, das dieser einen defekten NeoPixel hat, das dieses Mal vorkommen kann und bei einem Preis von 1,77 € inkl. Versandkosten dieses in China als Massenware produziert wird ist dann auch klar. Aber die Helligkeit ist sehr gut, in den Videos musste ich den Wert „5“ für die Helligkeit wählen, da sonst die Kamera damit nicht zurechtkommen würde. Ansonsten ist dieser Ring bzw. das Board sehr gut verarbeitet und hat sonst keine nennbare Mängel.

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}