Bilgisayar-Bilişim Teknolojileri
Ana Sayfa
Bilişim Teknolojileri Forumu Son Konuları
24 Saat
Bilişim Teknolojileri - Formatör - Bilgisayar Öğretmeni Kayıt
Kayıt Olun
iletişim
iletişim
Detaylı Arama
Arama
Yeni Konu Aç
Yeni Konu Aç

Arduino Renk Sesnsörü - Renkleri Sesli Okuma

Konu, 'Arduino' kısmında sert_hard tarafından paylaşıldı.


  1. sert_hard

    sert_hard Seçkin Üye Seçkin Üye

    Kayıt:
    23 Eylül 2009
    Mesajlar:
    864
    Beğeni:
    25
    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.
     
  2. sert_hard

    sert_hard Seçkin Üye Seçkin Üye

    Kayıt:
    23 Eylül 2009
    Mesajlar:
    864
    Beğeni:
    25
    //#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);
    }
     
  3. sert_hard

    sert_hard Seçkin Üye Seçkin Üye

    Kayıt:
    23 Eylül 2009
    Mesajlar:
    864
    Beğeni:
    25
    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
     
  4. sert_hard

    sert_hard Seçkin Üye Seçkin Üye

    Kayıt:
    23 Eylül 2009
    Mesajlar:
    864
    Beğeni:
    25
    Yardımcı olabilecek arkadaş var mı
     
  5. gsaydin

    gsaydin Aktif Üye

    Kayıt:
    9 Aralık 2009
    Mesajlar:
    130
    Beğeni:
    46
    //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.
     
  6. memo_gk

    memo_gk Site Gezgini

    Kayıt:
    2 Nisan 2008
    Mesajlar:
    55
    Beğeni:
    7
    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: 12 Şubat 2020
  7. sert_hard

    sert_hard Seçkin Üye Seçkin Üye

    Kayıt:
    23 Eylül 2009
    Mesajlar:
    864
    Beğeni:
    25
    malesef arkadaşlar sorunu çözemedim dediklerinizi uyguladığımda da
     
  8. memo_gk

    memo_gk Site Gezgini

    Kayıt:
    2 Nisan 2008
    Mesajlar:
    55
    Beğeni:
    7
    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
     
  9. latcakir

    latcakir Seçkin Üye Seçkin Üye

    Kayıt:
    29 Eylül 2007
    Mesajlar:
    443
    Beğeni:
    47
    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);
    }
     
    sert_hard bunu beğendi.
  10. e_mrehan

    e_mrehan Üye

    Kayıt:
    17 Eylül 2013
    Mesajlar:
    16
    Beğeni:
    2
    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: 12 Şubat 2020
    sert_hard bunu beğendi.
  11. nmk

    nmk Site Gezgini

    Kayıt:
    30 Eylül 2015
    Mesajlar:
    71
    Beğeni:
    11
    Ekledigin ses dosyaları 1gb veya daha küçük sd kartta olmalı ve ses dosyalarının bit hızları düşük ve mono olmalı
     
    sert_hard bunu beğendi.
  12. sert_hard

    sert_hard Seçkin Üye Seçkin Üye

    Kayıt:
    23 Eylül 2009
    Mesajlar:
    864
    Beğeni:
    25
    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.
     

Sayfayı Paylaş /bbnetsosyal