Arduino ile sesleri lcd ekrana yazdırma projesini gerçekleştireceğiz , proje işitme engelliler için kullanılabilecek özelliğe sahiptir.Proje henüz demo özelliğindedir.Ama projeyi saat boyutlarına getirirsek birçok işitme engelli için kullanışlı olabilir.Projenin çalışma prensibi şu şekildedir.Arduino üzerine bağlı bir lcd ekran , titreşim motoru ve bluetooth modülü bulunmaktadır.
Telefon ile bluetooth modülüne android program ile bağlanıp konuşmaları bluetooth modülüne iletir bu konuşmalarda arduino tarafından yazıya çevrilerek ekrana basılır.
Projede Kullanılan Malzemeler
- Arduino UNO
- 5110 LCD Ekran
- Titreşim Motoru
- Breadborad
- HC-06 Bluetooth Modülü
#include <SoftwareSerial.h>
SoftwareSerial mySerial(6, 7); // RX, TX
#include <LCD5110_Basic.h>
// LCD pinleri
// SCK - Pin 8
// MOSI - Pin 9
// DC - Pin 10
// RST - Pin 11
// CS - Pin 12
LCD5110 myGLCD(8,9,10,11,12); // Lcd yi tanımlama ve SPI pinlerini atama
extern uint8_t SmallFont[]; // Yazı fontu
String ses; // gelen karakterlerin satır değişkenine atama
int titresim_motor = 5; // titresim motor pini
int gelendegertoplam = 0;
void setup() {
Serial.begin(9600);
mySerial.begin(9600); // serial iletişm hızı
myGLCD.InitLCD(); // lcd ekrana bağlatma fonksiyonu
pinMode(titresim_motor,OUTPUT); // titreşim motorunu
digitalWrite(titresim_motor,LOW); // motoru durma pozisyonuna al
myGLCD.setFont(SmallFont);
myGLCD.print(ses,LEFT,10);
}
void loop() {
while (mySerial.available()){ //Okumak için kullanılabilir bayt olup olmadığını kontrol et
delay(10); //10 milisaniye bekle
char c = mySerial.read(); //Seri okuma
// türkçe karakterler lcd kütüphanesinde olmadığı için aşağıdaki gibi utf8 deki integer değerleri alınmıştır.
int a = (int) c; // char tipi karakteri integer karaktere dönüştürme
if(a<0) // a değeri negatif ise
{
if ( a == -60) { // a değeri -60 ise
c = mySerial.read(); // sonraki gelen veriyi oku
a = (int) c; // char tipi karakteri integer karaktere dönüştürme
if( a == -97 ) { // a değeri -97 ise
ses += 'g'; // ses karakterine g harfini ekle.
}
else { ses += 'i'; // a değeri -97 değil ise ses karakterine i harfini ekle
}
a = 0; // a değerini sıfırla
}
gelendegertoplam +=a; // gelendegertoplam değerine a değerini ekle
if (gelendegertoplam < 0 ) // gelendegertoplam değeri negatif ise { if ( gelendegertoplam == -157) { ses += "S";gelendegertoplam =0; } // Ş harfini S harfine dönüştürme işlemi if ( gelendegertoplam == -156) { ses += "s";gelendegertoplam =0; } // ş harfini s harfine dönüştürme işlemi if ( gelendegertoplam == -150) { ses += "c";gelendegertoplam =0; } // ç harfini c harfine dönüştürme işlemi if ( gelendegertoplam == -182) { ses += "C";gelendegertoplam =0; } // Ç harfini C harfine dönüştürme işlemi if ( gelendegertoplam == -135) { ses += "o"; gelendegertoplam =0;} // ö harfini o harfine dönüştürme işlemi if ( gelendegertoplam == -167) { ses += "O"; gelendegertoplam =0;} // Ö harfini O harfine dönüştürme işlemi if ( gelendegertoplam == -129) { ses += "u"; gelendegertoplam =0;} // u harfini u harfine dönüştürme işlemi if ( gelendegertoplam == -161) { ses += "U";gelendegertoplam =0;} // U harfini U harfine dönüştürme işlemi } } else { if (c == '#') {break;} // # tespit edildiğinde döngüden çık ses += c; // gelen karakterleri ses tanımında topla } } if (ses.length()>0) // gelen veri var ise
{
Serial.println(ses);
myGLCD.clrScr(); // Ekranı temizle
delay(1000); // 1 saniye bekle
myGLCD.print(ses.substring(1,12),LEFT,0); // ses karakterinin ilk 12 harfini Sola hizalı ve en üst pikselden yazıyı konumlandır.
myGLCD.print(ses.substring(12,24),LEFT,10); // ses karakteri 12 harften de büyükse 12. harften sonrasını Sola hizalı ve 10 piksel üstten aşağı doğru yazıyı konumlandır.
myGLCD.print(ses.substring(24,36),LEFT,20); // ses karakteri 24 harften de büyükse 24. harften sonrasını Sola hizalı ve 10 piksel üstten aşağı doğru yazıyı konumlandır.
myGLCD.print(ses.substring(36,48),LEFT,30); // ses karakteri 36 harften de büyükse 36. harften sonrasını Sola hizalı ve 10 piksel üstten aşağı doğru yazıyı konumlandır.
delay(10); // 10 milisaniye bekle
titresim(); // titreşim motoru görev tanımı
ses =""; // ses karakterine yapılan atamayı temizle
}
}
void titresim() // titreşim motor görev tanımı
{
digitalWrite(titresim_motor,HIGH); // titreşim motorunu aktif et
delay(1000); // 1 saniye bekle.
digitalWrite(titresim_motor,LOW); // titreşim motorunu durdur.
}
hande –
Bu proje kurulu olarak mı geliyor yoksa sadece malzemeler mi geliyor
Proje Hocam –
Sipariş verirken sipariş notu bölümüne kurulu olarak istiyorum yazarsanız eğer proje kurulu olarak gönderiliyor.Aksi halde malzemeler gönderilcektir
akif (doğrulanmış kullanıcı) –
titresim was not declared in this scope
hatası alıyorum, çözümü nasıl olmalıdır.
Proje Hocam –
kodları Arduino IDE 1.05 sürümünde denermisiniz
VENHAR –
Merhaba bu projede kullanılan ve telefona indirilen uygulama hangisi? Ayrıca devre içkn başka fritzing resmi var mı? Buradaki devre resmi hiç açıklayıcı değil yardımcı olursanız sevinirim
Aynur –
Bluetooth ile sesi iletmeyi denediģimde motor titriyor fakat ekrana hiçbir şey gelmiyor. Manuel olarak ekrana yazdırdığımda bir sorun çıkmıyor. Buradaki sorun ne olabilir? Kullandığım bluetooth app’inin hangisi olduğu fark ediyor mu?
Proje Hocam –
Evet uygulama farkı mevcuttur Amrvoice uygulamasını deneyin