Pada kesempatan yang baik ini marilah berkreasi melanjutkan latihan Mikrokontroler Arduino dengan motor servo. Idenya adalah memanfaatkan servo sebagai palang parkir. Jadi pintu parkiran ini dapat membuka 90 derajat dan dapat menutup kembali dengan dikendalikan melalui saklar atau tombol tekan. Jadi terdapat dua buah saklar tekan dimana satu saklar untuk membuka dan satu saklar untuk menutup.
Komponen yang diperlukan dalam percobaan ini adalah
- Mikrokontroller Arduino Mega ( untuk yg menggunakan jenis yang lain silahkan sesuaikan kakinya yaaa)
- Motor Servo
- Bredboard
- Kabel Jumper secukupnya
- Tactile Switch
- Resistor 1 Kilo Ohm
Komponen komponen di atas kita susun menjadi rangkaian seperti di bawah ini
Untuk rekan rekan yang ingin mencoba dan kebetulan jenis mikrokontrolernya Arduino Uno maka kakinya silahkan di sesuaikan dan jangan lupa programnya juga di sesuaikan. Kakang percaya deeech. sodara pasti bisa...
Lissting programnya adalah sebagai berikut
----------------------------------------------------------------
#include <Servo.h>
Servo myservo;
int pos = 0;
int n;
void setup()
{
pinMode(22,INPUT);
pinMode(26,INPUT);
myservo.attach(9);
for(pos = 90; pos>=0; pos-=1)
{
myservo.write(pos);
delay(15);
}
delay(2215);}
void loop()
{
if (digitalRead(22)==1) {
myservo.write(n); n+=1;
delay(9); if(n>=90) n=90;
}
if (digitalRead(26)==1) {
myservo.write(n); n-=1;
delay(9); if(n<=0) n=0;
}}
----------------------------------------------------------------
Program di atas silahkan di coba kemudian cobalah buka tutup pintunya. untuk mengoperasikannya maka kita harus menekan tombolnya terus menerus. wah berabe yaaa.. itulah kelemahan program dalam latihan satu ini
Nah di bawah adalah program yang sudah dimodipikasi. coba deh rasakan bedanya. yang jelas tidak perlu menekan tombol terus menerus
Program Palang parkiran buka tutup 90 derajat
----------------------------------------------------------------
Servo myservo;
int pos = 0;
int n;
void setup()
{
pinMode(22,INPUT);
pinMode(26,INPUT);
myservo.attach(9);
for(pos = 90; pos>=0; pos-=1)
{
myservo.write(pos);
delay(15);
}
delay(2215);}
void loop()
{
if (digitalRead(22)==1) {
for(pos = 90; pos>=0; pos-=1)
{
myservo.write(pos);
delay(10);
}}
if (digitalRead(26)==1) {
for(pos = 0; pos<=80; pos +=1)
{
myservo.write(pos);
delay(10);
} } }
Kelemahan program di atas jika coba tutup deh. kemudian tekan tutup lagi. pintu akan terbuka dulu kemudian menutup kembali. seharusnya jika sudah tertutup ya tidak usah membuka dulu dooonk. Baiklah sekarang mari kita perbaiki kesalahan di atas. Nah kita harus perbaiki programnya dengan menambahkan nilai logika.
Nah program yang di bawah sudah di coba. ayo coba dipraktekan .. Semangaaath.....
----------------------------------------------------------------
#include <Servo.h>
Servo myservo;
int pos = 0;
int n;
void setup()
{
pinMode(22,INPUT);
pinMode(26,INPUT);
myservo.attach(9);
for(pos = 90; pos>0; pos-=1)
{
myservo.write(pos);
delay(15);
}
delay(2215);}
void loop()
{
if (digitalRead(22)==1 && pos == 90) {
for(pos = 90; pos>=1; pos-=1)
{
myservo.write(pos);
delay(10);
}}
if (digitalRead(26)==1 && pos== 0) {
for(pos = 0; pos<90; pos +=1)
{
myservo.write(pos);
delay(10);
} }
}
Untuk selanjutnya marilah kita percantik hasil latihan di atas dengan menambahkan sebuah lcd. Tujuannya untuk menambah latihan dan tampilan alatnya lebih gagah. lihat lah gambar di bawah ini.
ini adalah listing Program dengan tambahan LCD coba prakteekan dan lihat perbedaannya.. walau hanya sedikit tetapi akan tampak lebih manis. cobalah terus kembangkan sendiri sesuai imajinasi. Semangath yaaaa......
----------------------------------------------------------------
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include <Servo.h>
Servo myservo;
int pos = 0;
int n;
String b;
void setup()
{
lcd.begin(16, 2);
pinMode(22,INPUT);
pinMode(26,INPUT);
myservo.attach(9);
for(pos = 90; pos>0; pos-=1)
{
myservo.write(pos);
delay(15);
}
b ="Pintu Tertutup";
delay(2215);}
void loop()
{
if (digitalRead(22)==1 && pos == 90) {
for(pos = 90; pos>=1; pos-=1)
{
myservo.write(pos);
delay(10);
b ="Pintu Tertutup";
}}
if (digitalRead(26)==1 && pos== 0) {
for(pos = 0; pos<90; pos +=1)
{
myservo.write(pos);
delay(10);
b="Pintu Terbuka";
} } lcd.setCursor(0, 0); lcd.clear();
// print the number of seconds since reset:
lcd.print(b); delay (311);
}
Bersambuuung... Pada kesempatan yang lain akan di lanjut kembali
Nah program yang di bawah sudah di coba. ayo coba dipraktekan .. Semangaaath.....
----------------------------------------------------------------
#include <Servo.h>
Servo myservo;
int pos = 0;
int n;
void setup()
{
pinMode(22,INPUT);
pinMode(26,INPUT);
myservo.attach(9);
for(pos = 90; pos>0; pos-=1)
{
myservo.write(pos);
delay(15);
}
delay(2215);}
void loop()
{
if (digitalRead(22)==1 && pos == 90) {
for(pos = 90; pos>=1; pos-=1)
{
myservo.write(pos);
delay(10);
}}
if (digitalRead(26)==1 && pos== 0) {
for(pos = 0; pos<90; pos +=1)
{
myservo.write(pos);
delay(10);
} }
}
----------------------------------------------------------------
Hasil dari program di atas adalah pintu akan terbuka bila menekan tombol buka dan akan menutup bila menekan tombol untuk menutup, jika pintu sudah tertutup kemudian kita menekan tombol untuk menutup maka pintu akan diam saja tidak ada reaksi dan begitu juga bila pintu dalam keadaan terbuka dan kita menekan tombol untuk membuka maka pintu tidak beraksi karena sudah membuka. inilah yang kita harapkan, tidak seperti program sebelumnya.Untuk selanjutnya marilah kita percantik hasil latihan di atas dengan menambahkan sebuah lcd. Tujuannya untuk menambah latihan dan tampilan alatnya lebih gagah. lihat lah gambar di bawah ini.
ini adalah listing Program dengan tambahan LCD coba prakteekan dan lihat perbedaannya.. walau hanya sedikit tetapi akan tampak lebih manis. cobalah terus kembangkan sendiri sesuai imajinasi. Semangath yaaaa......
----------------------------------------------------------------
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include <Servo.h>
Servo myservo;
int pos = 0;
int n;
String b;
void setup()
{
lcd.begin(16, 2);
pinMode(22,INPUT);
pinMode(26,INPUT);
myservo.attach(9);
for(pos = 90; pos>0; pos-=1)
{
myservo.write(pos);
delay(15);
}
b ="Pintu Tertutup";
delay(2215);}
void loop()
{
if (digitalRead(22)==1 && pos == 90) {
for(pos = 90; pos>=1; pos-=1)
{
myservo.write(pos);
delay(10);
b ="Pintu Tertutup";
}}
if (digitalRead(26)==1 && pos== 0) {
for(pos = 0; pos<90; pos +=1)
{
myservo.write(pos);
delay(10);
b="Pintu Terbuka";
} } lcd.setCursor(0, 0); lcd.clear();
// print the number of seconds since reset:
lcd.print(b); delay (311);
}
----------------------------------------------------------------
Tidak ada komentar:
Posting Komentar