Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

5 Mayıs 2021 Çarşamba

WS2812B NEOPIXEL Tek Tek Adreslenebilir LED'ler Arduino ile Nasıl Kontrol Edilir ?

 

WS2812B Tek Tek Adreslenebilir LED'ler Arduino ile Nasıl Kontrol Edilir ?

LED şeride daha yakından bir göz atarak başlayalım. Oldukça kompakt WS2812B LED sürücü IC'nin entegre edildiği tip 5050 RGB LED'lerden oluşur.


WS2812B LED Sürücü IC 5050 RGB LED

Üç ayrı Kırmızı, Yeşil ve Mavi LED'in yoğunluğuna bağlı olarak, istediğimiz herhangi bir rengi simüle edebiliriz.

WS2812B RGB LED'ler çalışır

Bu LED'lerin harika yanı, tüm LED şeridini bile Arduino kartımızdan tek bir pinle kontrol edebilmemizdir. Her LED'in her iki ucunda ikisi güç ve biri veriler için olmak üzere üç konektörü vardır. Ok, veri akış yönünü gösterir. Önceki LED'in veri çıkış pedi, sonraki LED'in Veri Giriş pedine bağlanır. Şeridi istediğimiz boyutta kesebiliriz, ayrıca bazı teller kullanarak LED'leri uzak tutabiliriz.


Güç vermeye gelince, 5V üzerinde çalışıyorlar ve her Kırmızı, Yeşil ve Mavi LED yaklaşık 20mA, yani tam parlaklıkta her LED için toplam 60mA çekiyor. Arduino'ya USB üzerinden güç verildiğinde, 5V pinin yalnızca 400 mA civarında işleyebileceğini ve namlu güç konektörü kullanılarak çalıştırıldığında 5V pinin yaklaşık 900 mA işleyebileceğini unutmayın.

Daha fazla LED kullanıyorsanız ve çekecekleri akım miktarı yukarıda belirtilen sınırları aşıyorsa, ayrı bir 5V güç kaynağı kullanmalısınız. Böyle bir durumda, iki Toprak hattını da birbirine bağlamanız gerekir. Ek olarak, bu hattaki gürültüyü azaltmak için Arduino ve LED şerit veri pini arasında yaklaşık 330 Ohm'luk bir direnç ve güç kaynağını yumuşatmak için 5V ve Ground boyunca yaklaşık 100 uF'lik bir kapasitör kullanılması önerilir. .

Arduino ve WS2812B LED Örnekleri

örnek 1

Şimdi bir örnek olarak, yukarıda açıklandığı gibi, Arduino'ya 330 Ohm'luk bir dirençle bağlanan ve ayrı bir 5V güç kaynağıyla çalışan 20 LED uzunluğunda şerit kullanacağım. Arduino'yu programlamak için FastLED kütüphanesini kullanacağız Bu, WS2812B LED'lerin kolay kontrolünü sağlayan mükemmel ve iyi belgelenmiş bir kitaplıktır.

İşte ilk örnek için Arduino kaynak kodu:
#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 20
CRGB ledleri [ NUM_LEDS ] ;
geçersiz kurulum () {
FastLED. addLeds < WS2812, LED_PIN, GRB > ( ledler, NUM_LEDS ) ;
}
geçersiz döngü () {
ledler [ 0 ] = CRGB ( 255, 0, 0 ) ;
FastLED. göster () ;
gecikme ( 500 ) ;
ledler [ 1 ] = CRGB ( 0, 255, 0 ) ;
FastLED. göster () ;
gecikme ( 500 ) ;
ledler [ 2 ] = CRGB ( 0, 0, 255 ) ;
FastLED. göster () ;
gecikme ( 500 ) ;
ledler [ 5 ] = CRGB ( 150, 0, 255 ) ;
FastLED. göster () ;
gecikme ( 500 ) ;
ledler [ 9 ] = CRGB ( 255, 200, 20 ) ;
FastLED. göster () ;
gecikme ( 500 ) ;
ledler [ 14 ] = CRGB ( 85, 60, 180 ) ;
FastLED. göster () ;
gecikme ( 500 ) ;
ledler [ 19 ] = CRGB ( 50, 255, 20 ) ;
FastLED. göster () ;
gecikme ( 500 ) ;
}

Açıklama:  Bu yüzden önce FastLED kitaplığını dahil etmemiz, LED şerit verilerinin bağlı olduğu pini tanımlamamız, LED sayısını tanımlamamız ve ayrıca bir CRGB türü dizisi tanımlamamız gerekir. Bu tür, üç Kırmızı, Yeşil ve Mavi renk kanalının her biri için üç bir baytlık veri üyeli LED'leri içerir.

Kurulum bölümünde, FastLED'i yukarıda tanımlanan parametrelerle başlatmamız yeterlidir. Artık ana döngü, LED'lerimizi istediğimiz şekilde kontrol edebiliyoruz. CRGB işlevini kullanarak herhangi bir LED'i Kırmızı, Yeşil ve Mavi renkten oluşan üç parametre kullanarak herhangi bir renge ayarlayabiliriz. LED'lerde değişikliğin gerçekleşmesi için FastLED.show () işlevini çağırmamız gerekir.

Örnek 2

Bazı "for" döngüleri kullanarak bazı animasyonları kolayca yapabiliriz.

Arduino ve WS2812B Örnek 2

İşte ikinci örnek için Arduino kaynak kodu:

#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 20
CRGB ledleri [ NUM_LEDS ] ;
geçersiz kurulum () {
FastLED. addLeds < WS2812, LED_PIN, GRB > ( ledler, NUM_LEDS ) ;
}
geçersiz döngü () {
for ( int i = 0; i < = 19; i ++ ) {
ledler [ i ] = CRGB ( 0, 0, 255 ) ;
FastLED. göster () ;
gecikme ( 40 ) ;
}
for ( int i = 19; i > = 0; i-- ) {
ledler [ i ] = CRGB ( 255, 0, 0 ) ;
FastLED. göster () ;
gecikme ( 40 ) ;
}
}

Burada ilk "for" döngüsü, 40 milisaniye gecikmeyle ilk LED'den son LED'e kadar tüm 20 LED'i mavi renkte yakar. Bir sonraki “for” döngüsü 20 LED'in tümünü tekrar yanar, ancak bu sefer kırmızı renkte ve sondan ilk LED'e kadar ters sırada.

FastLED kütüphanesi, gerçekten ilginç animasyonlar ve ışık gösterileri yapmak için kullanılabilecek birçok başka fonksiyona sahiptir, bu nedenle bir sonraki LED projenizi parlatmak yalnızca hayal gücünüze bağlıdır.

WS2812B LED'leri kullanan interaktif LED Sehpa

Şimdi başında bahsettiğim DIY interaktif LED sehpa projesine bir göz atalım. Bu, benim ve Creativity Hero'dan Marija arasındaki bir işbirliği projesiydi.

Yaratıcılık Kahramanı Etkileşimli LED kahve masası

Ahşap konstrüksiyonun kesilmesi ve montajından başlayarak tüm elektronik parçaların lehimlenmesine ve birbirine bağlanmasına kadar tüm süreci anlattığı web sitesi makalesine göz atabilirsiniz. Burada elektronik parçanın nasıl çalıştığını, özel Android uygulamasının nasıl oluşturulacağını ve Arduino kartının nasıl programlanacağını açıklayacağım.

İşte bu projenin tam devre şeması.


Dolayısıyla tablo, tümü bir Arduino Mega kartına bağlı olan 45 adreslenebilir LED, 45 kızılötesi yakınlık sensörü ve bir HC-05 Bluetooth modülünden oluşur. Devre, 5V 6A güç kaynağı ile güçlendirilmiştir.

Bu örnek için gerekli olan bileşenleri aşağıdaki bağlantılardan edinebilirsiniz:

Kaynak Kodları

İşte bu proje için Arduino kodu ve Bluetooth renk kontrol özelliğini dışlarsak, kodun aslında çok basit olduğunu fark edebiliriz.

#include "FastLED.h"
#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB
CRGB ledleri [ NUM_LEDS ] ;
geçersiz kurulum () {
FastLED. addLeds < WS2812, LED_PIN, COLOR_ORDER > ( ledler, NUM_LEDS ) ;
FastLED. setBrightness ( parlaklık ) ;
// Dijital pin 3'ten pin 48'e kadar 45 yakınlık sensörü pinini giriş olarak ayarlayın
for ( int pinNo = 0 + 3; pinNo < = 45 + 3; pinNo ++ ) {
pinMode ( pinNo, GİRİŞ ) ;
}
}
geçersiz döngü () {
for ( int pinNo = 0; pinNo < = NUM_LEDS-1; pinNo ++ ) {
ledler [ pinNo ] = CRGB ( 0, 255, 0 ) ; // 45 LED'in tamamını yeşil renge ayarlayın
// Belirli sensörün üzerinde bir nesne algılanırsa, belirli led'i açın
if ( digitalRead ( pinNo + 3 ) == LOW ) {
ledler [ pinNo ] = CRGB ( 0, 0, 255 ) ; // Reaktif LED'i maviye ayarlayın
}
}
FastLED. göster () ; // LED'leri güncelleyin
gecikme ( 20 ) ;
}

Açıklama: Öncelikle, daha önce açıklandığı gibi temel parametreleri tanımlamamız ve 45 yakınlık sensörü pinini giriş olarak ayarlamamız gerekir.

Tek bir "for" döngüsü kullanan ana döngüde, tüm LED'leri belirli bir renge ayarlıyoruz ve ayrıca yakınlık sensörünün bir nesneyi algılayıp algılamadığını kontrol ediyoruz. Bu doğruysa veya bu durumda bir DÜŞÜK mantık durumu varsa, belirli reaktif renk belirli LED'e ayarlanacaktır. FastLED.show () işlevini kullanarak sonunda LED renklerini güncelliyoruz.

Bluetooth renk kontrol özelliğini dahil etmek için Android uygulamasını yapmanın yanı sıra biraz daha fazla kod satırı eklememiz gerekiyor. HC-05 Bluetooth modülünü Arduino  ile nasıl kullanacağınıza ve MIT App Inventor çevrimiçi uygulamasını kullanarak kendi Android uygulamamızı yapmalıyız.

Android uygulamasının çalışma şekli aşağıda açıklanmıştır. Renkleri alabileceğimiz bir renk paleti görüntüsü, seçilen rengin reaktif mi yoksa arka plan LED'lerine mi uygulanacağını seçebileceğimiz iki onay düğmesi ve parlaklığı ayarlamak için bir kaydırıcıdan oluşur.



Uygulamanın bloklarına bakarsak, renk paleti görüntüsünün yerleştirildiği tuvale dokunduğumuzda ne olduğunu görebiliriz. .GetPixelColor bloklarını kullanarak, alınan renk için Kırmızı, Yeşil ve Mavi değerlerini alıyoruz ve Bluetooth SendText bloğunu kullanarak bu bilgiyi Arduino'ya bir metin biçiminde gönderiyoruz.



Seçilen onay kutusuna bağlı olarak, metni Arduino'da alırken yardımcı olan farklı bir ilk karakter veya işaret göndeririz. Kaydırıcının konumunu değiştirdiğimizde de aynı şey olur, 10'dan 100'e kadar bir değer, önünde “3” işareti bulunan bir metin biçiminde Arduino'ya gönderilir.

Telefon için program kodu apk

İşte Arduino kodu:

#include <SoftwareSerial.h>
#include "FastLED.h"
#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB
CRGB ledleri [ NUM_LEDS ] ;
Yazılım Seri Bluetooth ( 53, 52 ) ; // Arduino (RX, TX) - Bluetooth (TX, RX)
// İlk arka plan rengi
int backR = 100;
int backG = 50;
int backB = 10;
// İlk reaktif renk
int reactiveR = 10;
int reactiveG = 50;
int reaktifB = 100;
int parlaklık = 50; // İlk parlaklık
Dize dataIn = "" ;
geçersiz kurulum () {
FastLED.addLeds < WS2812, LED_PIN, COLOR_ORDER > ( ledler, NUM_LEDS ) ;
FastLED. setBrightness ( parlaklık ) ;
Seri.başlangıç ( 38400 ) ;
Bluetooth. başlangıç ( 38400 ) ; // Bluetooth modülünün varsayılan baud hızı
for ( int pinNo = 0 + 3; pinNo < = 45 + 3; pinNo ++ ) {
pinMode( pinNo, GİRİŞ ) ;
}
}
boşluk döngüsü () {
eğer ( Bluetooth. var () > 0 ) {
dataIn = Bluetooth.readString () ;
gecikme( 20 ) ;
eğer ( dataIn. başlarWith ( "1" )) {
gecikme ( 10 ) ;
String stringR = dataIn. alt dize ( dataIn. indexOf ( "R" ) + 1, dataIn. indexOf ( "G" )) ;
reactiveR = stringR. toInt () ;
Dize stringG = dataIn. alt dize ( dataIn. indexOf ( "G" ) + 1, dataIn. indexOf ( "B" )) ;
reactiveG = stringG.toInt () ;
Dize stringB = dataIn. alt dize ( dataIn. indexOf ( "B" ) + 1, dataIn. indexOf ( "E" )) ;
reactiveB = stringB. toInt () ;
}
else if ( dataIn. startsWith ( "2" )) {
String stringR = dataIn. substring ( dataIn. indexOf ( "R" ) + 1, dataIn. indexOf ("G" )) ;
backR = stringR.toInt () ;
Dize stringG = dataIn. substring ( dataIn. indexOf ( "G" ) + 1, dataIn. indexOf ("B" )) ;
backG = stringG.toInt () ;
Dize stringB = dataIn. substring ( dataIn. indexOf ( "B" ) + 1, dataIn. indexOf ("E" )) ;
backB = stringB. toInt () ;
}
else if ( dataIn. startsWith ( "3" )) {
String stringBrightness = dataIn. substring ( dataIn. indexOf ( "3" ) + 1, dataIn. length ()) ;
parlaklık = stringBrightness. toInt () ;
FastLED. setBrightness ( parlaklık ) ;
}
}
for ( int pinNo = 0; pinNo < = NUM_LEDS-1; pinNo ++ ) {
ledler [ pinNo ] = CRGB ( backR, backG, backB ) ;
if ( digitalRead ( pinNo + 3 ) == LOW ) {
ledler [ pinNo ] = CRGB ( reactiveR, reactiveG, reactiveB ) ;
}
}
FastLED. göster () ;
gecikme ( 20 ) ;
}

Açıklama: Öncelikle Arduino ile HC-05 Bluetooth modülü veya modülün bağlı olduğu pinler arasındaki seri iletişimi tanımlamamız gerekir. Kurulum bölümünde, bu modülün çalıştığı baud hızını ayarlamamız gerekiyor. Ardından ana döngüde Bluetooth.available () işlevini kullanarak Akıllı Telefondan gelen bir veri olup olmadığını kontrol ederiz. Bu doğruysa, Bluetooth.readString () işlevini kullanarak verileri dize olarak alırız. Daha sonra .startsWith () işlevini kullanarak ilk karakteri veya işaretçiyi kontrol ederiz ve bu şekilde reaktif rengi, arka planı veya parlaklığı değiştirmek isteyip istemediğimizi biliriz.

.Substring () işlevini kullanarak, alınan metinden Kırmızı, Yeşil ve Mavi değerleri çıkarır ve bunları tam sayılara dönüştürürüz. Bu değerler daha sonra, rengi ayarlayan ve daha önce açıklandığı gibi LED'leri yakan aşağıdaki "for" döngüsünde kullanılır. Aynı şekilde LED'lerin parlaklığını da ayarlıyoruz.

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.