Πώς να συνδέσετε μια διευθυνσιοδοτούμενη λωρίδα LED WS2812B σε ένα Arduino
Η ανάπτυξη της τεχνολογίας φωτισμού με LED συνεχίζεται με γοργούς ρυθμούς. Μέχρι χθες, οι RGB κορδέλες που ελέγχονται από χειριστήριο και η φωτεινότητα και το χρώμα τους μπορούν να ρυθμιστούν με τηλεχειριστήριο έμοιαζαν με θαύμα. Σήμερα, υπάρχουν νέα φωτιστικά στην αγορά με ακόμη περισσότερες δυνατότητες.
Λωρίδα LED με βάση το WS2812B
Οι διαφορές μεταξύ των διευθυνσιοδοτούμενων ταινιών LED και των τυπικών RGB είναι η Η φωτεινότητα και η αναλογία χρωμάτων κάθε στοιχείου ρυθμίζονται ξεχωριστά. Αυτό καθιστά δυνατή την επίτευξη εφέ φωτισμού που δεν είναι διαθέσιμα για άλλους τύπους φωτιστικών σωμάτων. Η διευθυνσιοδοτούμενη λωρίδα LED ελέγχεται με τον γνωστό τρόπο - μέσω διαμόρφωσης πλάτους παλμού. Ένα χαρακτηριστικό του συστήματος είναι ότι κάθε LED είναι εξοπλισμένο με τον δικό του ελεγκτή PWM. Το τσιπ WS2812B είναι μια τρίχρωμη δίοδος φωτοεκπομπής και ένα κύκλωμα ελέγχου, συνδυασμένα σε μία συσκευασία.
Τα στοιχεία συνδέονται παράλληλα με την παροχή ρεύματος και ελέγχονται μέσω ενός σειριακού διαύλου - η έξοδος του πρώτου στοιχείου συνδέεται με την είσοδο ελέγχου του δεύτερου στοιχείου κ.λπ. Στις περισσότερες περιπτώσεις, οι σειριακοί δίαυλοι βασίζονται σε δύο γραμμές, η μία εκ των οποίων μεταδίδει παλμούς ρολογιού (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
Για να δημιουργήσετε συστήματα φωτισμού με διευθυνσιοδοτούμενες κορδέλες πρέπει να γνωρίζετε τις σημαντικές παραμέτρους των στοιχείων εκπομπής φωτός.
Διαστάσεις LED | 5x5 mm |
Συχνότητα διαμόρφωσης PWM | 400 Hz |
Κατανάλωση ρεύματος στη μέγιστη φωτεινότητα | 60mA ανά στοιχείο |
Τάση τροφοδοσίας | 5 βολτ |
Arduino και WS2812B
Η παγκοσμίως δημοφιλής πλατφόρμα Arduino επιτρέπει τη δημιουργία σκίτσων (προγραμμάτων) για τον έλεγχο των διευθυνσιοδοτούμενων ταινιών. Οι δυνατότητες του συστήματος είναι αρκετά ευρείες, αλλά αν σε κάποιο επίπεδο δεν είναι πλέον επαρκείς, οι δεξιότητες που αποκτώνται θα είναι αρκετές για την απρόσκοπτη μετάβαση σε C++ ή ακόμη και σε assembler. Αν και είναι ευκολότερο να αποκτήσετε τις βασικές γνώσεις από το Arduino.
Σύνδεση μιας κορδέλας με βάση το WS2812B σε ένα Arduino Uno (Nano)
Αρχικά, αρκεί μια απλή πλακέτα Arduino Uno ή Arduino Nano. Αργότερα, μπορούν να χρησιμοποιηθούν πιο σύνθετες πλακέτες για την κατασκευή πιο πολύπλοκων συστημάτων. Κατά τη φυσική σύνδεση της διευθυνσιοδοτούμενης λωρίδας LED με την πλακέτα Arduino, πρέπει να βεβαιωθείτε ότι πληρούνται ορισμένες προϋποθέσεις:
- Λόγω της χαμηλής ανοχής σε θόρυβο, οι αγωγοί σύνδεσης της γραμμής δεδομένων πρέπει να είναι όσο το δυνατόν πιο κοντοί (προσπαθήστε να είναι εντός 10 cm),
- Συνδέστε τη γραμμή δεδομένων σε μια ελεύθερη ψηφιακή έξοδο της πλακέτας Arduino - θα υποδειχθεί αργότερα από το λογισμικό,
- Λόγω της υψηλής κατανάλωσης ενέργειας, δεν είναι απαραίτητο να τροφοδοτείται η ταινία από την πλακέτα - για το σκοπό αυτό παρέχονται ξεχωριστά τροφοδοτικά.
Πρέπει να συνδεθεί η κοινή γραμμή τροφοδοσίας μεταξύ της ταινίας και του 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),
Μετά τη μεταγλώττιση και τη φόρτωση του σκίτσου, η κορδέλα θα αναβοσβήνει για 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),
Μάθημα βίντεο: Δείγματα οπτικών εφέ με χρήση διευθυνσιοδοτούμενων ταινιών.
Αφού μάθετε πώς να αναβοσβήνετε LED, μπορείτε να συνεχίσετε να μαθαίνετε πώς να δημιουργείτε εφέ χρωμάτων, όπως το δημοφιλές Ουράνιο Τόξο και το Βόρειο Σέλας με ομαλές μεταβάσεις. Οι διευθυνσιοδοτούμενες λυχνίες LED του WS2812B και του Arduino παρέχουν σχεδόν απεριόριστες δυνατότητες για το σκοπό αυτό.