ElectricianExp.com
Πίσω

Πώς να συνδέσετε μια διευθυνσιοδοτούμενη λωρίδα LED WS2812B σε ένα Arduino

Δημοσιεύθηκε: 02.08.2021
0
2578

Η ανάπτυξη της τεχνολογίας φωτισμού με LED συνεχίζεται με γοργούς ρυθμούς. Μέχρι χθες, οι RGB κορδέλες που ελέγχονται από χειριστήριο και η φωτεινότητα και το χρώμα τους μπορούν να ρυθμιστούν με τηλεχειριστήριο έμοιαζαν με θαύμα. Σήμερα, υπάρχουν νέα φωτιστικά στην αγορά με ακόμη περισσότερες δυνατότητες.

Λωρίδα LED με βάση το WS2812B

Οι διαφορές μεταξύ των διευθυνσιοδοτούμενων ταινιών LED και των τυπικών RGB είναι η Η φωτεινότητα και η αναλογία χρωμάτων κάθε στοιχείου ρυθμίζονται ξεχωριστά. Αυτό καθιστά δυνατή την επίτευξη εφέ φωτισμού που δεν είναι διαθέσιμα για άλλους τύπους φωτιστικών σωμάτων. Η διευθυνσιοδοτούμενη λωρίδα LED ελέγχεται με τον γνωστό τρόπο - μέσω διαμόρφωσης πλάτους παλμού. Ένα χαρακτηριστικό του συστήματος είναι ότι κάθε LED είναι εξοπλισμένο με τον δικό του ελεγκτή PWM. Το τσιπ WS2812B είναι μια τρίχρωμη δίοδος φωτοεκπομπής και ένα κύκλωμα ελέγχου, συνδυασμένα σε μία συσκευασία.

Πώς να συνδέσετε τη διευθυνσιοδοτούμενη λωρίδα LED WS2812B στο Arduino
Εξωτερική άποψη του LED με τον οδηγό.

Τα στοιχεία συνδέονται παράλληλα με την παροχή ρεύματος και ελέγχονται μέσω ενός σειριακού διαύλου - η έξοδος του πρώτου στοιχείου συνδέεται με την είσοδο ελέγχου του δεύτερου στοιχείου κ.λπ. Στις περισσότερες περιπτώσεις, οι σειριακοί δίαυλοι βασίζονται σε δύο γραμμές, η μία εκ των οποίων μεταδίδει παλμούς ρολογιού (strobes) και η άλλη δεδομένα.

Η εμφάνιση της διευθυνσιοδοτούμενης κορδέλας.
Η εμφάνιση της διευθυνσιοδοτούμενης κορδέλας.

Ο δίαυλος ελέγχου του WS2812B αποτελείται από μία γραμμή - χρησιμοποιείται για τη μεταφορά δεδομένων. Τα δεδομένα κωδικοποιούνται ως παλμοί με σταθερή συχνότητα αλλά με διαφορετικές συχνότητες. Ένας παλμός είναι ένα bit.. Η διάρκεια κάθε bit είναι 1,25 µs, το µηδενικό bit αποτελείται από ένα υψηλό επίπεδο 0,4 µs και ένα χαµηλό επίπεδο 0,85 µs. Η µονάδα εµφανίζεται ως υψηλό επίπεδο 0,8µs και ως χαµηλό επίπεδο 0,45µs. Ένα πακέτο 24 bit (3 bytes) αποστέλλεται σε κάθε LED, ακολουθούμενο από μια παύση ως χαμηλή στάθμη για 50 μs. Αυτό σημαίνει ότι τα δεδομένα για την επόμενη λυχνία LED θα μεταδοθούν στη συνέχεια, και ούτω καθεξής για όλα τα στοιχεία της αλυσίδας. Η μεταφορά δεδομένων ολοκληρώνεται με μια παύση 100 μs. Αυτό σημαίνει ότι ο κύκλος προγραμματισμού της κορδέλας έχει ολοκληρωθεί και μπορεί να αποσταλεί το επόμενο σύνολο πακέτων δεδομένων.

Δεδομένα ελέγχου για τη διευθυνσιοδοτούμενη κορδέλα.
Δεδομένα για τον έλεγχο της ταινίας διεύθυνσης.

Αυτό το πρωτόκολλο επιτρέπει την κατάργηση μιας μόνο γραμμής για τη μεταφορά δεδομένων, αλλά απαιτεί ακριβή χρονισμό. Επιτρέπεται απόκλιση έως 150 ns. Επιπλέον, η ανοχή του διαύλου αυτού στον θόρυβο είναι πολύ χαμηλή. Οποιαδήποτε παρεμβολή επαρκούς πλάτους μπορεί να ληφθεί από τον ελεγκτή ως δεδομένο. Αυτό θέτει περιορισμούς στα μήκη των αγωγών από το κύκλωμα ελέγχου. Από την άλλη πλευρά, παρέχει τη δυνατότητα για να ελέγξετε τη σωστή λειτουργία του ιμάντα χωρίς πρόσθετες συσκευές. Εάν εφαρμοστεί ρεύμα στο φωτιστικό και ένα δάχτυλο αγγίξει την περιοχή επαφής του διαύλου ελέγχου, ορισμένες λυχνίες LED ενδέχεται να ανάψουν και να σβήσουν τυχαία.

Τεχνικά χαρακτηριστικά των στοιχείων WS2812B

Για να δημιουργήσετε συστήματα φωτισμού με διευθυνσιοδοτούμενες κορδέλες πρέπει να γνωρίζετε τις σημαντικές παραμέτρους των στοιχείων εκπομπής φωτός.

Διαστάσεις LED5x5 mm
Συχνότητα διαμόρφωσης PWM400 Hz
Κατανάλωση ρεύματος στη μέγιστη φωτεινότητα60mA ανά στοιχείο
Τάση τροφοδοσίας5 βολτ
Συμβουλές εμπειρογνωμόνων
Η κατανάλωση ενέργειας του φωτιστικού είναι μάλλον υψηλή. Καθορίζεται όχι μόνο από το ρεύμα που απαιτείται για την έναρξη της πυράκτωσης της ένωσης p-n, αλλά και από τις απώλειες μεταγωγής κατά τη διαμόρφωση PWM. Για ένα φωτιστικό σώμα 15 στοιχείων, το τροφοδοτικό και οι αγωγοί είναι σχεδιασμένοι για ρεύμα τουλάχιστον 1 αμπέρ.

Arduino και WS2812B

Η παγκοσμίως δημοφιλής πλατφόρμα Arduino επιτρέπει τη δημιουργία σκίτσων (προγραμμάτων) για τον έλεγχο των διευθυνσιοδοτούμενων ταινιών. Οι δυνατότητες του συστήματος είναι αρκετά ευρείες, αλλά αν σε κάποιο επίπεδο δεν είναι πλέον επαρκείς, οι δεξιότητες που αποκτώνται θα είναι αρκετές για την απρόσκοπτη μετάβαση σε C++ ή ακόμη και σε assembler. Αν και είναι ευκολότερο να αποκτήσετε τις βασικές γνώσεις από το Arduino.

Σύνδεση μιας κορδέλας με βάση το WS2812B σε ένα Arduino Uno (Nano)

Αρχικά, αρκεί μια απλή πλακέτα Arduino Uno ή Arduino Nano. Αργότερα, μπορούν να χρησιμοποιηθούν πιο σύνθετες πλακέτες για την κατασκευή πιο πολύπλοκων συστημάτων. Κατά τη φυσική σύνδεση της διευθυνσιοδοτούμενης λωρίδας LED με την πλακέτα Arduino, πρέπει να βεβαιωθείτε ότι πληρούνται ορισμένες προϋποθέσεις:

  • Λόγω της χαμηλής ανοχής σε θόρυβο, οι αγωγοί σύνδεσης της γραμμής δεδομένων πρέπει να είναι όσο το δυνατόν πιο κοντοί (προσπαθήστε να είναι εντός 10 cm),
  • Συνδέστε τη γραμμή δεδομένων σε μια ελεύθερη ψηφιακή έξοδο της πλακέτας Arduino - θα υποδειχθεί αργότερα από το λογισμικό,
  • Λόγω της υψηλής κατανάλωσης ενέργειας, δεν είναι απαραίτητο να τροφοδοτείται η ταινία από την πλακέτα - για το σκοπό αυτό παρέχονται ξεχωριστά τροφοδοτικά.

Πρέπει να συνδεθεί η κοινή γραμμή τροφοδοσίας μεταξύ της ταινίας και του Arduino.

Διάγραμμα καλωδίωσης WS2812B.
Διάγραμμα συνδεσμολογίας της λωρίδας WS2812B.

Διαβάστε επίσης

Πώς να συνδέσετε το LED στην πλακέτα Arduino

 

Βασικές αρχές ελέγχου λογισμικού WS2812B

Έχει ήδη αναφερθεί ότι για τον έλεγχο του τσιπ WS2812B είναι απαραίτητη η παραγωγή παλμών συγκεκριμένου μήκους με μεγάλη ακρίβεια. Στη γλώσσα του Arduino υπάρχουν εντολές για τη δημιουργία σύντομων παλμών delayMicroseconds и micros. Το πρόβλημα είναι ότι η ανάλυση αυτών των εντολών είναι 4 μικροδευτερόλεπτα. Αυτό σημαίνει ότι δεν είναι δυνατόν να δημιουργηθούν χρονικές καθυστερήσεις με δεδομένη ακρίβεια. Είναι απαραίτητο να χρησιμοποιήσετε εργαλεία C++ ή Assembler. Ή είναι δυνατόν να ελέγξετε τη λωρίδα LED μέσω του Arduino με τη βοήθεια βιβλιοθηκών που έχουν δημιουργηθεί ειδικά για το σκοπό αυτό. Η εισαγωγή ξεκινά με το Blink, ένα πρόγραμμα που κάνει τα φωτοεκπέμποντα στοιχεία να αναβοσβήνουν.

FastLed .

Αυτή η βιβλιοθήκη είναι ευέλικτη. Εκτός από τη διευθυνσιοδοτούμενη κορδέλα, υποστηρίζει πολλές συσκευές, συμπεριλαμβανομένων των ελεγχόμενων από SPI κορδελών. Είναι πολύ ισχυρό.

Πρώτα πρέπει να συνδέσετε τη βιβλιοθήκη. Αυτό γίνεται πριν από το μπλοκ εγκατάστασης, και η συμβολοσειρά μοιάζει ως εξής:

#include .

Το επόμενο βήμα είναι η δημιουργία ενός πίνακα για την αποθήκευση των χρωμάτων κάθε διόδου εκπομπής φωτός. Θα έχει το όνομα strip και διάσταση 15 - με τον αριθμό των στοιχείων (είναι προτιμότερο να αναθέσετε μια σταθερά σε αυτή την παράμετρο).

Λωρίδα CRGB[15]

Στο μπλοκ ρυθμίσεων πρέπει να καθορίσετε τη ζώνη με την οποία θα λειτουργήσει το σενάριο:

void setup() {

FastLED.addLeds< WS2812B, 7, RGB>(strip, 15),

int g,

}

Η παράμετρος RGB ορίζει τη σειρά εναλλαγής των χρωμάτων, 15 σημαίνει τον αριθμό των LED, 7 είναι ο αριθμός της εξόδου που έχει ανατεθεί στον έλεγχο (είναι προτιμότερο να αναθέσετε μια σταθερά και στην τελευταία παράμετρο).

Το μπλοκ βρόχου ξεκινά με έναν βρόχο που γράφει διαδοχικά σε κάθε τμήμα του πίνακα Red (κόκκινη λάμψη):

for (g=0; g< 15;g++)

{strip[g]=CRGB::Red;}

Στη συνέχεια, ο παραγόμενος πίνακας αποστέλλεται στο φωτιστικό σώμα:

FastLED.show(),

Καθυστέρηση 1000 χιλιοστά του δευτερολέπτου (ένα δευτερόλεπτο):

delay(1000),

Στη συνέχεια, όλα τα στοιχεία μπορούν να απενεργοποιηθούν με τον ίδιο τρόπο, γράφοντας μαύρο χρώμα σε αυτά.

for (int g=0; g< 15;g++)

{strip[g]=CRGB::Black;}

FastLED.show(),

delay(1000),

Σκίτσο για ταινία που αναβοσβήνει με βάση το FastLed.
Ένα σκίτσο για μια λωρίδα αναβοσβήνει με βάση το FastLed.

Μετά τη μεταγλώττιση και τη φόρτωση του σκίτσου, η κορδέλα θα αναβοσβήνει για 2 δευτερόλεπτα. Αν θέλετε να ελέγχετε κάθε στοιχείο χρώματος ξεχωριστά, τότε αντί για το string {strip[g]=CRGB::Red;} χρησιμοποιούνται πολλαπλές συμβολοσειρές:

{

strip[g].r=100;// ρυθμίστε το επίπεδο φωταύγειας του κόκκινου στοιχείου

strip[g].g=11;// το ίδιο για το πράσινο

strip[g].b=250;// το ίδιο για το μπλε

}

NeoPixel

Αυτή η βιβλιοθήκη λειτουργεί μόνο με NeoPixel Ring LEDs, αλλά είναι λιγότερο απαιτητική σε πόρους και περιέχει μόνο τα βασικά. Σε γλώσσα Arduino το πρόγραμμα μοιάζει ως εξής:

#include .

Όπως και στην προηγούμενη περίπτωση, η βιβλιοθήκη συμπεριλαμβάνεται και το αντικείμενο lenta δηλώνεται:

Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Όπου 15 είναι ο αριθμός των στοιχείων και 6 είναι η εκχωρημένη έξοδος.

Η lenta αρχικοποιείται στο μπλοκ εγκατάστασης:

void setup() {

lenta.begin ()

}

Στο μπλοκ βρόχου όλα τα στοιχεία ανάβουν με κόκκινο χρώμα, μια μεταβλητή περνάει στην ταινία και δημιουργείται μια καθυστέρηση 1 δευτερολέπτου:

for (int y=0; y<15;y++)// 15 - αριθμός στοιχείων στο lenta

{lenta.setPixelColor(y, lenta.Color(255,0,0,0))},

{lenta.show(),

delay(1000),

Η lenta σταματά να λάμπει με μαύρο χρώμα:

for (int y=0; y< 15;y++)

{ lenta.setPixelColor(y, lenta.Color(0,0,0))},

lenta.show(),

delay(1000),

Σκίτσο για το πρόγραμμα Blink που βασίζεται στο NeoPixel.
Ένα σκίτσο για το πρόγραμμα Blink που βασίζεται στο NeoPixel.

Μάθημα βίντεο: Δείγματα οπτικών εφέ με χρήση διευθυνσιοδοτούμενων ταινιών.

Αφού μάθετε πώς να αναβοσβήνετε LED, μπορείτε να συνεχίσετε να μαθαίνετε πώς να δημιουργείτε εφέ χρωμάτων, όπως το δημοφιλές Ουράνιο Τόξο και το Βόρειο Σέλας με ομαλές μεταβάσεις. Οι διευθυνσιοδοτούμενες λυχνίες LED του WS2812B και του Arduino παρέχουν σχεδόν απεριόριστες δυνατότητες για το σκοπό αυτό.

Σχόλια:
Δεν υπάρχουν ακόμα σχόλια. Γίνε ο πρώτος!

Συμβουλές για την ανάγνωση

Πώς να επισκευάσετε το φωτιστικό LED μόνοι σας