လိုအပ်သော ပစ္စည်းများ
- Arduino Uno
- HC-06
- Motor Driver ( L298N )
- Dc Motors x2
- Ultrasonic Sensor
- Buzzer
- Some LEDs for decoration
- Resistors
- Jumpers
အခု ကျွန်မတို့လုပ်ထားတဲ့ project ကတော့ သင်္ဘောနဲ့သူ့ရဲ့ functions လေးတွေကို demonstrate လုပ်ပြဖို့အတွက် ရည်ရွယ်ထားတာပါ ။
အခုhardwareတွေတင်မယ့်သင်္ဘောပုံစံငယ်လေးကိုဘယ်လိုလုပ်လဲဆိုတာကိုရှင်းပြပေးသွားမှာပါ သင်္ဘောဆိုတော့ design ပိုင်းကိုအရင်စပြောပါမယ် သင်္ဘောမှာအဓိက (၂) ပိုင်းပါတာပေါ့နော်
၁.ထိပ်ဦးပိုင်း
၂.ကိုယ်ထည် သင်္ဘောပုံစံကိုဘယ်လို idea နဲ့လုပ်ခဲ့လဲဆိုရင်တော့
အဓိက arduino တွေ breadboard တွေ motor တွေ အစရှိတဲ့ hardware တွေတင်လို့ရလောက်မယ့်ပုံစံကိုအရင်စဉ်းစားလိုက်ပါတယ်။
သင်္ဘောဆောက်တဲ့အခါရေပေါ်ပေါ်ဖို့ကအရေးကြီးတာကြောင့် ရေခဲချောင်းမှာသုံးတဲ့သစ်သားချောင်းလေးတွေနဲ့ဖော့ကိုအဓိကသုံးထားပါတယ် ။
စလုပ်တဲ့အခါအောက်ခြေကအရေးကြီးပါတယ် အောက်ခြေကနေရေမဝင်နိုင်အောင် ၂ထပ်လုပ်လိုက်ပါတယ် ထိုနည်းတူဘေးဘောင်ကိုလဲ ၂ချပ်စီကပ်ပြီးလုပ်ထားပါတယ် ။
ဒီလောက်ဆိုရင်ကိုယ်ထည်ပိုင်းအကြမ်းဖျင်းပြီးသွားပါပြီ ထိပ်ဦးပိုင်းမှာလဲရေမဝင်အောင် hot glue gun တွေနဲ့သေချာကပ်ထားပါတယ် ဒီနေရာမှာအရေးကြီးတာတစ်ခုက သင်္ဘောကရေကိုခွင်းပြီးသွားမှာဖြစ်တဲ့အတွက်ကြောင့် ရှေ့ကိုချွန်ချွန်လေးဆောက်ထားပါတယ်။
**အရေးကြီးတာတစ်ခုရှိပါသေးတယ် သင်္ဘောကို balance ညီအောင်လုပ်ဖို့ပါ ဆောက်သာဆောက်လိုက်တယ် balance မညီရင်အဆင်မပြေပါဘူး ဒါ့ကြောင့် balance ညီမညီ မကြာခဏစစ်ပေးဖို့အရေးကြီးပါတယ် ။
အခုသင်္ဘောမှာဆိုရင်ထိပ်ဦးပိုင်းမှာနဲနဲအလေးချိန်များနေတဲ့အတွက်ကြောင့် အနောက်ဘက်နဲ့အလေးချိန်မျှအောင်ဆိုပြီးတော့အမိုးတစ်ထပ် ထပ်လုပ်လိုက်ပါတယ် ။
သင်္ဘောကဒီတိုင်းရိုးရိုးကြီးဆိုရင်သိပ်ကြည့်မကောင်းတဲ့အတွက်အလံလေးထောင်ထားပါတယ် ဒီနေရာမှာကိုယ်ကြိုက်သလို customize လုပ်လို့ရပါတယ်။ ဒါတွေအားလုံးပြီးသွားပြီဆိုရင်ေတာ့ နောက်ဆုံးအနေနဲ့ သင်္ဘောအောက်ခြေမှာဖော့တွေကပ်ပေးပြီး ရေကန်ထဲမှာ test လုပ်ကြည့်ဖို့ကအရေးကြီးပါတယ်။
Hardware ပိုင်း
HC-06 ကို port no-10(rx), 11(tx)တွင်တပ်ချင်သည်။ 5Vနှင့် ground ကိုလဲတပ်ဆင်ထား၏။ ENA ကို___၌တပ်ဆင်၍ ENBကို__၌တပ်တင်သည်။ Port no___တို့တွင်မူ N1,N2,N3,N4 တို့ကိုတပ်ဆင်ထားသည်။ ထို့နောက် output 1နှင့် output 2 တို့တွင် motor 2 လုံးကိုတပ်ဆင်ထားသည်။ ထို့နောက် buzzer ကို port __နှင့် port_ တွင်တပ်ဆင်ထားသည်။ ပြီးလျှင် ultrasonic အား port A0နှင့် port A1 တို့တွင် triggerနှင့် echo ကို တပ်ဆင်ထားသည်။ LED မီးသီးများကိုမူ port 2နှင့် 3 တွင်သုံးထားသည်။
Softwareware ပိုင်း
ဒီ Arduinoသင်္ဘောအား ထိန်းချုပ်ရန် Android softwareကို အောက်ပါ link တွင် download လုပ်နိုင်သည်။
softwareကား ကျွန်တော်တို့ကိုယ်တိုင် mit app inventorဖြင့် ဖန်တီးထားသည် သင်ကိုယ်တိုင်လည်း အလွယ်တကူ Android software ဖန်တီးလိုပါက အောက်ပါ link တွင် ဝင်ရောက် ဖန်တီးနိုင်သည်။
ကျွန်တော်တို့၏ သင်္ဘောcontrolလုပ်ရန် software ကို THP_ship_controller ဟူ၍ပေးထားသည် ဤsoftware တွင် သင်္ဘောအား အရှေ့ အနောက် ဘယ် ညာ သွားနိုင်ရန် ခလုတ်များအပြင် သင်္ဘောအတွက်မီးသီးများအဖွင့်အပိတ် ship horn များပြုလုပ်ခြင်းနှင့် သင်္ဘောမောင်းရာတွင် အရာဝတ္ထုများ ရှေ့တွင်ရှိမရှိကို ရှာဖွေပေးသော function လဲပါဝင်သည် ထိုfunctionကို အရာဝတ္ထုနှင့် ကျွန်ုပ်တို့၏သင်္ဘော အကွာအဝေးကို cm ဖြင့် စဉ်ဆက်မပြတ်ဖော်ပြပေးသည် ထိုအကွာအဝေးတွင် 0 cm ဖြစ်သွားပါက ရှေ့တွင်တခုခုနှင့်တိုက်မိနေပြီဖြစ်ကြောင်း သိနိုင်သည်။
Code
#include<SoftwareSerial.h>
SoftwareSerial Bluetooth(10,11);
char BluetoothReader;
int Sound = 262;
const int trigPin = A0;
const int echoPin = A1;
// defining variables
long duration;
int distance;
#define EA 6
#define EB 5
#define in1 13
#define in2 12
#define in3 8
#define in4 7
#define light1 2
#define light2 3
void setup() {
pinMode(trigPin, OUTPUT);
// Sets the trigPin as an Output
pinMode(echoPin, INPUT);
// Sets the echoPin as an Input
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(light1, OUTPUT);
pinMode(light2, OUTPUT);
Serial.begin(9600);
Bluetooth.begin(9600);
}
void loop() {
if(Bluetooth.available()>0){
BluetoothReader= Bluetooth.read();
Serial.println(BluetoothReader);
if(BluetoothReader=='s'){
//for straight forwards
analogWrite(EA, 150);
//speed 0 - 255
analogWrite(EB, 150);
//speed 0 - 255
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
else if(BluetoothReader=='b')
{
//for straight backwards
analogWrite(EA, 150);
//speed 0 - 255
analogWrite(EB, 150);
//speed 0 - 255
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
} else if(BluetoothReader=='l')
{
//for turning left
analogWrite(EA, 100);
//speed 0 - 255
analogWrite(EB, 150);
//speed 0 - 255
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
} else if(BluetoothReader=='r')
{
//for turning right
analogWrite(EA, 150);
//speed 0 - 255
analogWrite(EB, 100);
//speed 0 - 255
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
} else if(BluetoothReader=='n')
{
//for turing the lights on
digitalWrite(light1,HIGH);
digitalWrite(light2,HIGH);
} else if(BluetoothReader=='f')
{
//for turning the lights off
digitalWrite(light1,LOW);
digitalWrite(light2,LOW);
} else if(BluetoothReader=='t')
{
//for turning off the motor
analogWrite(EA, 150);
//speed 0 - 255
analogWrite(EB, 150);
//speed 0 - 255
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
} else if(BluetoothReader=='m')
{
//for starting the horn
tone(9,Sound);
} else if(BluetoothReader=='d')
{
//for stoping the horn
noTone(9);
}
}
// Clears the trigPin digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance= duration*0.034/2;
int distances = distance - 9;
// Prints the distance on the Serial Monitor
Bluetooth.print("");
//Serial.print(distance);
//Bluetooth.print(distance);
delay(900);
Bluetooth.print(distances );
Bluetooth.print("cm");
Bluetooth.println();
Serial.println(distance); }
SoftwareSerial ကို Bluetooth object ဆောက်၍ port နံပါတ်များသတ်မှတ်ထားသည်။
Bluetooth မှ ပို့လိုက်ပြော textများကို Bluetooth.readဖြင့်ဖတ်၍ အလွယ်တကူ Serial Monitorတွင် ထုတ်ကြည့်နိုင်ရန် BluetoothReader ဟူသော char variable သတ်မှတ်ထားသည်။
ဤ BluetoothReaderကို လာမည့်code serial.println() ဖြင့် ထုတ်ကြည့်ခြင်းကိုဆိုလိုသည်။
ထို့နောက် ship horn အတွက် Buzzer note_C4 ဖြစ်သည့် 262 ကို အသုံးပြုထားသည်။ EA သည် motor driver၏ ENA ကိုဆိုလိုသည်။ EB သည် motor driver၏ ENB ကိုဆိုလိုသည်။ ဤ port နံပါတ်များကို void setup() တွင် output ကြေညာစရာမလိုပါ PWM port များတွင်သာ တပ်ဆင်ထားရန်လိုသည်။ in1မှin4သည် motor driverမှ ENA နှင့် ENB အကြားရှိ portများကိုအစဉ်လိုက်ဆိုလိုထားသည်။ ထိုportများကိုမူ void setup()တွင် output ကြေညာရန်လိုအပ်သည်။ light1 နှင့် light2 သည် သင်္ဘောတွင်တပ်မည်ဖြစ်သော LED မီးသီးများကိုဆိုလိုသည်။ light1 portမှလာသော outputကို မီးသီး 3အတွက်သုံးထားသည် ကျန် light2 portကိုလည်း မီးသီး 3လုံးတွင် အသုံးပြုမည်ဖြစ်သည်။
void setupတွင်မူ output များသတ်မှတ်ထားခြင်းနှင့် Serial နှင့် Bluetooth ကို အသုံးပြုနိုင်ရန် Serial.begin(9600); နှင့် Bluetooth.begin(9600); ရေးထား၏။ void loop() ၏ အစတွင် if statement ဖြင့် condition စစ်ထားသည်။ Bluetooth.availableဖြစ်ပါက Bluetooth.read() ဖြင့် ဖတ်၍ ရှေ့တွင် Global ကြေညာထားသော BluetoothReader variable ထဲသို့ထည့်လိုက်၏။ ထို့နောက် Android device မှ ပို့သော textများကို Bluetooth မှတဆင့် serial motor တွင် ကြည့်နိုင်ရန် serial.println() တွင် BluetoothReader variable ကို ထည့်သွင်းထား၏။ ထို Android device မှပို့သော text ပေါ်မူတည်၍ if statement ထပ်မံအသုံးပြုထားသည်။ အကယ်၍ BluetoothReader သည် s ဟူသော char ဖြစ်ပါက အောက်ဖော်ပြပါ straight forwards အတွက်ရေးထားသော code ကို အလုပ်လုပ်မည်ဖြစ်သည်။
ဤ code တွင်မူ analogWrite() မှ parameter များကို သင်္ဘောနှင့်ကိုက်ညီအောင် သတ်မှတ်ထားခြင်းဖြစ်သည်။ ထို့နောက် backwards၊ right နှင့် left အတွက် code များ အစဉ်လိုက် comment တွင်ဖော်ပြထားသည်။ ဤတွင် အရေးအကြီးသောအချက်တစ်ခုကျန်ပေသေးသည်။ motor များကို left right forwards backwards များအပြင် motorလည်ခြင်းကိုရပ်ရန်အတွက် stop code ပါဝင်သည်။ ထို့နောက်မီးသီးများအဖွင့်အပိတ်အတွက် ဖော်ပြထားသည်။ ပြီးလျှင် buzzer code ကိုထည့်သွင်းထားသည်။ နောက်ဆုံးတွင် ultrasonic code ကိုထည့်သွင်းထား၍ Bluetooth မှတဆင့် android phone တွင် အကွာအဝေးကိုဖော်ပြပေးမည်ဖြစ်သည်။
Testing
This Project is made by Tin Yu Phoo Pyae Sone Hsu Yati Winn
Comments