หุ่นยนต์ที่ควบคุมด้วย WiFi โดยใช้ Arduino
ARDUINO
มีหลายประเภทของหุ่นยนต์จากคนง่ายๆเช่นรถของเล่นไปจนถึงขั้นสูงเช่นหุ่นยนต์อุตสาหกรรม เราได้กล่าวถึง Robots หลายประเภทโดยใช้เทคโนโลยีที่แตกต่างกันไปแล้วดูที่:
- หุ่นยนต์ Line Follower ใช้ไมโครคอนโทรลเลอร์ 8051
- หุ่นยนต์ Line Follower ใช้ Arduino
- หุ่นยนต์ควบคุม DTMF โดยใช้ Arduino
- หุ่นยนต์ควบคุมด้วยโทรศัพท์มือถือโดยใช้ไมโครคอนโทรลเลอร์ 8051
- หุ่นยนต์ควบคุมด้วยคอมพิวเตอร์โดยใช้ Arduino
- RF Controlled Robot
- ขอบหลีกเลี่ยงการใช้หุ่นยนต์ 8051
- Accelerometer Based Hand Gesture ควบคุมหุ่นยนต์โดยใช้ Arduino
- รถของเล่นควบคุมด้วย Bluetooth ใช้ Arduino
และตอนนี้เรากำลังเพิ่มหนึ่งหุ่นยนต์อื่น ๆ ใน 'ของเราหุ่นยนต์โครงการส่วน' คราวนี้เราจะไปทำหุ่นยนต์ควบคุมการเชื่อมต่อ Wi-Fi โดยใช้ Arduino และ Blynk App หุ่นยนต์ที่ใช้ Arduino นี้สามารถควบคุมแบบไร้สายโดยใช้โทรศัพท์สมาร์ท Android ที่ใช้ Wi-Fi ได้
สำหรับการสาธิตหุ่นยนต์ที่ควบคุมด้วย Wi-Fiเราได้ใช้ Android Mobile App ชื่อ " Blynk " แล้ว Blynk เป็นแอพพลิเคชั่นที่เข้ากันได้กับ Arduino เพื่อสร้างโครงการIoT คุณสามารถดาวน์โหลดแอปนี้จาก Google Play สโตร์และสามารถกำหนดค่าได้อย่างง่ายดาย
ขั้นตอนในการกำหนดค่า Blynk App:
1. ดาวน์โหลดจาก Google Play Store ก่อนแล้วติดตั้งลงในโทรศัพท์มือถือ Android
2. หลังจากนั้นจะต้องสร้างบัญชี คุณสามารถใช้บัญชี Gmail ปัจจุบันของคุณได้
3. เลือก Arduino Board และระบุชื่อโครงการของคุณ
4. จดรหัส Auth Token Code หรือส่งอีเมลไปที่บัญชีอีเมลของคุณแล้วคัดลอกและวางในร่าง Arduino (รหัสโปรแกรม)
5. ใส่ Token Code นี้ใน Arduino sketch
// คุณควรได้รับ Auth Token ใน Blynk App // ไปที่การตั้งค่าโครงการ (ไอคอนอ่อนนุช) char auth [] = "caa17a11c0124d4083d0eaa995f45917";
6. จากนั้นคลิกที่ปุ่มสร้างในแอปพลิเคชัน Blynk
7. ตอนนี้เลือก Widget ของจอยสติ๊กคลิกที่จอยสติ๊กกำหนดค่าจอยสติ๊ก (ดูวิดีโอท้าย) แล้วกดปุ่มย้อนกลับ
8. หลังจากกดปุ่มเล่นที่ด้านขวาบนของหน้าจอ
กระบวนการทั้งหมดนี้ในการใช้ Blynk App ได้รับการอธิบายอย่างชัดเจนในวิดีโอแล้วในตอนท้าย
ส่วนประกอบที่จำเป็น:
- Arduino UNO
- โมดูล Wi-Fi ESP8266
- สาย USB
- สายเชื่อมต่อ
- L293D
- มอเตอร์กระแสตรง
- แบตเตอรี่
- POT 10K (อุปกรณ์เสริม)
- แชสซีหุ่นยนต์บวกล้อ
- ล้อเลื่อน
- โทรศัพท์ Android Mobile
- แอป Blynk
วงจรอธิบาย:
แผนภาพวงจรของหุ่นยนต์ควบคุมด้วย Wi-Fiมีดังต่อไปนี้ เราต้องใช้โมดูล Wi-Fi Arduino และ ESP8266 เป็นหลัก หมุด Vcc และ GND ของ ESP8266 เชื่อมต่อโดยตรงกับ 3.3V และ GND ของ Arduino และ CH_PD จะเชื่อมต่อกับ 3.3V ขา Tx และ Rx ของ ESP8266 เชื่อมต่อโดยตรงกับขา 2 และ 3 ของ Arduino ซอฟต์แวร์ Serial Library ใช้เพื่ออนุญาตการสื่อสารแบบอนุกรมของ Pin 2 และ 3 ของ Arduino เราได้กล่าวถึงInterfacing ของ ESP-8266 Wi-Fi โมดูลเพื่อ Arduinoรายละเอียด
ไดร์เวอร์ L293D มอเตอร์ ICถูกนำมาใช้สำหรับการขับรถมอเตอร์กระแสตรง หมุดขาเข้าของ IC ไดรเวอร์มอเตอร์เชื่อมต่อโดยตรงกับขา 8, 9, 10 และ 11 ของ Arduino และมอเตอร์กระแสตรงเชื่อมต่อที่ขาเอาต์พุต ที่นี่เราได้ใช้แบตเตอรี่ 9 โวลต์สำหรับขับมอเตอร์วงจรและ DC
อธิบายการทำงาน:
การทำงานของหุ่นยนต์ที่ควบคุมด้วย Wi-Fi เป็นเรื่องง่ายมากเราต้องลากหรือเลื่อนจอยสติ๊กไปในทิศทางซึ่งเราต้องการย้ายหุ่น เช่นถ้าเราต้องการย้ายหุ่นยนต์ไปข้างหน้าทิศทางเราจำเป็นต้องลากจอยสติ๊ก 'วงกลม' ไปข้างหน้าทิศทาง ในทำนองเดียวกันเราสามารถย้ายหุ่นยนต์ไปทางซ้ายขวาและย้อนกลับได้โดยการลากจอยสติ๊กไปในทิศทางเดียวกัน ตอนนี้เราจะปล่อยจอยสติ๊กขึ้นมาใหม่และหุ่นยนต์จะหยุดลง
แอป Blynk จะส่งค่าจากจอยสติ๊กสองแกนไปยัง Arduino ผ่านทาง Wi-Fi medium Arduino ได้รับค่าเปรียบเทียบกับค่าที่กำหนดไว้ล่วงหน้าและย้ายหุ่นยนต์ไปตามทิศทางนั้น
Programming คำอธิบาย:
Program เกือบจะพร้อมใช้งานใน Arduino IDE เราจำเป็นต้องดาวน์โหลด Blynk Library for Arduino และหลังจากทำการเปลี่ยนแปลงบางอย่างแล้วผู้ใช้สามารถทำหุ่นยนต์ควบคุม Wi-Fi ของตัวเองได้
ขั้นแรกเราได้รวมไลบรารีทั้งหมดที่จำเป็นเพื่อเรียกใช้รหัสนี้ใน Arduino IDE แล้วป้อน Auth Token จากแอป Blynk ในสตริงการรับรอง ต่อไปนี้เราจะเชื่อมต่อ PIN แบบ Wi-Fi กับ Software Serial ของ Arduino พินที่เลือก 2 เป็น RX และ 3 เป็น TX
#define BLYNK_PRINT Serial // แสดงความคิดเห็นเพื่อปิดการใช้งานพิมพ์และประหยัดเนื้อที่ #include <ESP8266_SoftSer.h> #include <BlynkSimpleShieldEsp8266_SoftSer.h> // Set ESP8266 วัตถุแบบอนุกรม #include <SoftwareSerial.h> SoftwareSerial EspSerial (2, 3); // RX, TX ESP8266 WiFi (EspSerial); // คุณควรได้รับ Auth Token ใน Blynk App // ไปที่การตั้งค่าโครงการ (ไอคอนอ่อนนุช) char auth [] = "caa17a11c0124d4083d0eaa995f45917";
จากนั้นเราได้กำหนดพินเอาต์พุต (8,9,10,11) สำหรับมอเตอร์และเขียนฟังก์ชันทิศทางบางอย่างเพื่อย้ายหุ่นยนต์ไปในทิศทางที่เฉพาะเจาะจง: void forward (), โมฆะย้อนกลับ (), โมฆะขวา ()และถือเป็นโมฆะซ้าย ()
หลังจากนี้ในการตั้งค่าเราจะเริ่มต้นอุปกรณ์ที่จำเป็นทั้งหมดเช่นการกำหนดทิศทางหมุดมอเตอร์ให้เริ่มต้นการสื่อสารแบบอนุกรมโดยให้ชื่อผู้ใช้และรหัสผ่าน Wi-Fi
การตั้งค่าเป็นโมฆะ () { / / กำหนดอัตราบอดี้คอนโซล Serial.begin (9600); ล่าช้า (10); // ตั้งอัตราการส่งผ่านข้อมูล ESP8266 // 9600 แนะนำสำหรับซอฟต์แวร์ Serial EspSerial.begin (9600); ล่าช้า (10); Blynk.begin (auth, wifi, "username", "password"); // ชื่อผู้ใช้ wifi และรหัสผ่าน pinMode (m11, OUTPUT); pinMode (m12, OUTPUT); pinMode (m21, OUTPUT); pinMode (m22, เอาท์พุท); }
ตอนนี้เราได้ตรวจสอบเงื่อนไขบางอย่างในการควบคุมหุ่นยนต์ ที่นี่เราได้เลือกPIN เสมือน 1 (V1) สำหรับการป้อนข้อมูลจาก Blynk Appเพื่อควบคุมหุ่นยนต์ เนื่องจากเราได้ใช้ตัวเลือก marge ใน app ดังนั้นเราจะได้รับค่าแกน x และ y ที่ขาเดียวกัน
BLYNK_WRITE (V1) { int x = param [0] .asInt (); int y = param [1] .asInt (); ถ้า (y> 220) ไปข้างหน้า (); อื่นถ้า (y <35) ย้อนกลับ(); else if (x> 220) ขวา(); else if (x <35) ซ้าย(); อื่น หยุด(); }
ในที่สุดเราจำเป็นต้องเรียกใช้ฟังก์ชัน blynkในลูปเพื่อเรียกใช้ระบบ
void loop () { Blynk.run (); }
รหัส
#define BLYNK_PRINT Serial // แสดงความคิดเห็นออกมาเพื่อปิดการใช้งาน prints และประหยัดพื้นที่
#include <ESP8266_SoftSer.h>
#include <BlynkSimpleShieldEsp8266_SoftSer.h>
#include <ESP8266_SoftSer.h>
#include <BlynkSimpleShieldEsp8266_SoftSer.h>
// Set ESP8266 Serial object
#include <SoftwareSerial.h>
SoftwareSerial EspSerial (2, 3); // RX, TX
#include <SoftwareSerial.h>
SoftwareSerial EspSerial (2, 3); // RX, TX
ESP8266 WiFi (EspSerial);
// คุณควรได้รับ Auth Token ใน Blynk App
// ไปที่การตั้งค่าโครงการ (ไอคอนอ่อนนุช)
char auth [] = "caa17a11c0124d4083d0eaa995f45917";
// ไปที่การตั้งค่าโครงการ (ไอคอนอ่อนนุช)
char auth [] = "caa17a11c0124d4083d0eaa995f45917";
# ระบุ m11 8
# ระบุ m12 9
# ระบุ m21 10
# ระบุ m22 11
# ระบุ m12 9
# ระบุ m21 10
# ระบุ m22 11
โมฆะไปข้างหน้า ()
{
digitalWrite (m11 สูง);
digitalWrite (m12 ต่ำ);
digitalWrite (M21, HIGH);
digitalWrite (m22 ต่ำ);
}
{
digitalWrite (m11 สูง);
digitalWrite (m12 ต่ำ);
digitalWrite (M21, HIGH);
digitalWrite (m22 ต่ำ);
}
โมฆะถอยหลัง ()
{
digitalWrite (m11, LOW);
digitalWrite (m12 สูง);
digitalWrite (M21 ต่ำ);
digitalWrite (m22 สูง);
}
{
digitalWrite (m11, LOW);
digitalWrite (m12 สูง);
digitalWrite (M21 ต่ำ);
digitalWrite (m22 สูง);
}
สิทธิเป็นโมฆะ ()
{
digitalWrite (m11, HIGH);
digitalWrite (m12 ต่ำ);
digitalWrite (M21 ต่ำ);
digitalWrite (m22 ต่ำ);
}
{
digitalWrite (m11, HIGH);
digitalWrite (m12 ต่ำ);
digitalWrite (M21 ต่ำ);
digitalWrite (m22 ต่ำ);
}
ถือเป็นโมฆะทางซ้าย ()
{
digitalWrite (m11, LOW);
digitalWrite (m12 ต่ำ);
digitalWrite (M21, HIGH);
digitalWrite (m22 ต่ำ);
}
{
digitalWrite (m11, LOW);
digitalWrite (m12 ต่ำ);
digitalWrite (M21, HIGH);
digitalWrite (m22 ต่ำ);
}
โมฆะ Stop ()
{
digitalWrite (m11, LOW);
digitalWrite (m12 ต่ำ);
digitalWrite (M21 ต่ำ);
digitalWrite (m22 ต่ำ);
}
{
digitalWrite (m11, LOW);
digitalWrite (m12 ต่ำ);
digitalWrite (M21 ต่ำ);
digitalWrite (m22 ต่ำ);
}
การตั้งค่าเป็นโมฆะ ()
{
/ / ตั้งอัตราสเตทคอนโซล
Serial.begin (9600);
ล่าช้า (10);
/ / กำหนดอัตราการส่งผ่านข้อมูล ESP8266
/ 9600 สำหรับซอฟต์แวร์
SerialSpeechial.begin (9600);
ล่าช้า (10);
{
/ / ตั้งอัตราสเตทคอนโซล
Serial.begin (9600);
ล่าช้า (10);
/ / กำหนดอัตราการส่งผ่านข้อมูล ESP8266
/ 9600 สำหรับซอฟต์แวร์
SerialSpeechial.begin (9600);
ล่าช้า (10);
Blynk.begin (auth, wifi, "username", "password"); // ชื่อผู้ใช้ wifi และรหัสผ่าน
pinMode (m11, OUTPUT);
pinMode (m12, OUTPUT);
pinMode (m21, OUTPUT);
pinMode (m22, เอาท์พุท);
}
pinMode (m11, OUTPUT);
pinMode (m12, OUTPUT);
pinMode (m21, OUTPUT);
pinMode (m22, เอาท์พุท);
}
BLYNK_WRITE (V1)
{
int x = param [0] .asInt ();
int y = param [1] .asInt ();
{
int x = param [0] .asInt ();
int y = param [1] .asInt ();
/ / ทำอะไรกับ x และ y
/ * Serial.print ("X =");
Serial.print (x);
Serial.print ("; Y =");
Serial.println (y); * /
if (y> 220)
forward ();
else ถ้า (y <35)
ย้อนกลับ ();
else if (x> 220)
right ();
else if (x <35)
left ();
อื่น
Stop ();
}
/ * Serial.print ("X =");
Serial.print (x);
Serial.print ("; Y =");
Serial.println (y); * /
if (y> 220)
forward ();
else ถ้า (y <35)
ย้อนกลับ ();
else if (x> 220)
right ();
else if (x <35)
left ();
อื่น
Stop ();
}
void loop ()
{
Blynk.run ();
}
{
Blynk.run ();
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น