Hardware
ใช้ Arduino UNO ขนาด 8 บิต ATMega 328P ในโครงการเพื่อควบคุมส่วนประกอบต่างๆเช่นโมดูลบลูทู ธ และเครือข่ายรีเลย์
อุปกรณ์
- Arduino UNO
- HC – 05 Bluetooth Module
- ตัวต้านทาน10 KΩ
- 20 KΩ Resistor
- ตัวต้านทาน1 KΩ X 4
- ทรานซิสเตอร์ 2N2222 NPN X 4
- ไดโอด 1N4007 X 4
- รีเรย์ 12 V X 4
- Prototyping board (Bread board)
- สายต่อ
- แหล่งจ่าย 12 V
- Smartphone or tablet (Bluetooth enabled)
HC05 Bluetooth Module
Smartphone or tablet (Bluetooth enabled)
MCU
Arduino Uno
OUTPUT
รีเรย์ 12V ,โหลด
#include <SoftwareSerial.h> //กำหนดเรียกใช้ใน ไลบรารี่ บลูทูธ
const int rxPin = 4; //กำหนดไปที่ rxPinขา4
const int txPin = 2; //กำหนดไปที่ txPinขา2
SoftwareSerial mySerial(rxPin, txPin); //ไว้ใช้กำหนดค่าลงใน ไลบรารีบลูทูธ
const int Loads[] = {9, 10, 11, 12}; //ตัวแปรอาเรย์
int state = 0; //ตัวแปล state = 0
int flag = 0; //ตัวแปล flag = 0
void setup() //ทำหน้าที่ setup ตามจุดประสงค์ที่ต้องการ
for (int i=0;i<4;i++) //int=0<4และi+เรื่อยๆ
{
pinMode(Loads[i], OUTPUT); //สั่งกำหนดใช้ Load เก็บค่าตัวแปร อาเรย์ i เป็น OUTPUT
}
mySerial.begin(9600); //แสดงข้อมูลทางออกของ Serial Monitor
for (int i=0;i<4;i++) //int=0<4และi+เรื่อยๆ
{
digitalWrite(Loads[i], LOW); //Load[i]เป็นLOW
}
}
void loop() //คำสั่งที่จะสั่งให้ทำงาน
{
if(mySerial.available() > 0) // if คำสั่งนี้สามารถต่อไปได้เรื่อยๆจนกว่าจะพอใจ
{
state = mySerial.read(); //stateการอ่านค่า
flag=0; //flag = 0
}
switch(state) //จะตรวจสอบว่าตัวแปรมีค่าเท่ากับ case ใด
{
case '0':digitalWrite(Loads[0], HIGH); //กำหนดcase 0 แสดงค่า Load อาเรย์ 0 ตั้งเป็น High
flag=1; // flag=1
break; //หยุดการทำงาน
case '1':digitalWrite(Loads[0], LOW); //กำหนดcase 1 แสดงค่า Load อาเรย์ 0 ตั้งเป็น LOW
flag=1; //flag=1
break; //หยุดการทำงาน
case '2':digitalWrite(Loads[1], HIGH); //กำหนดcase 2 แสดงค่า Load อาเรย์ 1 ตั้งเป็น HIGH
flag=1; //flag=1
break; //หยุดการทำงาน
case '3':digitalWrite(Loads[1], LOW); //กำหนดcase 3 แสดงค่า Load อาเรย์ 1 ตั้งเป็น LOW
flag=1; //flag=1
break; //หยุดการทำงาน
case '4':digitalWrite(Loads[2], HIGH); //กำหนดcase 4 แสดงค่า Load อาเรย์ 2 ตั้งเป็น HIGH
flag=1; //flag=1
break; //หยุดการทำงาน
case '5':digitalWrite(Loads[2], LOW); //กำหนดcase 5 แสดงค่า Load อาเรย์ 2 ตั้งเป็น LOW
flag=1; //flag=1
break; //หยุดการทำงาน
case '6':digitalWrite(Loads[3], HIGH); //กำหนดcase 6 แสดงค่า Load อาเรย์ 3 ตั้งเป็น HIGH
flag=1; //flag=1
break; //หยุดการทำงาน
case '7':digitalWrite(Loads[3], LOW); //กำหนดcase 7 แสดงค่า Load อาเรย์ 3 ตั้งเป็น LOW
flag=1; //flag=1
break; //หยุดทำงาน
case '8':digitalWrite(Loads[0], LOW); //กำหนดcase 8 แสดงค่า Load อาเรย์ 0 ตั้งเป็น LOW
digitalWrite(Loads[1], LOW); //กำหนดค่า Load อาเรย์ 1 เป็น LOW
digitalWrite(Loads[2], LOW); //กำหนดค่า Load อาเรย์ 2 เป็น LOW
digitalWrite(Loads[3], LOW); //กำหนดค่า Load อาเรย์ 3 เป็น LOW
flag=1; //flag=1
break; //หยุดการทำงาน
}
}
SOFTWARE
#include <SoftwareSerial.h> //กำหนดเรียกใช้ใน ไลบรารี่ บลูทูธ
const int rxPin = 4; //กำหนดไปที่ rxPinขา4
const int txPin = 2; //กำหนดไปที่ txPinขา2
SoftwareSerial mySerial(rxPin, txPin); //ไว้ใช้กำหนดค่าลงใน ไลบรารีบลูทูธ
const int Loads[] = {9, 10, 11, 12}; //ตัวแปรอาเรย์
int state = 0; //ตัวแปล state = 0
int flag = 0; //ตัวแปล flag = 0
void setup() //ทำหน้าที่ setup ตามจุดประสงค์ที่ต้องการ
for (int i=0;i<4;i++) //int=0<4และi+เรื่อยๆ
{
pinMode(Loads[i], OUTPUT); //สั่งกำหนดใช้ Load เก็บค่าตัวแปร อาเรย์ i เป็น OUTPUT
}
mySerial.begin(9600); //แสดงข้อมูลทางออกของ Serial Monitor
for (int i=0;i<4;i++) //int=0<4และi+เรื่อยๆ
{
digitalWrite(Loads[i], LOW); //Load[i]เป็นLOW
}
}
void loop() //คำสั่งที่จะสั่งให้ทำงาน
{
if(mySerial.available() > 0) // if คำสั่งนี้สามารถต่อไปได้เรื่อยๆจนกว่าจะพอใจ
{
state = mySerial.read(); //stateการอ่านค่า
flag=0; //flag = 0
}
switch(state) //จะตรวจสอบว่าตัวแปรมีค่าเท่ากับ case ใด
{
case '0':digitalWrite(Loads[0], HIGH); //กำหนดcase 0 แสดงค่า Load อาเรย์ 0 ตั้งเป็น High
flag=1; // flag=1
break; //หยุดการทำงาน
case '1':digitalWrite(Loads[0], LOW); //กำหนดcase 1 แสดงค่า Load อาเรย์ 0 ตั้งเป็น LOW
flag=1; //flag=1
break; //หยุดการทำงาน
case '2':digitalWrite(Loads[1], HIGH); //กำหนดcase 2 แสดงค่า Load อาเรย์ 1 ตั้งเป็น HIGH
flag=1; //flag=1
break; //หยุดการทำงาน
case '3':digitalWrite(Loads[1], LOW); //กำหนดcase 3 แสดงค่า Load อาเรย์ 1 ตั้งเป็น LOW
flag=1; //flag=1
break; //หยุดการทำงาน
case '4':digitalWrite(Loads[2], HIGH); //กำหนดcase 4 แสดงค่า Load อาเรย์ 2 ตั้งเป็น HIGH
flag=1; //flag=1
break; //หยุดการทำงาน
case '5':digitalWrite(Loads[2], LOW); //กำหนดcase 5 แสดงค่า Load อาเรย์ 2 ตั้งเป็น LOW
flag=1; //flag=1
break; //หยุดการทำงาน
case '6':digitalWrite(Loads[3], HIGH); //กำหนดcase 6 แสดงค่า Load อาเรย์ 3 ตั้งเป็น HIGH
flag=1; //flag=1
break; //หยุดการทำงาน
case '7':digitalWrite(Loads[3], LOW); //กำหนดcase 7 แสดงค่า Load อาเรย์ 3 ตั้งเป็น LOW
flag=1; //flag=1
break; //หยุดทำงาน
case '8':digitalWrite(Loads[0], LOW); //กำหนดcase 8 แสดงค่า Load อาเรย์ 0 ตั้งเป็น LOW
digitalWrite(Loads[1], LOW); //กำหนดค่า Load อาเรย์ 1 เป็น LOW
digitalWrite(Loads[2], LOW); //กำหนดค่า Load อาเรย์ 2 เป็น LOW
digitalWrite(Loads[3], LOW); //กำหนดค่า Load อาเรย์ 3 เป็น LOW
flag=1; //flag=1
break; //หยุดการทำงาน
}
}
FLOWCHART
-ขอบคุณที่ให้โอกาสครับ ^_^


ไม่มีความคิดเห็น:
แสดงความคิดเห็น