โทรศัพท์มือถือเป็นสิ่งประดิษฐ์ที่ปฏิวัติวงการแห่งศตวรรษ ได้รับการออกแบบมาเป็นหลักสำหรับการโทรออกและรับสายและข้อความ แต่มันกลายเป็นโลกทั้งใบหลังจากที่สมาร์ทโฟนเข้ามาในภาพ ในโครงการนี้เรากำลังสร้างระบบอัตโนมัติภายในบ้านซึ่งสามารถควบคุมเครื่องใช้ไฟฟ้าภายในบ้านได้โดยใช้โทรศัพท์ที่ใช้ระบบ GSMเพียงแค่ส่ง SMS ผ่านโทรศัพท์ของเขา ในโครงการนี้ไม่จำเป็นต้องใช้สมาร์ทโฟนมีเพียงโทรศัพท์ GSM รุ่นเก่าเท่านั้นที่สามารถเปิดและปิดเครื่องใช้ไฟฟ้าภายในบ้านได้จากทุกที่ คุณยังสามารถตรวจสอบโครงการระบบอัตโนมัติภายในบ้านแบบไร้สายเพิ่มเติมได้ที่นี่: IR Remote Controlled Home Automation โดยใช้ Arduino, ระบบอัตโนมัติภายในบ้านที่ควบคุมด้วยบลูทู ธ พร้อมกับระบบอัตโนมัติภายในบ้านที่ใช้ DTMF, ระบบอัตโนมัติในบ้านที่ควบคุมโดยพีซีโดยใช้ Arduino
คำอธิบายการทำงาน
ในโครงการนี้Arduinoใช้สำหรับควบคุมกระบวนการทั้งหมด ที่นี่เราได้ใช้การสื่อสารไร้สาย GSM เพื่อควบคุมเครื่องใช้ภายในบ้าน เราส่งคำสั่งบางคำสั่งเช่น“ # Alight on *”,“ # Alight off *” เป็นต้นเพื่อควบคุมเครื่องใช้ไฟฟ้าภายในบ้าน หลังจากได้รับคำสั่งจาก Arduino ผ่าน GSM แล้ว Arduino จะส่งสัญญาณไปยังรีเลย์เพื่อเปิดหรือปิดเครื่องใช้ภายในบ้านโดยใช้ไดรเวอร์รีเลย์
ส่วนประกอบวงจร:
- Arduino UNO
- โมดูล GSM
- ULN2003
- รีเลย์ 5 โวลต์
- หลอดไฟพร้อมที่ยึด
- การเชื่อมต่อสายไฟ
- กระดานขนมปัง
- 16x2 LCD
- แหล่งจ่ายไฟ
- โทรศัพท์มือถือ
ที่นี่เราได้ใช้คำนำหน้าในสตริงคำสั่งนั่นคือ“ #A” คำนำหน้านี้ใช้เพื่อระบุว่าคำสั่งหลักมาอยู่ข้างๆและ * ที่ท้ายสตริงบ่งชี้ว่าข้อความนั้นสิ้นสุดแล้ว
เมื่อเราส่ง SMS ไปยังโมดูล GSM โดยมือถือ GSM จะรับ SMS นั้นและส่งไปยัง Arduino ตอนนี้ Arduino อ่าน SMS นี้และแยกคำสั่งหลักจากสตริงที่ได้รับและเก็บไว้ในตัวแปร หลังจากนี้ Arduino จะเปรียบเทียบสตริงนี้กับสตริงที่กำหนดไว้ล่วงหน้า หากการแข่งขันเกิดขึ้น Arduino จะส่งสัญญาณไปยังรีเลย์ผ่านโปรแกรมควบคุมรีเลย์เพื่อเปิดและปิดเครื่องใช้ภายในบ้าน และผลลัพธ์สัมพัทธ์ยังพิมพ์บนจอ LCD 16x2 โดยใช้คำสั่งที่เหมาะสม
ในโครงการนี้เราได้ใช้หลอดไฟ 3 ศูนย์วัตต์ในการสาธิตซึ่งบ่งบอกถึงพัดลมไฟและทีวี
ด้านล่างนี้คือรายการข้อความที่เราส่งทาง SMS เพื่อเปิดและปิดพัดลมไฟและทีวี:
ส. |
ข้อความ |
การดำเนินการ |
1 |
# อ. แฟนบน * |
เปิดพัดลม |
2 |
# อ. แฟนปิด * |
ปิดพัดลม |
3 |
# ก. เปิดไฟ * |
เปิดไฟ |
4 |
# ก. ปิดไฟ * |
ปิดไฟ |
5 |
# A.tv บน * |
เปิดทีวี |
6 |
# A. ทีวีปิด * |
ปิดทีวี |
7 |
# อ. ทั้งหมด * |
เปิดทั้งหมด |
8 |
# ก. ปิดทั้งหมด * |
ปิดทั้งหมด |
โมดูล GSM:
โมดูล GSM ใช้ในอุปกรณ์สื่อสารหลายชนิดซึ่งใช้เทคโนโลยี GSM (Global System for Mobile Communications) ใช้เพื่อโต้ตอบกับเครือข่าย GSM โดยใช้คอมพิวเตอร์ โมดูล GSM เข้าใจเฉพาะ คำสั่ง ATและสามารถตอบสนองได้ คำสั่งพื้นฐานที่สุดคือ“ AT” หาก GSM ตอบสนองตกลงแสดงว่าทำงานได้ดีไม่เช่นนั้นจะตอบสนองด้วย“ ERROR” มีคำสั่ง AT ต่างๆเช่น ATA สำหรับรับสาย ATD เพื่อโทรออก AT + CMGR เพื่ออ่านข้อความ AT + CMGS เพื่อส่ง sms เป็นต้นคำสั่ง AT ควรตามด้วย Carriage return เช่น \ r (0D ในเลขฐานสิบหก) เช่น“ AT + CMGS \ r” เราสามารถใช้โมดูล GSM โดยใช้คำสั่งเหล่านี้:
ATE0 - สำหรับปิดเสียงสะท้อน
ที่ + CNMI = 2,2,0,0,0
ATD
ที่ + CMGF = 1
AT + CMGS =” หมายเลขโทรศัพท์มือถือ”
>> ตอนนี้เราสามารถเขียนข้อความของเราได้แล้ว
>> หลังจากเขียนข้อความ
Ctrl + Z ส่งคำสั่งข้อความ (26 ในทศนิยม)
ENTER = 0x0d ใน HEX
SIM900 ที่สมบูรณ์แบบ Quad-band GSM / GPRS โมดูล ที่มาพร้อมกับระบบ GSM / GPRS 850/900/1800 / 1900MHz ประสิทธิภาพสำหรับเสียง, SMS และข้อมูลด้วยการใช้พลังงานต่ำ
คำอธิบายวงจร
การเชื่อมต่อของวงจรอัตโนมัติภายในบ้านที่ใช้ระบบ GSMนี้ค่อนข้างง่ายที่นี่จอแสดงผลคริสตัลเหลวใช้สำหรับแสดงสถานะของเครื่องใช้ภายในบ้านที่เชื่อมต่อโดยตรงกับ arduino ในโหมด 4 บิต หมุดข้อมูลของ LCD ได้แก่ RS, EN, D4, D5, D6, D7 เชื่อมต่อกับพินดิจิตอลของ arduino หมายเลข 6, 7, 8, 9, 10, 11 และขา Rx และ Tx ของโมดูล GSM เชื่อมต่อโดยตรงที่ Tx และ Rx พินของ Arduino ตามลำดับ และโมดูล GSM ใช้พลังงานจากอะแดปเตอร์ 12 โวลต์ 5 โวลต์ SPDT 3 รีเลย์ใช้สำหรับควบคุม LIGHT, FAN และ TV และรีเลย์เชื่อมต่อกับขา arduino หมายเลข 3, 4 และ 5 ผ่านรีเลย์ไดรเวอร์ ULN2003 สำหรับควบคุม LIGHT, FAN และ TV ตามลำดับ
คำอธิบายรหัส
ในการเขียนโปรแกรมส่วนหนึ่งของโครงการนี้ก่อนอื่นในการเขียนโปรแกรมเรารวมไลบรารีสำหรับจอแสดงผลคริสตัลเหลวจากนั้นเรากำหนดข้อมูลและพินควบคุมสำหรับ LCD และเครื่องใช้ภายในบ้าน
# รวม
หลังจากการสื่อสารแบบอนุกรมนี้เริ่มต้นที่ 9600 bps และกำหนดทิศทางไปยังพินที่ใช้
การตั้งค่าเป็นโมฆะ () {lcd.begin (16,2); Serial.begin (9600); PinMode (นำ, เอาท์พุท); pinMode (พัดลมเอาท์พุท); pinMode (แสง, เอาท์พุท); pinMode (ทีวีเอาท์พุท);
สำหรับการรับข้อมูลแบบอนุกรมเราได้ใช้สองฟังก์ชั่นหนึ่งคือSerial.availableซึ่งตรวจสอบว่าข้อมูลอนุกรมใด ๆ กำลังมาและอีกอันคือSerial.readซึ่งอ่านข้อมูลที่มาแบบอนุกรม
ในขณะที่ (Serial.available ()) {char inChar = Serial.read ();
หลังจากได้รับข้อมูลตามลำดับเราได้จัดเก็บไว้ในสตริงแล้วรอให้ Enter
เป็นโมฆะ serialEvent () {while (Serial.available ()) {if (Serial.find ("# A.")) {digitalWrite (led, HIGH); ล่าช้า (1,000); digitalWrite (led, LOW); ในขณะที่ (Serial.available ()) {char inChar = Serial.read (); str = inChar; ถ้า (inChar == '*') {temp = 1; กลับ; }
เมื่อ Enter มาโปรแกรมเริ่มเปรียบเทียบสตริงที่ได้รับกับสตริงที่กำหนดไว้แล้วและหากสตริงตรงกันการดำเนินการแบบสัมพัทธ์จะดำเนินการโดยใช้คำสั่งที่เหมาะสมที่กำหนดในโค้ด
ตรวจสอบเป็นโมฆะ () {if (! (strncmp (str, "tv on", 5))) {digitalWrite (TV, HIGH); lcd.setCursor (13,1); lcd.print ("เปิด"); ล่าช้า (200); } else if (! (strncmp (str, "tv off", 6))) {digitalWrite (TV, LOW); lcd.setCursor (13,1); lcd.print ("ปิด"); ล่าช้า (200); }