Arduino Renk Sesnsörü - Renkleri Sesli Okuma

Kodla Büyü

sert_hard

Seçkin Üye
Seçkin Üye
Mesajlar
941
Arkadaşlar herkese iyi günler. Arduino TCS3200 renk sensörü ve SD Card Reader ile bir uygulama yapmaya çalışıyorum. Sarı, Kırmızı, Mavi ve Yeşil renkleri sensörden okuyup, Sd kart içindeki ses dosyalarını renge göre çalacak bir proje. Ses çalma için internette baktığımda SimpleSDAudio kütüphanesi kullanılmış. Fakat ben denediğimde çalışmadı. Ses çalma komutları olmadan renk sensörü 4 rengi de sorunsuz okuyor, seri ekrana yazıyor. Fakat Kütüphane ve ses çalma komutlarını ekleyince hiçbir eylem gerçekleşmiyor. Kodları aşağıya ekliyorum, yardımcı olabilirseniz sevinirim.
 
//#include <SimpleSDAudio.h>
#define s0 5
#define s1 6
#define s2 7
#define s3 8
#define sensorOut 2

int K, Y, M = 0;

void setup() {
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(sensorOut, INPUT);

digitalWrite(s1,LOW);
digitalWrite(s0,HIGH);
Serial.begin(9600);

//if (!SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER))
//{
//while(1);}
//SdPlay.setSDCSPin(4);

}

void loop() {
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
K = pulseIn(sensorOut, LOW);
Serial.print("Kırmızı= ");
Serial.print(K);
Serial.print(" ");
delay(50);

digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
Y = pulseIn(sensorOut, LOW);
Serial.print("Yeşil= ");
Serial.print(Y);
Serial.print(" ");
delay(50);

digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
M = pulseIn(sensorOut, LOW);
Serial.print("Mavi= ");
Serial.print(M);
Serial.println();
delay(50);

if(K<100 && Y<M && abs(K-Y)<20)
{
Serial.print("Renk = Sari ");
// SdPlay.setFile("1.wav");
// SdPlay.play();
}
else if(Y>150 && Y<K && abs(Y-M)<20)
{
Serial.print("Renk = Yeşil ");
// SdPlay.setFile("4.wav");
// SdPlay.play();
}
else if(K>150 && M<Y && M<K)
{
Serial.print("Renk = Mavi ");
// SdPlay.setFile("3.wav");
// SdPlay.play();
}
else if(K<100 && K<Y && K<M)
{
Serial.print("Renk = Kırmızı ");
// SdPlay.setFile("2.wav");
// SdPlay.play();
}
else
{
Serial.print("Renk algılanamadı ");
}

Serial.println();
delay(1000);
}
 
bu haliyle 4 rengi de sıkıntısız okutabiliyorum, // olan yorum ifadelerini kaldırınca bir yerlerde çakışma veya hata gerçekleşiyor, hiç veri döndürmüyor.

SD kart modülünü de ayrıca denediğimde SimpleSDAudio kütüphanesi ile sıkıntısız çalışıyor, içindeki ses dosyalarını hoparlörden oynatıyor. Belki Arduino gücü yetmiyor diye düşünerek breadboard güç modülü ile denedim fakat sonuç vermedi
 
//if (!SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER))
//{
//while(1);}
//SdPlay.setSDCSPin(4);

Burada SdPlay elemanının pinini belirlemeden if içinde kontrol etmeye çalıştığın için olabilir hocam, başka bir durum takılmadı gözüme. Burayı eklediğinizde renkleri de okutmuyor diyorsanız bu if bloğunun içinde takılıyor demektir. Problemi burada aramak lazım.
 
if (!SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER))

kısmında FULLRATE KISMINI " HALFRATE " olarak değiştirmeyi denermisin.


ayrıca
Serial.print("Renk = Kırmızı ");
// SdPlay.setFile("2.wav");
// SdPlay.play();
delay(2000);

kısımlarında sonlara delay(2000); gibi komutla sese çalması için süre verebilirsin.

bende aynı sorunu yaşamıştım böyle çözdüm. ikisinide denemeni öneririm
 
Son düzenleme:
setup içindeki

//if (!SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER))
//{
//while(1);}
//SdPlay.setSDCSPin(4);


kısmını if ve while içinden çıkarıp

SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER);

SdPlay.setSDCSPin(4);

olarak ayarlamayı denermisin.
bir önceki mesajımda yazdıklarımı da bunun peşine deneyebilirsin
 
3 renkli olarak yaptığım arduino kodalrı belki faydası olur.


// TCS230 color recognition sensor
// Sensor connection pins to Arduino are shown in comments

Color Sensor Arduino
----------- --------
VCC 5V
GND GND
s0 8
s1 9
s2 12
s3 11
OUT 10
OE GND
*/

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(6, 7); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);


const int s0 = 8;
const int s1 = 9;
const int s2 = 12;
const int s3 = 11;
const int out = 10;
// LED pins connected to Arduino
int redLed = 2;
int greenLed = 3;
int blueLed = 4;
// Variables
int red = 0;
int green = 0;
int blue = 0;

void setup()
{

// dfplayer mp3 module
mySoftwareSerial.begin(9600);
Serial.begin(9600);

Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true);
}
Serial.println(F("DFPlayer Mini online."));

myDFPlayer.volume(10); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3


myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms

//----Set volume----
myDFPlayer.volume(20); //Set volume value (0~30).
myDFPlayer.volumeUp(); //Volume Up
myDFPlayer.volumeDown(); //Volume Down
//----Set different EQ----
myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);

//----Set device we use SD as default----
myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);




// mp3 module son

pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(out, INPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
}

void loop()
{

// static unsigned long timer = millis();
//
// if (millis() - timer > 3000) {
// timer = millis();
// myDFPlayer.next(); //Play next mp3 every 3 second.
// }

// myDFPlayer.playMp3Folder(1);
// delay(2000);

color();
Serial.print("R Intensity:");
Serial.print(red, DEC);
Serial.print(" G Intensity: ");
Serial.print(green, DEC);
Serial.print(" B Intensity : ");
Serial.print(blue, DEC);
//Serial.println();
//

if (red < blue && red < green && red <99)
{
Serial.println(" - (Red Color)");
digitalWrite(redLed, HIGH); // Turn RED LED ON
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
myDFPlayer.playMp3Folder(1);
delay(2000);
}
else if (blue < red && blue < green && blue <99)
{
Serial.println(" - (Blue Color)");
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, HIGH); // Turn BLUE LED ON
myDFPlayer.playMp3Folder(2);
delay(2000);
}

else if (green < red && green < blue && green <99)
{
Serial.println(" - (Green Color)");
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH); // Turn GREEN LED ON
digitalWrite(blueLed, LOW);
myDFPlayer.playMp3Folder(3);
delay(2000);
}

else{
Serial.println();
}
delay(300);
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
}

void color()
{
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
//count OUT, pRed, RED
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s3, HIGH);
//count OUT, pBLUE, BLUE
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH);
//count OUT, pGreen, GREEN
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}
 
Yardımcı olabilecek arkadaş var mı
Hocam, yakın zamanda buna benzer bir uygulama yaptım.SD Kart modülünde denedim aynı sizin gibi ses alamadım bağlantıları dğeiştirdim çok cızırtılı sesler geldi duyulmayacak kadar. SD Kart modülü değil de DFPlayer modülü ile mp3 leri çalıştırdım. Sorun yazılımdan çok donanım ve bağlantı kaynaklı olabiliyor.Arduinonun gücü yetmeyebilir. Tavsiyem DFplayer modülünü kullanmanız. Hoparlöre seri şekilde kondansatör bağladım. Çok temiz bir ses aldım. Ayrıca bağlantılarınızı breadboard üzerine değil de lehimleyerek yapmanızı tavsiye ederim.
 
Son düzenleme:
Ekledigin ses dosyaları 1gb veya daha küçük sd kartta olmalı ve ses dosyalarının bit hızları düşük ve mono olmalı
 
Teşekkürler arkadaşlar, bir sitede farklı bir kütüphane ve kodlama kullanılarak yapılmış bir örnek buldum, onu da biraz kurcalayacağım, eğer çözüm bulamazsam sizin dediğiniz gibi DFPlayer modül kullanarak ilerlemek daha mantıklı olacak gibi.

Bu arada kullandığım micro sd kart 2gb lık, bulabilirsem yerine 1 gb kullanacağım.
 
Teşekkürler arkadaşlar, bir sitede farklı bir kütüphane ve kodlama kullanılarak yapılmış bir örnek buldum, onu da biraz kurcalayacağım, eğer çözüm bulamazsam sizin dediğiniz gibi DFPlayer modül kullanarak ilerlemek daha mantıklı olacak gibi.

Bu arada kullandığım micro sd kart 2gb lık, bulabilirsem yerine 1 gb kullanacağım.
hocam benzer sorunu bende yaşıyorum. bulduğunuz kodlar işe yaradımı. sorunu çözebildinizmi
 
Bende çok uğraştım yakın zamanda. Bir sürü ses modülü denedim; ya sd kart okumazlar, ya ses çalmazlar. DFPlayer modülüne geçtim en son sorun çözüldü.
 
Geri
Üst