Hugh Herr diye birini duydunuz mu? Engellerinin sınırlarını paramparça eden ünlü bir Amerikan dağcıdır;
Hugh teknolojinin engelli bireylerin normal bir yaşam sürmesine yardımcı olabileceğine inanıyor. TED konuşmalarından birisinde Herr şöyle dedi: “İnsanlar engelli değiller. Yarattığımız çevre, teknolojilerimiz bozuk ve engelli. İnsanların bize sınırlar çizmesini istemiyoruz, teknolojik yeniliklerle sınırlar kaldırılabilir."
Bunlar öylesine söylenmiş kelimeler değil, Hugh hayatını söyledikleri ışığında yaşadı. Bugün Protez bacaklarını kullanıyor ve normal yaşama geçtiğini iddia ediyor. Evet, teknoloji gerçekten insanın engellerini etkisiz hale getirebilir; Bunu göz önünde bulundurarak, görme engelli kişiler için bir bastondan daha fazlasını gerçekleştirebilecek Akıllı Baston için Arduino'nun ve basit sensörlerin gücünü kullanacağız.
Bu Akıllı Bastonda, herhangi bir engelden uzaklığı algılamak için bir Ultrasonik sensör, aydınlatma koşullarını anlamak için LDR ve görme engelli bastonunu bulamadığında uzaktan kumandanın düğmesine basarak bastonun yerini bulmasını sağlayan bir RF alıcı verici kullanılmıştır.
Tüm geri bildirimler görme engelliye bir Buzzer aracılığıyla ses sinyalleri ile iletilecektir.
Buzzer yerine bir titreşim motoru kullanabilir veya yaratıcılığınızı kullanarak çok daha fazlasını yapabilirsiniz.
Malzeme Listesi:
1-Arduino Nano
(Herhangi bir versiyon ) |
|
 |
 |
 |
2-HC-SR04 Ultrasonik sensör |
|
 |
 |
|
3-LDR
(Işığa göre değeri değişen direnç) |
|
 |
 |
|
4-Buzzer ve LED |
|
 |
 |
|
5-7805 entegresi
(5 volt regülasyonu için) |
|
 |
 |
|
6-433MHz RF alıcı ve verici |
|
 |
 |
 |
7-4.7 K, 10 K direnç |
|
 |
|
|
8-Push button |
|
 |
 |
|
9-Delikli Pertnaks |
|
|
 |
|
10-Havya,lehim |
|
|
|
|
11-9 Volt pil |
|
|
|
|
Devre Şeması:
Akıllı Baston Projesi iki ayrı devre gerektirir. Biri görme engellinin bastonuna monte edilecek ana devredir.
Diğeri ise ana devrenin yerini belirlemek için kullanılacak küçük bir uzaktan RF verici devresidir.
Ana devre şeması :

Tüm sensörleri kontrol etmek için bir Arduino Nano kullanılır.
7805 Voltaj regülatörü kullanılarak 9 voltluk pil gerilimi ardunino çalışma gerilimi olan + 5Volt değerine düşürülür.
Ultrasonik sensör tetik (trigger) ve Yankı (echo) uçları yukarıda gösterildiği gibi Arduino nano'da pin 3 ve 2'ye bağlanır.
LDR, üzerindeki gerilimi düşürmek için 10K değerinde bir direnç ile bağlanır ve Işık değişimleri ile LDR'nin direncinin değişmesi ile voltajda oluşan fark Arduino ADC (Analog Dijital Dönüştürücü) pin A1 tarafından okunur.
ADC pin A0, RF alıcısından gelen sinyali okumak için kullanılır.
Kartın çıkışı pin 12'ye bağlanan Buzzer tarafından çıkarılan sesle verilir.
RF (radyo frekans) uzaktan kumanda devresi:
Akıllı Baston için Arduino Programı:
Donanım hazır olduktan sonra Arduino'yu bilgisayar bağlayarak programlamaya başlayabiliriz. Kodun tam hali bu sayfanın alt kısmında bulunabilir, doğrudan Arduino kartınıza yükleyebilirsiniz. Ancak, kodun nasıl çalıştığını bilmek istiyorsanız aşağıdaki açıklamaları okuyabilirsiniz.
Giriş Çıkış pinlerini başlatmak için programa void setup () ile başlarız. Programımızdaki Buzzer ve Ultrasonik sensör Tetik (trigger) pini bir çıkış cihazıdır ve Ultrasonik sensör Yankı (echo) pini bir giriş cihazıdır.
[sourcecode language=”plain”]
void setup()
{
Serial.begin(9600);
pinMode(Buzz,OUTPUT);
digitalWrite(Buzz,LOW);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
}
[/sourcecode]
Ana döngüde tüm sensör verilerini okuyoruz. Mesafe için Ultrasonik sensörün sensör verilerini, ışık yoğunluğu için LDR’yi ve düğmeye basıldığını kontrol etmek için RF sinyalini okumaya başlıyoruz. Tüm bu veriler gelecekteki kullanım için aşağıda gösterildiği gibi bir değişkene kaydedilir.
[sourcecode language=”plain”]
calculate_distance(trigger,echo);
Signal = analogRead(Remote);
Intens = analogRead(Light);</pre>
[/sourcecode]
Uzaktan kumanda sinyalini kontrol etmekle başlıyoruz.
RF alıcısından gelen aynı değerlerin kaç kez tekrarlandığını kontrol etmek için, similar_count adlı bir değişken kullanıyoruz.
Bu tekrar sadece düğmeye basıldığında gerçekleşir.
Böylece sayı 100 değerini aşarsa Uzaktan kumanda alarmı tetiklenir.
[sourcecode language=”plain”]
//Uzaktan kumanda düğmesine basılıp basılmadığı kontrol ediliyor
int temp = analogRead(Remote);
similar_count=0;
while (Signal==temp)
{
Signal = analogRead(Remote);
similar_count++;
}
//Eğer uzaktan kumanda düğmesine basıldıysa
if (similar_count<100)
{
Serial.print(similar_count); Serial.println("Remote Pressed");
digitalWrite(Buzz,HIGH);delay(3000);digitalWrite(Buzz,LOW);
}
[/sourcecode]
Daha sonra etrafdaki ışığın yoğunluğunu kontrol ederiz. LDR, 200'den daha düşük bir değer verirse, çok karanlık olduğu varsayılır ve belli bir gecikme tonu ile sesli uyarı verilir, Işık Yoğunluğu fazla ise (sensör değeri 800'den fazla ise), başka bir tonla uyarı veririz. Alarm tonu ve yoğunluğu, aşağıdaki koddaki ilgili değer değiştirilerek kolayca değiştirilebilir.
[sourcecode language=”plain”]
//Eğer ışık çok azsa
if (Intens<200) { Serial.print(Intens); Serial.println("Bright Light"); digitalWrite(Buzz,HIGH); delay(200);digitalWrite(Buzz,LOW); delay(200);digitalWrite(Buzz,HIGH); delay(200);digitalWrite(Buzz,LOW); delay(200); delay(500); } //Eğer yüksek ışık varsa if (Intens>800)
{
Serial.print(Intens); Serial.println("Low Light");
digitalWrite(Buzz,HIGH);
delay(500);digitalWrite(Buzz,LOW);
delay(500);digitalWrite(Buzz,HIGH);
delay(500);digitalWrite(Buzz,LOW);
delay(500);</pre>
<pre class="rtejustify">}
//Eğer çok ışık varsa
if (Intens>800)
{
Serial.print(Intens); Serial.println("Low Light");
digitalWrite(Buzz,HIGH);delay(500);digitalWrite(Buzz,LOW);delay(500);digitalWrite(Buzz,HIGH);delay(500);digitalWrite(Buzz,LOW);delay(500);
}</pre>
<pre>[/sourcecode]
Son olarak, herhangi bir engelden uzaklığı ölçüyoruz. Ölçülen mesafenin 50 cm'den fazla olması durumunda alarm olmaz. Ancak, 50 cm'den azsa, alarm sesli uyarı vererek başlayacaktır. Nesne sesli uyarıya yaklaştıkça bipleme aralığı da azalacaktır. Nesne ne kadar yakınsa, o kadar sık bip sesi duyulur. Bu, ölçülen mesafe ile orantılı bir gecikme oluşturarak yapılabilir. Arduino'daki delay() değişkenleri kabul edemediğinden, aşağıda gösterildiği gibi ölçülen mesafeye dayanan bir döngü kullanmak zorundayız.
[sourcecode language=”plain”]
if (dist<50) { Serial.print(dist); Serial.println("Object Alert"); digitalWrite(Buzz,HIGH); for (int i=dist; i>0; i–)
delay(10);
digitalWrite(Buzz,LOW);
for (int i=dist; i>0; i–)
delay(10);
}
[/sourcecode]
Sonunda projemizi test etme zamanı. Bağlantıların devre şemasına göre yapıldığından emin olun ve programı yükleyin. Şimdi, her iki devreyi de 9V'luk bir pille çalıştırarak ve sonuçları görmeye başlamalısınız. Ultra Sonik sensörünü cisme yaklaştırınız Buzzer'ın bip sesini fark edeceksiniz, çubuk nesneye yaklaştıkça bu bip sesi artacaktır. LDR tarafından algılanan karanlık veya çok fazla ışık olması durumunda, sesli uyarı sesi duyulur. Her şey normalse, ses duyulmaz.
Uzaktan kumandadaki düğmeye bastığınızda, sesli uyarı olarak uzun bir bip sesi duyulacaktır. Bu Akıllı bastonun tam çalışması, bu sayfanın sonunda verilen Video'da gösterilir. Denemek için kısa bir çubukla kullanılmıştır. İstenirse orijinal bir bastonla çalıştırılabilir.
Program Kodu:
[sourcecode language=”plain”]
/*
* Program for Blind Man Stick
* Code by B.Aswinth Raj
* Dated: 03-11-2017
* Website: <a href="http://www.circuitdigest.com/">www.circuitdigest.com</a>
*/
const int trigger = 3; //Trigger pin of 1st Sesnor
const int echo = 2; //Echo pin of 1st Sesnor
const int Buzz = 13; //Echo pin of 1st Sesnor
const int Remote = A0; //Echo pin of 1st Sesnor
const int Light = A1; //Echo pin of 1st Sesnor
long time_taken;
int dist;
int Signal;
int Intens;
int similar_count;
void setup() {
Serial.begin(9600);
pinMode(Buzz,OUTPUT);
digitalWrite(Buzz,LOW);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
}
/*###Function to calculate distance###*/
void calculate_distance(int trigger, int echo)
{
digitalWrite(trigger, LOW);
delayMicroseconds(2);
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
time_taken = pulseIn(echo, HIGH);
dist= time_taken*0.034/2;
if (dist>300)
dist=300;
}
void loop() { //infinite loopy
calculate_distance(trigger,echo);
Signal = analogRead(Remote);
Intens = analogRead(Light);
//Check if Remote is pressed
int temp = analogRead(Remote);
similar_count=0;
while (Signal==temp)
{
Signal = analogRead(Remote);
similar_count++;
}
//If remote pressed
if (similar_count<100)
{
Serial.print(similar_count); Serial.println("Remote Pressed");
digitalWrite(Buzz,HIGH);delay(3000);digitalWrite(Buzz,LOW);
}
//If very dark
if (Intens<200) { Serial.print(Intens); Serial.println("Bright Light"); digitalWrite(Buzz,HIGH);delay(200);digitalWrite(Buzz,LOW);delay(200);digitalWrite(Buzz,HIGH);delay(200); digitalWrite(Buzz,LOW);delay(200); delay(500); } //If very bright if (Intens>800)
{
Serial.print(Intens); Serial.println("Low Light");
digitalWrite(Buzz,HIGH);delay(500);digitalWrite(Buzz,LOW);delay(500);digitalWrite(Buzz,HIGH);delay(500);
digitalWrite(Buzz,LOW);delay(500);
}
if (dist<50) { Serial.print(dist); Serial.println("Object Alert"); digitalWrite(Buzz,HIGH); for (int i=dist; i>0; i–)
delay(10);
digitalWrite(Buzz,LOW);
for (int i=dist; i>0; i–)
delay(10);
}
//Serial.print("dist=");
//Serial.println(dist);
//Serial.print("Similar_count=");
//Serial.println(similar_count);
//Serial.print("Intens=");
//Serial.println(Intens);
}
[/sourcecode]
https://www.youtube.com/watch?time_continue=232&v=wOk3h3s507o
Bu proje makalesi
https://circuitdigest.com sitesinde
B.Aswinth Raj tarafından yazılmıştır.]]>