lamp.housecope.com
Πίσω

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

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

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

Λωρίδα LED βασισμένη στο WS2812B

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

Πώς να συνδέσετε τη διευθυνσιοδοτούμενη ταινία LED WS2812B στο Arduino
Η εμφάνιση του LED με τον οδηγό.

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

Εμφάνιση της γραμμής διευθύνσεων.
Εμφάνιση της γραμμής διευθύνσεων.

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

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

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

Προδιαγραφές στοιχείων WS2812B

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

Διαστάσεις LED5x5mm
Συχνότητα διαμόρφωσης PWM400 Hz
Κατανάλωση ρεύματος στη μέγιστη φωτεινότητα60 mA ανά κύτταρο
Τάση τροφοδοσίας5 βολτ

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 για το σχηματισμό σύντομων παλμών καθυστέρησηΜικροδευτερόλεπτα και micros. Το πρόβλημα είναι ότι η ανάλυση αυτών των εντολών είναι 4 μικροδευτερόλεπτα. Δηλαδή, δεν θα λειτουργήσει ο σχηματισμός χρονικών καθυστερήσεων με δεδομένη ακρίβεια. Είναι απαραίτητο να μεταβείτε σε εργαλεία C ++ ή Assembler. Και μπορείτε να οργανώσετε τον έλεγχο της διευθυνσιοδοτούμενης ταινίας LED μέσω του Arduino χρησιμοποιώντας βιβλιοθήκες που έχουν δημιουργηθεί ειδικά για αυτό. Μπορείτε να ξεκινήσετε τη γνωριμία σας με το πρόγραμμα Blink, το οποίο κάνει τα στοιχεία εκπομπής φωτός να αναβοσβήνουν.

γρήγορο led

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

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

#include <FastLED.h>

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

Λωρίδα CRGB[15]

Στο μπλοκ εγκατάστασης, πρέπει να καθορίσετε με ποια ταινία θα λειτουργεί το σκίτσο:

void setup() {

FastLED.addLeds< WS2812B, 7, RGB>(λωρίδα, 15);

intg;

}

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

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

για (g=0; g< 15; g++)

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

Στη συνέχεια, ο σχηματισμένος πίνακας αποστέλλεται στη λάμπα:

FastLED.show();

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

καθυστέρηση (1000);

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

για (int g=0; g< 15; g++)

{strip[g]=CRGB::Μαύρο;}

FastLED.show();

καθυστέρηση (1000);

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

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

{

strip[g].r=100;// ορίστε το επίπεδο λάμψης του κόκκινου στοιχείου

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

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

}

NeoPixel

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

#include <Adafruit_NeoPixel.h>

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

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

Στο μπλοκ εγκατάστασης, η ταινία αρχικοποιείται:

void setup() {

lenta.begin()

}

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

για (int y=0; y<15; y++)// 15 - ο αριθμός των στοιχείων στη λάμπα

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

tape.show();

καθυστέρηση (1000);

Η λάμψη σταματά με έναν μαύρο δίσκο:

για (int y=0; y< 15; y++)

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

tape.show();

καθυστέρηση (1000);

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

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

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

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

Σας συμβουλεύουμε να διαβάσετε

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