Merhaba arkadaşlar, bugün arduino ile çok faydalı bir proje yapacağız. Sesli renk okuyucu robot ile cismin rengini algılayarak kullanıcıya sesli olarak rengi söyleyecek. Bu projemiz aynı zamanda bir sosyal sorumluluk projesidir. Küçük yaştaki çocukların renklerin öğrenmesine büyük oranda katkıda bulunacak bu projemiz eğitici bir sistem olması ile öğretim sistemine büyük oranda katkıda bulunacaktır.
Bu projede iki yöntem kullanabilirsiniz. Birinci yöntemde wtv020 mp 3 modül kullanarak ses dosyalarını çaldırılır. İkinci yöntemde ise sadece sd kart modül kullanıp ses dosyalarını çalıştırabilirsiniz. Hangi yöntem daha iyi derseniz ikincisini yani sd kart modül ile olanı tercih edin derim. Çünkü wtv020 modül bazen sesi çalmıyor kendinden stop moduna geçebiliyor .
Birinci Yöntem:
Malzemeler:
- Arduino
- Wtv020 mp3 modül
- TCS34725 Rgb renk algılama sensörü
- Hoparlör
- 9v pil
- jumper kablo
Elektronik Devre Şeması:
Renk sensörü ı2c protokolü ile haberleştiğinden sda ve scl pinlerini arduino kartınızda bulunan scl ve sda pinlerine takın. Uno ve nano modellerinde sda A4, scl A5 pinleridir. Megada ise ayrılmış sda ve scl pinleri mevcut. Sensörün 3.3v pinini arduinonun 3.3v pinine, gnd yi de arduinonun gnd pinine takıyoruz.
Yazılım kısmına geçmeden önce wtv020 modülüne ses dosyası yükleme işlemini yapmanız gerekecek. Buradaki linkten nasıl yapıldığına bakabilirsiniz.
Önemli Not: Ses dosyalarının isimleri (0000,0001,0002) şeklinde olmalıdır. Aksi halde ses dosyaları okuma işlemi gerçekleşmiyor.
Kütüphaneler: Renk Okuyucu
Arduino Kodu:
// Sesli Renk Okuyan Robot Projesi // www.robimek.com #include "Wire.h" #include "Adafruit_TCS34725.h" #include <Wtv020sd16p.h> // wtv020 pinleri int resetPin = 13; int clockPin = 11; int dataPin = 12; int busyPin = 10; // wtv020 pin yükleme Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin); Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X); void setup() { Serial.begin(9600); wtv020sd16p.reset(); wtv020sd16p.playVoice(2); wtv020sd16p.playVoice(5); delay(5000); if (tcs.begin()) {+- Serial.println("Sensör bulundu"); } else { Serial.println("TCS34725 Sensör bulunamadı !"); while (1); // Dur! } delay(1000); } void loop() { uint16_t clearcol, red, green, blue; float average, r, g, b; tcs.getRawData(&red, &green, &blue, &clearcol); average = (red+green+blue)/3; r = red/average; g = green/average; b = blue/average; Serial.print("\tTEMİZ:"); Serial.print(clearcol); Serial.print("\tKIRMIZI:"); Serial.print(r); Serial.print("\tYEŞİL:"); Serial.print(g); Serial.print("\tMAVİ:"); Serial.print(b); if ((r > 1.4) && (g < 0.9) && (b < 0.9)) { // kırmızı algılama Serial.print("\tKIRMIZI"); wtv020sd16p.playVoice(2); // kırmızı söyle delay(2000); } else if ((r < 0.95) && (g > 1.4) && (b < 0.9)) { // yeşil algılama Serial.print("\tYEŞİL"); // yeşil söyle wtv020sd16p.playVoice(7); delay(2000); } else if ((r < 0.8) && (g < 1.2) && (b > 1.2)) { // mavi algılama Serial.print("\tMAVİ"); // mavi söyle wtv020sd16p.playVoice(3); delay(2000); } else if ((r > 1.15) && (g > 1.15) && (b < 0.7)) { // sarı algılama Serial.print("\tSARI"); // sarı söyle wtv020sd16p.playVoice(6); delay(2000); } else if ((r > 1.4) && (g < 1.0) && (b < 0.7)) { // turuncu algılama Serial.print("\tTURUNCU"); // turuncu söyle wtv020sd16p.playVoice(5); delay(2000); } else { Serial.print("\tRENK ALGILANMADI"); } Serial.println(""); delay(2000); }
İkinci Yöntem:
Malzemeler:
- Arduino
- Sd kart Modül
- TCS34725 Rgb renk algılama sensörü
- Hoparlör
Elektronik Devre Şeması:
Şekildeki gibi devre bağlantılarını yapıyoruz. Sd kart modül SPI ile haberleştiği için diğer arduino modüllerindeki SPI pinlerine bakıp ona göre bağlantınızı yapabilirsiniz. Sd karta yüklenecek ses dosyalarının belli bir formatta olması gerekiyor. Buradaki linkten format ayarlarına bakabilirsiniz.
SimpleSDAudio Kütüphanesi : SimpleSDAudio.h
Arduino Kodu:
// Sesli Renk Okuyan Robot Projesi // www.robimek.com #include <SimpleSDAudio.h> #include "Wire.h" #include "Adafruit_TCS34725.h" Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X); void setup() { Serial.begin(9600); if (!SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER)) { while(1); } SdPlay.setSDCSPin(4); if (tcs.begin()) {+- Serial.println("Sensör bulundu"); } else { Serial.println("TCS34725 Sensör bulunamadı !"); while (1); // Dur! } delay(1000); } void loop() { uint16_t clearcol, red, green, blue; float average, r, g, b; tcs.getRawData(&red, &green, &blue, &clearcol); average = (red+green+blue)/3; r = red/average; g = green/average; b = blue/average; Serial.print("\tTEMIZ:"); Serial.print(clearcol); Serial.print("\tKIRMIZI:"); Serial.print(r); Serial.print("\tYESIL:"); Serial.print(g); Serial.print("\tMAVI:"); Serial.print(b); if ((r > 1.4) && (g < 0.9) && (b < 0.9)) { Serial.print("\tKIRMIZI"); SdPlay.setFile("krmz.wav"); SdPlay.play(); delay(2000); SdPlay.deInit(); } else if ((r < 0.95) && (g > 1.4) && (b < 0.9)) { Serial.print("\tYESIL"); SdPlay.setFile("ysl.wav"); SdPlay.play(); delay(2000); SdPlay.deInit(); } else if ((r < 0.8) && (g < 1.2) && (b > 1.2)) { Serial.print("\tMAVI"); SdPlay.setFile("mavi.wav"); SdPlay.play(); delay(2000); SdPlay.deInit(); } else if ((r > 1.15) && (g > 1.15) && (b < 0.7)) { Serial.print("\tSARI"); SdPlay.setFile("sari.wav"); SdPlay.play(); delay(2000); SdPlay.deInit(); } else if ((r > 1.4) && (g < 1.0) && (b < 0.7)) { Serial.print("\tTURUNCU"); SdPlay.setFile("trnc.wav"); SdPlay.play(); delay(2000); SdPlay.deInit(); } else { Serial.print("\tRENK ALGILANMADI"); } Serial.println(""); }
merhabalar, Sd kart ile olan versiyonu yaptık çalıştırdık projeyi fakat bir sorunumuz var ilk rengi sensöre gösterdiğimizde sesli şekilde okuyor fakat işleme devam edip başka renk gösterdiğimizde sesli olarak okumuyor,serial monitöre baktığımızda renk okuma ilemine devam edip rengi algıladığını görüyoruz, 2.ve sonraski okunan renklerin seslendirmesi gerçekleşmiyor,sorun neden olabilir acaba?
peki renkleri renk sensörü kullanmadan rfıd kartlarına tanıtıp kart bilgisini okuyunca renkleri söylemesini nasıl yapacağım.
Merhaba projemizde hoparlörden kısık ses ve hızlı bir şekilde söylüyor.bizde transistör ve direnç takmayı düşünüyoruz acaba nasıl takabiliriz
bensoyledıgı rengıı2c lcd ekranda gostermekıstıyorum mumkun mu munkunse nasıl olur yardımcı olur musunuz ?
Bahsettiğiniz renk sensörü yerine tcs3200 kullanmak için ,kod nasıl değiştirilmeli?
Hojam ben eger shu renk leri bashka bir dil de soylemesini ister sem ne yapmam gerekiyor
can i have libraries for Adafruit_TCS34725.h?
Which arduino IDE version you use? because i have compilling errror when i upload by usin arduino ide version 18.1
Hocam, elimde TCS3200 sensörü var. Onunla aynı devreyi kurup aynı kodlarda çalıştırabilir miyim ? veya nerede değişiklik yapmam gerekir ?
Merhaba çocuklar için ingilizce rakam öğretici bir proje yapmam gerekiyor
oyuncakdenizi.com/renkli-ahsap-rakamlar.html
Çocuklar ahsap rakamları yerlerine koyduklarında rakamların ingilizcesini söyleyebilecek bir devre hazırlamak isitiyorum aynı zamanda tabakaya led ekleyerek ışık da yanması gerekiyor ?
nasıl yapabilirim
kütüphaneleri paylaşır mısınız?
proje içindeki linkten indirebilirsiniz.
Link kırık hocam yenilermisiniz?
linki yeniledim
fatal error: SimpleSDAudio.h: No such file or directory
Bu hatayı alıyorum.
projedeki kütüphane ilk yöntemin kütüphanesi. ikinci yöntemi kullanıyorsan kütüphaneyi buradan indirebilirsin http://www.robimek.com/wp-content/uploads/SimpleSDAudio.rar
hocam ses dosyalarını atar mısınız ?
Abi ses modülünü bulamıyorum bi yardımcı olurmusun.
Renk sensörünü renklerin üzerinde gezdirdiğimde 255,255,0 gibi veriler veriyor. Lütfen yardım edin.
bir yerde yanlış yapmışsındır. bu projedeki sensörü kullanman gerekir. arduino kodunu yükleyip tekrar dene. sensörün kütüphanesini de ekle.
ben bu projeyi sd kart modülü ile yaptım ancak bağlantıları nasıl yapılacak bilmiyorum yardımcı olur musunuz lütfen ?
buradaki projeye bakın http://www.robimek.com/arduino-ile-sd-karttan-mp3-ses-dosyasi-calma/ yalnız spı haberleşmesi ile iletişim kurduğu için arduino modellerinde spı pinleri farklılık gösterir.
seri portda renkleri görebiliyorum ama ancak ses çıkmıyorum ses dosyalarım 0002.ad4 0003.ad4 0005.ad4 0007.ad4 kullandığım hafıza kartı 2gb nerde hata yapıyor olabilirim ?
mp3 modül pause modunda olabilir. Bunun için play pinine buton bağlayıp basın.
teşekkür ederim cevabınız için birde hoparlör için nasıl bir hoparlör seçmeliyiz benim seçtiğin 0.5w 8 ohm ama sesi çok düşük çıkıyor
mini ses bombasından alabilirsiniz.
Yazdığınız kodları giriyorum kütüphane de oluşturuyorum ama renkleri okumuyor ne yapmalıyım ses dosyalarında sorun olabilirmi yardım edebilirmisiniz
mp 3 modül serialden çalışınca bazen çalışmıyor. Yani mp3 modülden kaynaklı. Sd kart ile yapılmış ola projemiz var onda sorunsuz söyletebilirsiniz. buradan bakabilirsiniz http://www.robimek.com/arduino-ile-sd-karttan-mp3-ses-dosyasi-calma/
teşekkür ederim peki ses dosyalarını wav formatına çevirdiğimizde kırmızı rengin bulunduğu ses dosyasının isminidemi kırmızı.wav şeklinde adlandıracağız
karakter uzunluğu maksimum 5 karakter olacak şekilde isim verebilirsiniz. örneğin : mavi.wav
ses dosyalarınıda atar mısınız
RGB değerlerini neye göre veriyorsunuz? Bunlar dışında mor, siyah, beyaz gibi renkler tanıtmaya çalıştım fakat olmadı ve r<0.7 gibi olan kısımları tam anlamadım.
kod kısmında rengin r g b değerine göre oransal miktar hesabı var. Tanımlamak istediğiniz rengi renk sensörğne okutun ve serial ekrandaki r g b değerlerini alın rengin tonuna göre bu değerleri sınırlayarak algoritmanızı oluşturun.
Wtv020 mp3 modül
ROBOTKUTUSU VEYA ROBOTİSTANDA YOK NERDEN BULURUM
gittigidiyor da var
Hocam link atabilirmisiniz ?
gittigidiyorda stoklarda yok galiba
Hocam bu devre maksimum ne kadar uzaktaki renkleri algilayabiliyo.
Sensör her an değer alıyor ışığın yansımasından kaynaklı olarak. Ama sağlıklı bir ölçüm için renk ile sensör arası 1 cm civarı olmalıdır. Tabi yansımalardan dolayı ortam koşullarını da sayarsak bu mesafe değişkenlik gösterebiliyor.
manyetik yol izleyen robotu nasıl yapabilirim
Çizgi izleyen robot gibi düşün örneğin 5 tane manyetik sensör yerleştirirsin sensörden gelen değerlere göre motorları kontrol ettirirsin.