Arduino UNO : ( MCU )
ใช้ Arduino UNO ขนาด 8 บิต ATMega 328P
ควบคุมส่วนประกอบต่างๆเช่นโมดูลบลูทูธ และ รีเลย์
โมดูลบลูทูธ : ( INPUT )
โมดูล Bluetooth ที่ใช้คือ HC-05 ดังรูปที่ด้านล่างโมดูลบลูทู ธ นี้มีขา 4
ขาสำหรับ VCC (5V), พื้นดิน, TX และ RX
โมดูลบลูทู ธ มีขา 4 ขา: VCC, TX, RX และ GND VCC และ GND เชื่อมต่อกับ 5V และใช้
Ground จาก Arduino UNO โมดูลบลูทู ธ ทำงานบน 3.3V และมีตัวควบคุม 5V ถึง 3.3V
บนเมนบอร์ด
หมุด TX และ RX ของโมดูลบลูทู ธ ต้องเชื่อมต่อกับ RX และ TX pins ของ Arduino ใน
Arduino UNO เรากำหนดขา 2 และ 4 เป็น RX และ TX โดยใช้ซอฟต์แวร์ ดังนั้น TX ของ
Bluetooth เชื่อมต่อกับขา 4 ของ Arduino
แต่เมื่อเชื่อมต่อ RX ของ Bluetooth ไปยัง TX ของ Arduino (หรือไมโครคอนโทรลเลอร์ตัวใด
ๆ อันที่จริงแล้ว) เราต้องระมัดระวังเนื่องจากขาสามารถทนต่อ 3.3V
เท่านั้น แต่แรงดันไฟฟ้าจาก TX หรือ Arduino จะเป็น 5V
ดังนั้นจึงใช้เครือข่ายเครื่องแบ่งแรงดันไฟฟ้าประกอบด้วยตัวต้านทานแบบ 10K และ 20K
เพื่อลดแรงดันไฟฟ้าลงเหลือ 3.3V
รีเลย์ : ( OUTPUT )
รีเลย์เป็นสวิทช์ที่ให้การเชื่อมต่อระหว่างวงจรไฟต่ำและวงจรไฟฟ้ากำลังสูง รีเลย์ไฟฟ้าเป็นรีเลย์ที่ใช้มากที่สุดและประกอบไปด้วยขดลวดที่ทำหน้าที่เป็นแม่เหล็กไฟฟ้าและขั้วต่อการเคลื่อนย้าย
โดยทั่วไปรีเลย์ประกอบด้วยขั้ว 5 ขั้ว: ขดลวดขั้วสองขั้วขั้วสามัญ (COMM) เทอร์มินัลที่เปิดอยู่ตามปกติ (NO) และขั้วต่อปิดปกติ (NC)
สัญญาณไฟต่ำจากไมโครคอนโทรลเลอร์จะให้กับขดลวด (โดยปกติจะผ่านทรานซิสเตอร์) และอีก 3 ขั้วคือ NO, NC และ COMM จะเชื่อมต่อกับแหล่งจ่ายไฟแรงสูงพร้อมกับโหลด ข้อมูลเพิ่มเติมเกี่ยวกับการถ่ายทอดและการทำงานของตน
ขั้นตอนต่อไปคือการเชื่อมต่อขา I / O ดิจิตอลของ Arduino เข้ากับบอร์ดรีเลย์เชื่อมต่อกับ Pin 9, 10, 11, 12 ของ Arduino)
ซอฟต์แวร์
#include <SoftwareSerial.h> เรียกใช้ฟังก์ชั่น Bluetooth
const int rxPin = 4; Rx PIN ขา4
const int txPin = 2; TX PIN ขา2
SoftwareSerial mySerial(rxPin, txPin); กำหนดค่าลงใน Library Bluetooth
const int Loads[] = {9, 10, 11, 12}; กำหนด ตัวแปร รีเรย์
int state = 0; ตัวแปร State = 0
int flag = 0; ตัวแปร Flag = 0
ฟังก์ชั่น พิเศษ
##########################################################################
void setup()
{
for (int i=0;i<4;i++) ถ้า int เท่ากับ0และน้อยกว่า4 ให้ i+ไปเรื่อยๆ
{
pinMode(Loads[i], OUTPUT); ให้ Load โดยเกHบค่าตัวแปรอาเรย์ i เป็น OUTPUT
}
mySerial.begin(9600); แสดงผล ออกทาง Serial Moniter 9600
for (int i=0;i<4;i++) ถ้า int เท่ากับ0และน้อยกว่า4 ให้ i+ไปเรื่อยๆ
{
digitalWrite(Loads[i], LOW); ให้Load iเป็นสถานะ ต่ำ
}
}
void loop()
{
if(mySerial.available() > 0) ถ้า MySerial.available() มากกว่า 0
{
state = mySerial.read(); State คือ อ่านค่า
flag=0; Flag คือ 0
}
switch(state) การตรวจสอบตัวแปรว่ามีค่าเท่ากับ case ใด ถ้าตรง กับ case ใดก็จะทำงาน
{
case '0':digitalWrite(Loads[0], HIGH); Case 0 แสดงค่า Load อาเรย์ 0 เป็น สูง
flag=1; flag เท่ากับ 1
break; หยุดการทำงาน
case '1':digitalWrite(Loads[0], LOW); Case1 แสดงค่า Load อาเรย์ 0 เป็น ต่ำ
flag=1; flag เท่ากับ 1
break; หยุดการทำงาน
case '2':digitalWrite(Loads[1], HIGH); Case2 แสดงค่า Load อาเรย์ 1 เป็น สูง
flag=1; flag เท่ากับ 1
break; หยุดการทำงาน
case '3':digitalWrite(Loads[1], LOW); Case 3 แสดงค่า Load อาเรย์ 1 เป็น ต่ำ
flag=1; flag เท่ากับ 1
break; หยุดการทำงาน
case '4':digitalWrite(Loads[2], HIGH); Case 4 แสดงค่า Load อาเรย์ 2 เป็น สูง
flag=1; flag เท่ากับ 1
break; หยุดการทำงาน
case '5':digitalWrite(Loads[2], LOW); Case 5 แสดงค่า Load อาเรย์ 2 เป็น ต่ำ
flag=1; flag เท่ากับ 1
break; หยุดการทำงาน
case '6':digitalWrite(Loads[3], HIGH); Case 6 แสดงค่า Load อาเรย์ 3 เป็น สูง
flag=1; flag เท่ากับ 1
break; หยุดการทำงาน
case '7':digitalWrite(Loads[3], LOW); Case 7 แสดงค่า Load อาเรย์ 3 เป็น ต่ำ
flag=1; flag เท่ากับ 1
break; หยุดการทำงาน
case '8':digitalWrite(Loads[0], LOW); Case 8 แสดงค่า Load อาเรย์ 0 เป็น ต่ำ
digitalWrite(Loads[1], LOW); แสดงค่า Load อาเรย์ 1 เป็น สถานะ ต่ำ
digitalWrite(Loads[2], LOW); แสดงค่า Load อาเรย์ 2 เป็น สถานะ ต่ำ
digitalWrite(Loads[3], LOW); แสดงค่า Load อาเรย์ 3 เป็น สถานะ ต่ำ
flag=1; flag เท่ากับ 1
break; หยุดการทำงาน
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น