Ultrasonic sensörler ses dalgalarından etkilenerek elektriksel değişim gösteren sensörlerdir. Bu sensörler kulağımızın algılayamayacağı frekansta ses dalgaları gönderirler ve yansıyan ses dalgalarının geri geliş süresinin hesaplanması ile mesafe bilgisi üretirler. Biz programcılar ise ölçülen mesafeyi ve mesafedeki değişimleri anlamlandırarak projeler geliştiririz. Otomobillerin ön ve arkasında bulunan park sensörleri ultrasonic sensörlerin günlük yaşamda en çok karşımıza çıktığı yerlerdir. Doğada bu yöntemle yönünü bulan canlıyı biliyor musun? Yarasalar kör oldukları için çıkardıkları seslerin yansımalarından yollarını bulurlar.
Bir çoğumuz para biriktirmeyi severiz. Azar azar biriktirdiğimiz paraların ihtiyaç halinde işe yaraması çok güzel bir duygudur. Bu projede kendine çok eğlenceli ve sevecen bir kumbara yapacaksın. Kumbarayı yaparken servo motor ve ultrasonik mesafe sensörünü kullanacaksın.
Proje Detayları ve Algoritma
Bu projede HC-SR04 ultrasonic mesafe sensörü ve SG90 servo motor kullanılacaktır. Kumbaranın haznesine kullanıcı parak bıraktığında mesafe sensörü yakınlığı algılayacak ve Picobrickse gönderecektir. Picobricks de bu bilgiye göre servo motor çalıştırarak kolu yukarı kaldıracak, parayı kumbaranın içine atacak ve kol tekrar aşağı inecektir.
Bağlantı Şeması
Projenin MicroBlocks ile Kodlanması
Kodları yazarken ilk olarak servo motorun açısını düzenlemelisin. Kumbaranın kapağını kapalı konuma getirmek için servo motora açı değerleri girmeli ve en uygun değerli belirlemelisin. Daha sonra kumbaranın kapağının açık olduğu pozisyondaki servo motor açısını bulmalısın. Kumbara ilk başladığında kapak kapalı konumda olmalıdır. Ultrasonic mesafe sensöründen gelen değer 5 cm den küçük olduğunda 2 saniye bekleyip servo motor çalışarak kapağı yukarı kaldırmalı ve 300 milisaniye sonra tekrar çalışarak kapağı kapalı konuma getirmelidir.
Projenin MicroBlocks kodlarına ulaşmak için tıkla.
Projenin Yapım Aşamaları
Projenin orjinal dosyaları ve yapım aşamaları sayfasına buraya tıklayarak erişebilirsin. Bu linkteki çalışmadan farklı olarak biz HC-SR04 ultrasonic mesafe sensörü kullanacağız. HC-SR04 ultrasonic mesafe sensörüne göre güncellenmiş 3D çizim dosyalarını bu linkten indirebilir ve 3D baskı alabilirsin.
1: Servo motorun plastik aparatını 2 adet vida ile kumbara koluna sabitle.
2: Kumbara kolunun ikinci parçasını M3 vida ve somun ile haznenin bulunduğu birinci parçaya sabitle.
3: servo motoru kablosunu geçirerek yuvasına yerleştir.
4: Servo motor ve yuvasını kumbaranın gövdesine yerleştir. Burada sıcak silikon kullanabilirsin.
5: Ultrasonic mesafe sensörünü kumbara gövdesine yerleştir ve sıcak silikon ile sabitle.
6: Kumbara kolunu servo motora tak ve üst kapağa M3 vida ile sabitle.
7: kumbara kolunu gövdeye M2 vida ile sabitle.
8: Servo motor ve ultrasonic mesafe sensörün kablolarını tak ve güç kablolarını birleştir.
9: Devre şemasına göre servo motor ve ultrasonic mesafe sensörün kablolarını picoya tak.
10: Pico nun USB kablosu tak ve kabloları toparlayarak alt kapağı tak. Hepsi bu kadar.
Proje Önerisi
Obur kumbara projesine RGB led modülü ekleyerek her para atıldığında dilediğin renkte ışık yanmasını sağlayabilir, buzzer ekleyerek her para atıldığında ses çıkmasını sağlayabilirsin. Ayrıca OLED ekran ekleyerek kaç kere para atıldığını ekrana yazdırabilirsin.
Projenin MicroPython Kodları
from machine import Pin, PWM
from utime import sleep
import utime
servo=PWM(Pin(21,Pin.OUT))
trigger = Pin(15, Pin.OUT)
echo = Pin(14, Pin.IN)
servo.freq(50)
servo.duty_u16(4010) #70 degree
def getDistance():
trigger.low()
utime.sleep_us(2)
trigger.high()
utime.sleep_us(5)
trigger.low()
while echo.value() == 0:
signaloff = utime.ticks_us()
while echo.value() == 1:
signalon = utime.ticks_us()
timepassed = signalon - signaloff
distance = (timepassed * 0.0343) / 2
print("The distance from object is ",distance,"cm")
return distance
while True:
sleep(0.01)
if int(getDistance())<=5:
servo.duty_u16(7050) #150 degree
sleep(0.3)
servo.duty_u16(4010)
Projenin Arduino C Kodları
#include <NewPing.h>
#include <Servo.h>
Servo myservo;
#define TRIGGER_PIN 15
#define ECHO_PIN 14
#define MAX_DISTANCE 400
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
myservo.attach(21);
myservo.write(20);
}
void loop() {
delay(50);
int distance=sonar.ping_cm();
if(distance<10){
int x=100;
int y=20;
delay(2000);
myservo.write(x);
delay(300);
myservo.write(y);
}
}