Arduino ile Yangın Söndüren Robot Yapımı
Arduino ile yapılabilecek çok fazla eğlenceli proje bulunuyor. Bu yazımızda hep birlikte yangın söndüren robot yapacağız. Bir robot tasarlayıp, ateşe doğru hareket edip, ateşin yakınına geldiğinde ise su püskürten bir araç. Evet bu robotu Arduino ile tasarlayabiliriz. Detaylar yazımızın devamında.
26.01.2022 tarihli yazı 7352 kez okunmuştur.
Yazımızda Arduino ile yangın söndüren robot yapımı için gerekli malzemeleri, çalışma şeklini ve kod satırını derledik.
Yangın Söndüren Robot Malzemeleri
►Arduino UNO
►Fire Sensor ya da Flame Sensor( 3 tane ) (Ateş Sensörü)
►Servo Motor (SG 90)
►L298N Motor Sürücü
►Mini DC Dalgıç Pompa
►Breadbroad
►Fire Sensor ya da Flame Sensor( 3 tane ) (Ateş Sensörü)
►Servo Motor (SG 90)
►L298N Motor Sürücü
►Mini DC Dalgıç Pompa
►Breadbroad
►Motorlu (2) ve tekerli (2) robot şasesi
►Küçük bir kutu
►Jamper kablo
►BC237 transistör ve 1N4001 diyot
►Küçük bir kutu
►Jamper kablo
►BC237 transistör ve 1N4001 diyot
Yangın Söndüren Robotun Çalışma Şekli
Bu projenin ana beyni Arduino‘dur, ancak ateşi algılamak için ateş sensörü gereklidir. Bu sensör 760m nm–1100 nm arasındaki dalga boyuna sahip ateşi tespit etmek için kullanılır. Üzerinde bir tane IR alıcı vardır. Yangın esnasında alevlerin oluşturduğu küçük IR dalgalarını algıladığında çıkış bacağında lojik 1 sinyal üretmektedir. Çalışma voltajı 5 volttur.Böylece ateşin hangi yönde olduğunu anlamak için robotun üç yönüne bu sensörü yerleştireceğiz.
Motorlarımızı L298N modülü üzerinden sürerek yangının yönüne hareket ediyoruz. Bir ateşin yanındayken su kullanarak söndürmemiz gerekir. Küçük bir kap kullanarak su taşıyabiliriz, kabın içine 5V'luk bir pompa da yerleştirilmiştir ve tüm kap bir servo motorun üzerine yerleştirilmiştir, böylece suyun püskürtülmesi gereken yönü kontrol edebiliriz. Ancak, Arduino’nun dijital pinlerinden verdiği akım, bu motoru çalıştırmak için yetmemektedir. Bundan dolayı transistörlü bir anahtarlama devresi kurulmuştur.
Yukarıdaki devreyi kurmamız gerekiyor, eğer bu anahtarlama devresini kurmazsak su motorumuz çok verimli çalışmıyor. Ayrıca devrede diyot kullandık. Neden? Çünkü devrede oluşacak olan ters emk, motora ve devreye problem çıkarır. Bunu engellemek için bir tane diyot kullandık. Şimdi ise asıl devremizi tasarlayalım.
Arduino Yazılımı
Servo motor 12 numaralı pine, ateş sensörleri 7, 8 ve 9 numaralı pinlere, L298N motor sürücünün input pinleri 5, 4, 3 ve 2 numaralı pinlere, ENA 11, ENB 6 numaralı pine, su motoru ise 10 numaralı pine bağlanmıştır.Servo motoru kullanabilmek için servo motorun kütüphanesi kullanılmıştır.
#include <Servo.h>
Araç ilk çalışmaya başladığında servo motor 90 derecelik açıya ayarlanmaktadır.
myServo.write(90);
Ateş sensörlerinden gelen veriler okunur:
ates_sag=digitalRead(sag_s);
ates_orta=digitalRead(orta_s);
ates_sol=digitalRead(sol_s);
Sensörlerden gelen verilere göre araç hareket ettirilir:
if(!ates_sag){
motor_sag();
}
if(!ates_sol){
motor_sol();
}
if(!ates_orta){
motor_orta();
ates=true;
}
if(ates_sag == 1 && ates_orta==1 &&ates_sol==1){
motor_dur();
}
Eğer boolean olarak tanımlanan ateş değişkeni true olduğunda:
while(ates){
ates_sondur();
}
Ates_sondur fonksiyonu:
void ates_sondur(){
Serial.println("Ates sondur");
motor_dur();
delay(500);
digitalWrite(pomp,HIGH);
delay(500);
for(pos = 50;pos<=130;pos+=1){
myServo.write(pos);
delay(10);
}
for(pos = 130;pos>=50;pos-=1){
myServo.write(pos);
delay(10);
}
digitalWrite(pomp,LOW);
myServo.write(90);
ates=false;
Araç ilk çalışmaya başladığında servo motor 90 derecelik açıya ayarlanmaktadır.
myServo.write(90);
Ateş sensörlerinden gelen veriler okunur:
ates_sag=digitalRead(sag_s);
ates_orta=digitalRead(orta_s);
ates_sol=digitalRead(sol_s);
Sensörlerden gelen verilere göre araç hareket ettirilir:
if(!ates_sag){
motor_sag();
}
if(!ates_sol){
motor_sol();
}
if(!ates_orta){
motor_orta();
ates=true;
}
if(ates_sag == 1 && ates_orta==1 &&ates_sol==1){
motor_dur();
}
Eğer boolean olarak tanımlanan ateş değişkeni true olduğunda:
while(ates){
ates_sondur();
}
Ates_sondur fonksiyonu:
void ates_sondur(){
Serial.println("Ates sondur");
motor_dur();
delay(500);
digitalWrite(pomp,HIGH);
delay(500);
for(pos = 50;pos<=130;pos+=1){
myServo.write(pos);
delay(10);
}
for(pos = 130;pos>=50;pos-=1){
myServo.write(pos);
delay(10);
}
digitalWrite(pomp,LOW);
myServo.write(90);
ates=false;
}
Servo myServo;
#define sol_s 9
#define sag_s 7
#define orta_s 8
#define pomp 10
#define in1 5
#define in2 4
#define in3 3
#define in4 2
#define enA 11
#define enB 6
int ates_sag;
int ates_sol;
int ates_orta;
boolean ates=false;
int pos = 0;
void setup (){
Serial.begin(9600);
pinMode(sol_s, INPUT);
pinMode(sag_s, INPUT);
pinMode(orta_s, INPUT);
pinMode(pomp, OUTPUT);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(enA,OUTPUT);
pinMode(enB,OUTPUT);
myServo.attach(12);
myServo.write(90);
}
void loop(){
myServo.write(90);
ates_sag=digitalRead(sag_s);
ates_orta=digitalRead(orta_s);
ates_sol=digitalRead(sol_s);
if(!ates_sag){
motor_sag();
}
if(!ates_sol){
motor_sol();
}
if(!ates_orta){
motor_orta();
ates=true;
}
if(ates_sag == 1 && ates_orta==1 &&ates_sol==1){
motor_dur();
}
delay(300);
while(ates){
ates_sondur();
}
}
void motor_sag(){
Serial.println("Motor sag");
// sag motor
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
analogWrite(enA,0);
// sol motor
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
analogWrite(enB,150);
}
void motor_sol(){
Serial.println("Motor sol");
// sag motor
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
analogWrite(enA,150);
// sol motor
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
analogWrite(enB,0);
}
void motor_orta(){
Serial.println("Motor duz");
// sag motor
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
analogWrite(enA,150);
// sol motor
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
analogWrite(enB,150);
}
void motor_dur(){
Serial.println("Motor dur");
// sag motor
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
analogWrite(enA,0);
// sol motor
digitalWrite(in3,LOW);
digitalWrite(in4,LOW);
analogWrite(enB,0);
}
void ates_sondur(){
Serial.println("Ates sondur");
motor_dur();
delay(500);
digitalWrite(pomp,HIGH);
delay(500);
for(pos = 50;pos<=130;pos+=1){
myServo.write(pos);
delay(10);
}
for(pos = 130;pos>=50;pos-=1){
myServo.write(pos);
delay(10);
}
digitalWrite(pomp,LOW);
myServo.write(90);
ates=false;
}
Kaynak:
►circuitdigest.com
►electronicshub.org
►duino4projects.com
Kod:
#include <Servo.h>Servo myServo;
#define sol_s 9
#define sag_s 7
#define orta_s 8
#define pomp 10
#define in1 5
#define in2 4
#define in3 3
#define in4 2
#define enA 11
#define enB 6
int ates_sag;
int ates_sol;
int ates_orta;
boolean ates=false;
int pos = 0;
void setup (){
Serial.begin(9600);
pinMode(sol_s, INPUT);
pinMode(sag_s, INPUT);
pinMode(orta_s, INPUT);
pinMode(pomp, OUTPUT);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(enA,OUTPUT);
pinMode(enB,OUTPUT);
myServo.attach(12);
myServo.write(90);
}
void loop(){
myServo.write(90);
ates_sag=digitalRead(sag_s);
ates_orta=digitalRead(orta_s);
ates_sol=digitalRead(sol_s);
if(!ates_sag){
motor_sag();
}
if(!ates_sol){
motor_sol();
}
if(!ates_orta){
motor_orta();
ates=true;
}
if(ates_sag == 1 && ates_orta==1 &&ates_sol==1){
motor_dur();
}
delay(300);
while(ates){
ates_sondur();
}
}
void motor_sag(){
Serial.println("Motor sag");
// sag motor
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
analogWrite(enA,0);
// sol motor
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
analogWrite(enB,150);
}
void motor_sol(){
Serial.println("Motor sol");
// sag motor
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
analogWrite(enA,150);
// sol motor
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
analogWrite(enB,0);
}
void motor_orta(){
Serial.println("Motor duz");
// sag motor
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
analogWrite(enA,150);
// sol motor
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
analogWrite(enB,150);
}
void motor_dur(){
Serial.println("Motor dur");
// sag motor
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
analogWrite(enA,0);
// sol motor
digitalWrite(in3,LOW);
digitalWrite(in4,LOW);
analogWrite(enB,0);
}
void ates_sondur(){
Serial.println("Ates sondur");
motor_dur();
delay(500);
digitalWrite(pomp,HIGH);
delay(500);
for(pos = 50;pos<=130;pos+=1){
myServo.write(pos);
delay(10);
}
for(pos = 130;pos>=50;pos-=1){
myServo.write(pos);
delay(10);
}
digitalWrite(pomp,LOW);
myServo.write(90);
ates=false;
}
Kaynak:
►circuitdigest.com
►electronicshub.org
►duino4projects.com
YORUMLAR
Aktif etkinlik bulunmamaktadır.
- Dünyanın En Görkemli 10 Güneş Tarlası
- Dünyanın En Büyük 10 Makinesi
- 2020’nin En İyi 10 Kişisel Robotu
- Programlamaya Erken Yaşta Başlayan 7 Ünlü Bilgisayar Programcısı
- Üretimin Geleceğinde Etkili Olacak 10 Beceri
- Olağan Üstü Tasarıma Sahip 5 Köprü
- Dünyanın En İyi Bilim ve Teknoloji Müzeleri
- En İyi 5 Tıbbi Robot
- Dünyanın En Zengin 10 Mühendisi
- Üretim için 6 Fabrikasyon İşlemi
- DrivePro Yaşam Döngüsü Hizmetleri
- Batarya Testinin Temelleri
- Enerji Yönetiminde Ölçümün Rolü: Verimliliğe Giden Yol
- HVAC Sistemlerinde Kullanılan EC Fan, Sürücü ve EC+ Fan Teknolojisi
- Su İşleme, Dağıtım ve Atık Su Yönetim Tesislerinde Sürücü Kullanımı
- Röle ve Trafo Merkezi Testlerinin Temelleri | Webinar
- Chint Elektrik Temel DIN Ray Ürünleri Tanıtımı
- Sigma Termik Manyetik Şalterler ile Elektrik Devrelerinde Koruma
- Elektrik Panoları ve Üretim Teknikleri
- Teknik Servis | Megger Türkiye
ANKET