Magicbit'ten Basit Kendin Yap Renk Sensörü: 5 Adım
Magicbit'ten Basit Kendin Yap Renk Sensörü: 5 Adım

Video: Magicbit'ten Basit Kendin Yap Renk Sensörü: 5 Adım

Video: Magicbit'ten Basit Kendin Yap Renk Sensörü: 5 Adım
Video: 🤖📦 "STEM Fun Build Your Own Obstacle-Avoiding Cardboard Robot!" 🤯🔧👨‍👩‍👧‍👦 #DIY #Robotics #STEM 💡🤖👏 2025, Ocak
Anonim
Image
Image

Bu derste Arduino ile Magicbit kullanarak basit bir renk sensörünün nasıl yapıldığını öğreneceğiz.

Gereçler

  • sihirli bit
  • USB-A - Mikro USB Kablosu

1. Adım: Öykü

Donanım Kurulumu
Donanım Kurulumu

Merhaba arkadaşlar, bazen bazı amaçlar için renk sensörlerini kullanmanız gerekiyor. Ama nasıl çalıştığını bilmiyor olabilirsiniz. Bu eğitimde, Arduino ile Magicbit kullanarak basit bir DIY renk sensörünün nasıl yapıldığını öğreneceksiniz. Hadi başlayalım.

Adım 2: Teori ve Metodoloji

Bu projede size kırmızı, yeşil ve mavi renkleri algılayabilen renk sensörü oluşturmayı öğretmeyi umuyoruz. Bu çok temel bir örnek. Peki bu nasıl yapılır. Bu amaçla Magicbit'in RGB modülünü ve dahili LDR'yi kullanıyoruz. Her şeyden önce biraz teori öğrenmelisiniz. Bu, ışığın yansıma miktarı ile ilgilidir. Şimdi sizden soru soruyorum. Kırmızı renkli ışığı en çok hangi renkli yüzey yansıtır ve ayrıca Yeşil ve Mavi ışığı en çok hangi yüzeyler yansıtır. Biraz düşün. Ama cevap basit. Kırmızı renkli yüzey çoğunlukla kırmızı renkli ışığı yansıtır. Ayrıca yeşil ve mavi yüzeyler yeşil ve mavi ışıkları yansıtacaktır. Yani bu projede bu teoriyi kullanıyoruz. Rengi tanımak için tek tek kırmızı, yeşil ve mavi ışıklar yayarız. Her defasında LDR değerini kullanarak yansıma miktarını ölçeriz. Eğer bir ışık diğer iki ışıktan daha fazla yansıma veriyorsa o yüzey çoğunlukla renkli yüzeyden yansımalıdır.

Adım 3: Donanım Kurulumu

Bu çok basit. RGB modülünüzü Magicbit'in sağ üst bağlantı noktasına takın. Bu modül WS2812B Neopixel LED'e sahiptir. Bu LED'in 4 pini vardır. Güç için iki ve Veri girişi ve çıkışı için iki. Tek led kullandığımız için sadece güç pinlerine ve pindeki verilere ihtiyacımız var. Eğer sizde o modül yoksa Neopixel modülü satın alabilirsiniz. Bu tür bir modül satın aldıysanız, güç pinlerini ve pindeki verileri Magicbit'e bağlamanız gerekir. Bu çok kolay. Magicbit'in VCC ve GND'sini RGB modülünün güç pinlerine ve D33 pinini veri pinine bağlayın.

Adım 4: Yazılım Kurulumu

Çoğu kısmı programlama tarafından yapılır. Magicbit'imizi programlamak için Arduino IDE kullanıyoruz. Kodda birkaç kitaplık kullanıyoruz. Bunlar, kontrol Neopixel LED için Adafruit Neopixel kitaplığı ve OLED sap için Adafruit OLED kitaplığıdır. Kurulumda giriş ve çıkışlarımızı yapılandırıyoruz. Ayrıca Magicbit'te yerleşik OLED ekranını da yapılandırın. Döngüde Magicbit'in sol el düğmesine basılıp basılmadığını kontrol ediyoruz. Basıldığında, giriş sinyali 0'dır. Çünkü zaten kart tarafından yukarı çekilmiştir. Basılırsa renk kontrolü yaparız. Değilse, ekranda "renk yok" ifadesi görüntülenecektir. Düğmeye basıldığında otomatik olarak kırmızı, yeşil ve mavi ışıkları tek tek yakar ve renklerin yansıma miktarını üç değişkende saklar. Daha sonra bu değerleri karşılaştırdık ve çıktı rengi olarak görüntülenecek maksimum değer rengini seçtik.

Bu yüzden mikro USB kablosunu Magicbit'e bağlayın ve kart tipini ve com portlarını doğru şekilde seçin. Şimdi kodu yükleyin. O zaman sensörümüzü test etme zamanı. Bunu test etmek için, LDR ve RGB modülünde kırmızı, yeşil veya mavi yüzeyli kağıt veya sayfa tutun ve sol basma düğmesine basın. Daha sonra OLED ekran, yüzeyin renginin ne olduğunu gösterecektir. Bu yanlışsa, nedeni bazı renklerin yüksek ışık yoğunluğuna sahip olmasıdır. Örnek olarak her yeşil yüzeyde çıktı kırmızıdır, o zaman kırmızı ışık parlaklığını bir miktar azaltmanız gerekir. Çünkü bu durumda kırmızı ışık çok yüksek parlaklığa sahiptir. Bu yüzden yüksek yansımaya sahiptir. Parlaklığı nasıl kontrol edeceğinizi bilmiyorsanız, aşağıdaki bağlantıdaki öğreticiye bakın.

magicbit-arduino.readthedocs.io/en/latest/

Bu linkte o RGB modülünü Magicbit'ten nasıl kontrol edeceğinizi bulabilirsiniz. Ayrıca Magicbit kullanarak LDR ve basma düğmesi ile nasıl çalışacağınızı da bulabilirsiniz. Bu belgeyi okuyun ve renk sensörünün nasıl iyileştirileceğini daha fazla inceleyin. Çünkü bu, renk sensörlerinin nasıl çalıştığına dair çok basit bir örnek. Çoğu renk sensörü türü bu şekilde çalışır. Bu nedenle, ortam ışığı gürültüsünü ve diğer sesleri kaldırarak bunu iyileştirmeye çalışın.

Adım 5: Arduino Renk Sensörü Kodu

#Dahil etmek

#define LED_PIN 33

#define LED_COUNT 1 Adafruit_NeoPixel LED(LED_COUNT, LED_PIN, NEO_RGB + NEO_KHZ800); #include #include #include #define OLED_RESET 4 Adafruit_SSD1306 ekran(128, 64); #define LDR 36 #define Düğmesi 35 int R_value, G_value, B_value; geçersiz kurulum() { LED.begin(); LED.göster(); pinMode(LDR, GİRİŞ); pinMode(Düğme, GİRİŞ); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.display(); gecikme(1000); display.clearDisplay(); Seri.başla(9600); } void loop() { if(digitalRead(Button)==0){// butona basılırsa LED.setPixelColor(0, LED. Color(0, 50, 0)); //kırmızı renkli LED.show(); gecikme(100); R_value=analogRead(LDR);//red mount LED.setPixelColor(0, LED. Color(150, 0, 0));//yeşil renkli LED.show(); gecikme(100); G_value=analogRead(LDR);//yeşil montajlı LED.setPixelColor(0, LED. Color(0, 0, 255); //mavi renkli LED'de.show(); gecikme(100); B_value=analogRead(LDR);//(R_value>G_value && R_value>B_value){//kırmızı en çok yansıtılan Display("RED", 3); } else if (G_value>R_value && G_value>B_value){//green en çok yansıtılan Display("GREEN", 3); } else if (B_value>R_value && B_value>G_value){//blue en çok yansıtılan Display("BLUE", 3); } Serial.print("RED="); Serial.print(R_değeri); Serial.print(" YEŞİL="); Serial.print(G_değeri); Serial.print(" MAVİ="); Serial.println(B_değeri); } else{ LED.setPixelColor(0, LED. Color(0, 0, 0)); //kapalı RGB LED.show(); Display("RENK YOK", 2); } } void Display(String commond, int size) { // data display.clearDisplay(); display.setTextSize(boyut); // Normal 1:1 piksel ölçekli display.setTextColor(BEYAZ); // Beyaz metin çiz display.setCursor(0, 20); // Sol üst köşeden başlayın display.println(commond); display.display(); }