کنترل ماشین جنگی با اپلیکیشن
در این آموزش قصد داریم با استفاده از اپلیکیشن و برد NodeMCU و درایور موتور L9110s یک ماشین جنگی رو کنترل کنیم .
ما در این پروژه از اپلیکیشن کنترل موتور که توسط تیم برنامه نویسی آکادمی دانش پژوهان آتی طراحی شده استفاده کردیم برای دانلود این نرم افزار میتونید به قسمت دسته بندی و بعد نرم افزار های مورد نیاز مراجعه کنید و یا لینک زیر رو کلیک کنید و نرم افزار رو دانلود کنید.
قطعات مورد نیاز این پروژه :
قطعات مورد نیاز برای این پروژه رو میتونید از فروشگاه خرید کنید .
۱- برد NodeMCU
۲-درایور موتور دوکاناله L9110s
۳-بردبورد
۴-ماژول رله تک کانال
۵-جاباتری چهار تایی
۶-باتری فلمی
۷-سیم جامپر
۸- دو عدد گیربکس دو محوره همراه با موتور
۹- شاسی ماشین هوشمند
۱۰-موتور DC
۱۱-شوتر
ماژول درایور موتور دوکاناله L9110s:
ماژول درایور موتور دوکاناله L9110s یکی از ماژول های پرکاربرد برای کنترل ربات و موتور هستش قیمت مناسبی داره و راه اندازیش آسونه.
این درایور موتور تا دو عدد موتور رو پشتیبانی میکنه و با این درایور موتور میتونید جهت چرخش موتور و همچنین خاموش و روشن موتور رو کنترل کنید.
ماکسیمم جریان هرکانال ۸۰۰ میلی آمپر هستش و ولتاژ ۲.۵ تا ۱۲ ولت رو پشتیبانی میکنه.
شماتیک و اتصالات:
پایه VCC ماژول درایور موتور = پایه VIN برد NodeMCU
پایه GND ماژول درایور موتور = پایه GND برد NodeMCU
پایه مثبت یا سیم قرمز موتور dc = پایه D0 برد NodeMCU
پایه منفی یا سیم مشکی موتور dc = پایه GND برد NodeMCU
پایه B_A ماژول درایور موتور = پایه D1 برد NodeMCU
پایه B_B ماژول درایور موتور = پایه D2 برد NodeMCU
پایه A_A ماژول درایور موتور = پایه D5 برد NodeMCU
پایه A_B ماژول درایور موتور = پایه D6 برد NodeMCU
سیم مثبت یا قرمز جاباتری چهارتایی = پایه VIN برد NodeMCU
سیم منفی یا مشکی جاباتری چهارتایی = پایه GND برد NodeMCU
کدنویسی :
برنامه ای نوشتیم که اگه مقدار دیتا دریافت شده توسط اپلیکیشن مساوی Forward بود ماشین به جلو حرکت کنه و اگه دیتا مساوی Backward بود ماشین به عقب حرکت کنه و اگه مقدار دیتا مساوی stop بود ماشین حرکت نکنه.
(برای مشاهده کدهای این پروژه بهمراه توضیحات کامل آن باید در سایت ثبت نام نمایید. با تشکر)
[restrict subscriber=”editor”]#include <ESP8266WiFi.h> WiFiClient client; WiFiServer server(80); const char* ssid = "yor wifi ssid"; const char* password = "yor wifi password"; String data =""; int leftMotorForward = D1; int rightMotorForward = D5; int leftMotorBackward = D2; int rightMotorBackward = D6; void setup() { pinMode(leftMotorForward, OUTPUT); pinMode(rightMotorForward, OUTPUT); pinMode(leftMotorBackward, OUTPUT); pinMode(rightMotorBackward, OUTPUT); connectWiFi(); server.begin(); } void loop() { client = server.available(); if (!client) return; data = checkClient (); if (data == "Forward") MotorForward(); else if (data == "Backward") MotorBackward(); else if (data == "Left") TurnLeft(); else if (data == "Right") TurnRight(); else if (data == "Stop") MotorStop(); } void MotorForward(void) { digitalWrite(leftMotorForward,HIGH); digitalWrite(rightMotorForward,HIGH); digitalWrite(leftMotorBackward,LOW); digitalWrite(rightMotorBackward,LOW); } void MotorBackward(void) { digitalWrite(leftMotorBackward,HIGH); digitalWrite(rightMotorBackward,HIGH); digitalWrite(leftMotorForward,LOW); digitalWrite(rightMotorForward,LOW); } void TurnLeft(void) { digitalWrite(leftMotorForward,LOW); digitalWrite(rightMotorForward,HIGH); digitalWrite(rightMotorBackward,LOW); digitalWrite(leftMotorBackward,HIGH); } void TurnRight(void) { digitalWrite(leftMotorForward,HIGH); digitalWrite(rightMotorForward,LOW); digitalWrite(rightMotorBackward,HIGH); digitalWrite(leftMotorBackward,LOW); } void MotorStop(void) { digitalWrite(leftMotorForward,LOW); digitalWrite(leftMotorBackward,LOW); digitalWrite(rightMotorForward,LOW); digitalWrite(rightMotorBackward,LOW); } void connectWiFi() { Serial.println("Connecting to WIFI"); WiFi.begin(ssid, password); } String checkClient (void) { while(!client.available()) delay(1); String request = client.readStringUntil('r'); request.remove(0, 5); request.remove(request.length()-9,9); return request; }
اول از همه کتابخونه esp8266 رو فراخوانی میکنیم و بعدش پورت سرور رو مشخص میکنیم و نام وایفای و پسوورد رو تعریف میکنیم.
#include <ESP8266WiFi.h> WiFiClient client; WiFiServer server(80); const char* ssid = "your wifi ssid"; const char* password = "your wifi password";
حالا یه string به نام data معرفی میکنیم و بعد چهارتا تا متغیر رو برای معرفی پایه مینویسیم.
String data =""; pinMode(leftMotorForward, OUTPUT); pinMode(rightMotorForward, OUTPUT); pinMode(leftMotorBackward, OUTPUT); pinMode(rightMotorBackward, OUTPUT);
داخل void setup حالت پایه ها رو مشخص میکنیم و سرور و تابع وایفای رو فرا میخونیم.
void setup() { pinMode(leftMotorForward, OUTPUT); pinMode(rightMotorForward, OUTPUT); pinMode(leftMotorBackward, OUTPUT); pinMode(rightMotorBackward, OUTPUT); connectWiFi(); server.begin(); }
داخل void loop اول اتصال کلاینت رو چک میکنیم و بعد شرط مینویسیم که اگر مقدار دیتا (همون string بود که اول معرفی کرده بودیم) مساوی مثلا Forward بود تابع MotorForward فراخوانی بشه و اجرا بشه به همین ترتیب شرط هارومینویسیم وتابع هارو فرامیخونیم.
void loop() { client = server.available(); if (!client) return; data = checkClient (); if (data == "Forward") MotorForward(); else if (data == "Backward") MotorBackward(); else if (data == "Left") TurnLeft(); else if (data == "Right") TurnRight(); else if (data == "Stop") MotorStop(); } void MotorForward(void) { digitalWrite(leftMotorForward,HIGH); digitalWrite(rightMotorForward,HIGH); digitalWrite(leftMotorBackward,LOW); digitalWrite(rightMotorBackward,LOW); } void MotorBackward(void) { digitalWrite(leftMotorBackward,HIGH); digitalWrite(rightMotorBackward,HIGH); digitalWrite(leftMotorForward,LOW); digitalWrite(rightMotorForward,LOW); } void TurnLeft(void) { digitalWrite(leftMotorForward,LOW); digitalWrite(rightMotorForward,HIGH); digitalWrite(rightMotorBackward,LOW); digitalWrite(leftMotorBackward,HIGH); } void TurnRight(void) { digitalWrite(leftMotorForward,HIGH); digitalWrite(rightMotorForward,LOW); digitalWrite(rightMotorBackward,HIGH); digitalWrite(leftMotorBackward,LOW); } void MotorStop(void) { digitalWrite(leftMotorForward,LOW); digitalWrite(leftMotorBackward,LOW); digitalWrite(rightMotorForward,LOW); digitalWrite(rightMotorBackward,LOW); }
خب بعد از این تابع ها یه تابع برای وصل شدن وایفای که داخل voidsetup فراخوانی کرده بودیمش رو مینویسیم.
void connectWiFi() { Serial.println("Connecting to WIFI"); WiFi.begin(ssid, password); }
در آخر هم یه تابع برای چک کردن اتصال کلاینت مینویسیم.
String checkClient (void) { while(!client.available()) delay(1); String request = client.readStringUntil('r'); request.remove(0, 5); request.remove(request.length()-9,9); return request; }[/restrict]
بعد از اتمام کد نویسی و آپلود روی برد وارد قسمت هات اسپات گوشی شده و آی پی برد که به هات اسپات گوشی وصل شده رو توی اپلیکیشن وارد میکنیم و در آخر با فشردن دکمه های درون اپلیکیشن موتور رو کنترل میکنیم .