تبدیل مدل از رادیو کنترل به وای فای. کنترل خودرو از طریق WiFi با ESP8266 NodeMCU. یک انحراف کوچک در مورد راحتی سازماندهی کار با روتر

راهنمای تفصیلیدر مورد نحوه گرفتن ESP8266، مقداری چسب و فوم به آن اضافه کنید و به بچه ها (و بزرگسالان) لذت زیادی ببرید.

راهنما از قسمت های زیر تشکیل شده است:







توضیحات تابلو.

مغز کشتی تابلویی است که در Aliexpress خریداری شده است. این برد توسعه ابزاری مفید برای شروع کار با ماژول WiFi ESP8266-12 است.
خود ماژول روی برد لحیم شده است و تمام خروجی های ماژول به کانکتورهای پین متصل می شوند. LED های قرمز از طریق مقاومت های محدود کننده جریان به 6 پین لحیم می شوند. یک LED RGB نیز به سه پایه لحیم شده است.
همچنین یک تثبیت کننده 3.3 ولت وجود دارد، مقاومت های اتصال ماژول لحیم شده اند، یک مقاومت نوری در ورودی ADC آویزان است، یک بلوز برای تغییر ماژول به حالت برنامه ریزی وجود دارد.
خروجی های USART به طور جداگانه نمایش داده می شوند و علامت های Rx و Tx معکوس می شوند.
یک محفظه باتری برای 3 باتری به ورودی برق ماژول لحیم شده است. و سفت‌افزار آزمایشی قبلاً در ماژول بارگذاری شده است که تحت کنترل آن، تا آنجا که من به یاد دارم، یک نقطه دسترسی جدید در حال ایجاد است. با اتصال به این اکسس پوینت می توانید درخشش LED های روی برد را کنترل کنید. اگر برای اولین بار است، پس نوعی جادو است.

تاریخچه ساخت کشتی.

در روند خودآموزی کند به سمت ساختمان خانه هوشمند، این تابلو یک سال پیش خریداری شده است (فروشگاهی که خرید انجام شده در حال حاضر تعطیل است). من به همراه او دو ماژول ESP8266-12 خالی دیگر گرفتم و با کمک دو دماسنج / رطوبت سنج روی آنها راه اندازی کردم که هنوز با موفقیت کار می کنند.

سپس سعی کردم آنها را با MajorDoMo متصل کنم - یک سیستم کنترل باز و رایگان خانه هوشمند. اما به نوعی این تجارت پیش نرفت - او فعلاً آن را رها کرد.
در اواسط تابستان اتفاقی افتادم . به نظر می رسد esp8266 را می توان مانند هر آردوینو برنامه ریزی کرد. و کتابخانه های آردوینو تحت esp8266 قبلاً برای همه موارد پورت شده اند.
برای من، یک مرحله کیفی جدید در توسعه esp8266 فرا رسیده است ...
من خیلی با نمونه های کتابخانه بازی کردم و می خواستم کاری با کاربرد عملی انجام دهم.
تصمیم گرفتم برای کلبه تابستانی یک قایق خودکششی برای بچه ها جمع کنم، آن هم نه ساده، بلکه از هر گوشی هوشمندی قابل کنترل باشد!


مواد استفاده شده

تکه‌هایی از پلاستیک فوم برای جمع‌آوری گرد و غبار در کمد برای مصالح ساختمانی بدنه انتخاب شدند.


موتورهای کلکتور از یک پخش کننده DVD به عنوان موتور استفاده می شد. برای کنترل کشتی، تصمیم گرفته شد از یک درایو دو موتوره استفاده شود - با کاهش سرعت موتور چپ / راست، آن را به سمت چپ یا راست بچرخانیم.


پروانه ها - از یک تکه قلع.
سوزن های بافندگی (که از همسرش مصادره شده است) کاملاً روی محورهای پروانه قرار می گیرند.


برای اتصال قابل اعتماد و انعطاف پذیر محور پروانه با موتور، لوله های انقباض حرارتی با قطرهای مختلف مناسب است.


بدنه یک خودکار ساده به عنوان یک یاتاقان ساده برای محور پروانه گرفته شد.


چسب اژدها و تفنگ چسب حرارتی هم به کارتان آمد.


برای کنترل موتورها، دو ترانزیستور اثر میدانی که از مادربرد قدیمی لحیم شده بود در انبار وجود داشت.
منبع تغذیه 18650 باتری بود که به صورت آفلاین خریداری شد.
من همچنین به یک کلید ضامن کوچک برای تامین برق، چند مقاومت و یک تخته نان برای اتصال تمام برق به یکدیگر نیاز داشتم.




کشتی سازی

برای بریدن فوم با عجله، یک ThermoElectroCutter متشکل از یک چوب، دو پیچ بلند و یک تکه سیم نازک مونتاژ شد. بهتر است سیم نیکروم بگیرید ، اما من یکی را پیدا نکردم (و نمی خواستم مقاومت سیم شوروی را برای این تجارت بشکنم) - من یک فولاد نازک گذاشتم.
برق این ماشین بداهه را از طریق. هر دو به لطف بررسی های محلی خریداری شدند.
در مجموع، در این عکس، یک چشم کنجکاو می تواند 10 محصولی را که قبلا در Muska بررسی شده است، بیابد.


با تنظیم ولتاژ خروجی مبدل DC-DCاز نظر تجربی، لازم است چنین گرمایشی از سیم ThermoElectroCutter ایجاد شود که در آن فوم به راحتی و به طور طبیعی بریده شود.
در نتیجه، ما قطعات پلاستیکی فوم را کم و بیش یکنواخت می کنیم که برای مونتاژ بعدی راحت است.
دو قطعه بزرگ که با چسب اژدها به هم چسبیده بودند به بدنه قایق رفتند.


پروانه ها در چندین عملیات ساخته می شوند:

یک مربع مربع را از قلع برش دهید (من 20 * 20 میلی متر دارم)
- اتصال گوشه های مورب با خطرات برای یافتن مرکز


- یک سوراخ در مرکز ایجاد کنید (قطر 3.5 میلی متر)
- با یک پیچ مناسب با مهره (M 3 * 20) سفت کنید.
- با نگه داشتن پیچ در چاک مته، یک دایره را با یک جسم تیز مناسب با سرعت کم بکشید (خراش دهید).
- یک دایره یکنواخت را برش دهید


- با توجه به خطرات مورب موجود، دایره ای را در 2/3 شعاع برش دهید و آن را با زاویه (30-45 درجه) خم کنید.

سپس یک سوزن بافندگی می گیریم. یک قطعه 25 تا 30 میلی متری لوله انقباض حرارتی را با قطر کمی بزرگتر از سوزن بافندگی ببرید. سوزن بافندگی را با هیت شرینک روی شعله کوچک مشعل گاز (یا برقی) می چرخانیم تا لوله گرم شود و سوزن بافندگی را محکم بپوشاند.
در مرحله بعد، یک قطعه لوله با قطر حتی بزرگتر و ... را برش می دهیم. تا زمانی که بتوان لوله بعدی را روی دنده موتور قرار داد. T.K. چرخ دنده به اندازه کافی محکم روی شفت موتور کاشته می شود، سپس گشتاور را به خوبی به محور پروانه منتقل می کند.
آخرین قطعه هیت شرینک را می گیریم و همزمان روی میل پروانه و موتور قرار می دهیم.
پس از گرم شدن هیت شرینک، اتصال خوبی به دست می آید.




زمان نصب موتورها در کیس فرا رسیده است.
با مته دو سوراخ در بدنه برای محورهای پروانه دریل می کنیم. از سمت پایین یاتاقان های ساده را وارد می کنیم.


موتورها را در معرض دید قرار می دهیم و با اسکرول شفت، با توجه به کمترین مقاومت در برابر چرخش، موقعیت بهینه را برای هر موتور پیدا می کنیم.
نتیجه را به وفور با چسب حرارتی ثابت کنید.




پروانه ها را می پوشانیم و با چسب حرارتی ثابت می کنیم. برای چسبندگی بهتر با چسب، نوک پره ها با سیم برش کمی فرو رفته و سطوح پیچ ها در نزدیکی مرکز خراشیده می شوند تا حالت خشن داشته باشند.

ما همه چیز را طبق طرح متصل و لحیم می کنیم.


برق از باتری ها از طریق یک کلید ضامن تامین می شود و سپس به موتورها و به یک تثبیت کننده خطی 3.3 ولت می رسد.خروجی دوم هر موتور از طریق یک ترانزیستور اثر میدانی به منهای توان متصل می شود. با ارائه سیگنال سیکل‌های کار مختلف پالس‌ها از خروجی ESP8266 به گیت ترانزیستور اثر میدان PWM، سرعت چرخش موتور را کنترل می‌کنیم.
ولتاژ تغذیه نیز از طریق یک تقسیم کننده مقاومتی به ورودی ADC ماژول ESP8266 برای نظارت بر وضعیت باتری تغذیه می شود.
ترانزیستورهای قدرت با مقاومت های اتصال، سوئیچ برق، تثبیت کننده، تقسیم کننده مقاومتی برای اندازه گیری ولتاژ باتری - همه چیز روی تخته نان قرار می گیرد. برد با ماژول ESP8266، باتری و سیم موتور نیز به آن لحیم شده است.
یک آداپتور USB-TTL به ماژول متصل است.


بنابراین، همه چیز برای دمیدن جرقه ای از زندگی در قایق تقریباً تمام شده آماده است ...


برنامه نويسي

نحوه نصب Arduino IDE و پشتیبانی از ESP8266 در آن به خوبی در بالا توضیح داده شده است.

برای کنترل کشتی، یک نقطه دسترسی در ESP8266 ایجاد می کنیم و یک وب سرور را بالا می بریم. با اتصال تلفن هوشمند خود به نقطه دسترسی و تایپ آدرس سرور (192.168.4.1) در مرورگر، صفحه ای با کنترل ها و تله متری از کشتی خود مشاهده خواهیم کرد.


به منظور کاهش بار روی ESP8266، کاهش زمان پاسخگویی اقدامات کنترلی و افزایش تعامل، تصمیم گرفتم از تکنیک درخواست AJAX استفاده کنم.

گزیده ای از ویکی پدیا:

AJAX، Ajax (ˈeɪdʒæks، از انگلیسی Asynchronous Javascript و XML - "JavaScript و XML ناهمزمان") - رویکردی برای ایجاد تعاملی رابط های کاربریبرنامه های کاربردی وب، که شامل تبادل "پس زمینه" داده ها بین مرورگر و وب سرور است. در نتیجه، هنگام به روز رسانی داده ها، صفحه وب به طور کامل بارگیری نمی شود و برنامه های وب سریع تر و راحت تر می شوند.

در مدل کلاسیک برنامه وب:

مرورگر درخواستی را تشکیل می دهد و به سرور ارسال می کند.
در پاسخ، سرور یک صفحه وب کاملاً جدید تولید می کند و آن را به مرورگر می فرستد و غیره. پس از آن مرورگر به طور کامل کل صفحه را بارگذاری مجدد می کند.

هنگام استفاده از AJAX:
کاربر وارد یک صفحه وب می شود و روی برخی از عناصر آن کلیک می کند.
اسکریپت (در جاوا اسکریپت) تعیین می کند که چه اطلاعاتی برای به روز رسانی صفحه مورد نیاز است.
مرورگر درخواست مناسبی را به سرور ارسال می کند.
سرور تنها بخشی از سند را که درخواست برای آن ارسال شده است، برمی گرداند.
اسکریپت بر اساس اطلاعات دریافتی (بدون بارگذاری مجدد صفحه) تغییراتی را ایجاد می کند.


پس از مدتی شکنجه کردن گوگل در جستجوی اجرای مناسب Wishlist خود، با آن روبرو شدم
که در آن کد مناسب را قرض گرفته است

کد اولیه

#عبارتند از #عبارتند از سرور ESP8266WebServer(80); const char* ssid="YourSSID"; const char* password="yourPASSWORD"; وب سایت رشته، جاوا اسکریپت، XML؛ انتظار طولانی بدون امضا000=0UL,wait001=1000UL; int LED=16;const int sliderMAX=10; // این تعداد اسلایدرهایی را که می خواهید sliderVal=(60),ESPval; void buildWebsite()( buildJavascript(); webSite="\n"; website+=" \n"; webSite+=" این وب سایت ESP است ... \n"; webSite+="Runtime = \n"; webSite+="Signal Strength a= \n"; webSite+= Sila ;// Strength سیگنال وای فایوب سایت+="\n"; وب سایت +="

\n"؛ برای(int i=0;i \n"; //در فایرفاکس، کروم و اج از ONINPUT webSite+=" استفاده کنید \n"; website+="\n"; ) وب سایت+="
Slidervalue"+(String)i+" = \n"; webSite+="ESPval"+(String)i+" = میلی ثانیه
\n"; website+="\n"; website+="\n"; ) void buildJavascript()(javaScript="\n"; ) void buildXML()( Sila = WiFi.RSSI(); // قدرت سیگنال XML=""; XML+=" "; XML+=" "; for(int i=0;i "; XML+=" ";) XML+=""; ) String millis2time()( String Time=""; ss طولانی بدون علامت؛ بایت mm,hh; ss=millis()/1000; hh=ss/3600; mm=(ss-hh*3600)/60; ss =(ss-hh*3600)-mm*60;if(hh<10)Time+="0"; Time+=(String)hh+":"; if(mm<10)Time+="0"; Time+=(String)mm+":"; if(ss<10)Time+="0"; Time+=(String)ss; return Time; } void handleWebsite(){ buildWebsite(); server.send(200,"text/html",webSite); } void handleXML(){ buildXML(); server.send(200,"text/xml",XML); } void handleESPval(){ int sliderCNT=server.arg("cnt").toInt(); sliderVal=server.arg("val").toInt(); buildXML(); server.send(200,"text/xml",XML); } void setup() { Serial.begin(115200); pinMode(LED13,OUTPUT); pinMode(LED14,OUTPUT); pinMode(LED15,OUTPUT); WiFi.begin(ssid,password); while(WiFi.status()!=WL_CONNECTED)delay(500); WiFi.mode(WIFI_STA); Sila = WiFi.RSSI(); Serial.println("\n\nBOOTING ESP8266 ..."); Serial.print("Connected to "); Serial.println(ssid); Serial.print("Station IP address: "); Serial.println(WiFi.localIP()); server.on("/",handleWebsite); server.on("/xml",handleXML); server.on("/setESPval",handleESPval); server.begin(); // HTTP_begin(); } void loop() { server.handleClient(); if(millis()>wait000)(buildXML(); wait000=millis()+1000UL;) if(millis()>wait001)(digitalWrite(LED13,!digitalRead(LED13)); wait001=millis()+ESPval; Serial.print("Sl3 Serial.print(ESPval); analogWrite(LED13, ESPval); Serial.print("Sl4"); Serial.print(ESPval); analogWrite(LED14, ESPval); Serial.print("Sl5")؛ سریال .println(ESPval);analogWrite(LED15, ESPval);Serial.print(WiFi.RSSI()); // قدرت سیگنال // WiFi.printDiag(Serial); ) )


از طریق تقریب های متوالی، کد به نسخه کاری مورد نیاز من آورده شد.

کد نهایی

#عبارتند از #عبارتند از سرور ESP8266WebServer(80); const char* ssid="ABPOPA"; //نام نقطه دسترسی const char* password=""; // رمز عبور را نمی نویسیم //const char* ssid="HomeIoT"; // در اینجا نام نقطه دسترسی خانه را می نویسیم //const char* password="DDV987654321"; // و رمز عبور رشته وب سایت، جاوا اسکریپت، XML. انتظار طولانی بدون امضا000=0UL,wait001=1000UL; int OUT1=14, OUT2=12, BAT=17;//Pin Assignment int Sila, SilaLow = -43; // کنترل قدرت سیگنال WiFi در Batareya، BatLow = 400; //شناور کنترل ولتاژ باتری Povorot = 0.8, Trimer; // متغیرهایی برای مقادیر چرخش موتور و تریم String Bat, SilaW; const int sliderMAX=3; // تعداد اسلایدرهایی را که می خواهید int sliderVal=(100, 50, 50); //مقادیر اولیه لغزنده 1 - سرعت، لغزنده 2 - چرخش، لغزنده 3 - trimer int ESPval. void Batare()( Batareya = analogRead(BAT)؛ // اندازه گیری ولتاژ باتری اگر (Batareya< BatLow){ // Если напряжение батареи меньше порогового значения Bat = " Батарея села, ПОРА на ЗАРЯДКУ"; // Пишем предупреждение } else{ // Если норма Bat = ""; // Ничего не пишем } } void SilaWifi(){ Sila = WiFi.RSSI(); // Меряем силу сигнала WiFi if (Sila < SilaLow){ SilaW = " Сигнал слабый, РАЗВОРАЧИВАЙ"; } else{ SilaW = ""; } } void buildJavascript(){ javaScript="\n"; ) void buildWebsite()( // ایجاد صفحه با کنترل buildJavascript(); webSite="\n"; website+=" \n"; webSite+=javaScript; webSite+=" \n"; webSite+=" Boat \n"; webSite+="Uptime = \n"; webSite+="Signal Strength \n"; // WiFi Signal Strength webSite+="Battery Voltage \n"; // Battery Voltage webSite+ = "

\n"; // وب سایت+=" \n"; // این نمونه ای از یک وب سایت اسلایدر است+=" \n"; // 1 نوار لغزنده webSite+=" \n"; website+=" \n"; website+="\n"; website+=" \n"; // نوار لغزنده 2 webSite+=" \n"; website+=" \n"; website+="\n"; website+=" \n"; // نوار لغزنده 3 webSite+=" \n"; website+=" \n"; website+="\n"; website+="
RPMs = \n"; webSite+="موتورها = *
جهت = \n"؛ webSite+="حرکات =
تصحیح = \n"؛ وب سایت+="موتورها =
\n"; website+="\n"; website+="\n"; ) رشته millis2time()( // تبدیل میلی ثانیه به h/m/s String Time=""; بدون علامت طولانی ss; بایت mm,hh; ss=millis()/1000; hh=ss/3600; mm =(ss-hh*3600)/60;ss=(ss-hh*3600)-mm*60;if(hh<10)Time+="0"; Time+=(String)hh+":"; if(mm<10)Time+="0"; Time+=(String)mm+":"; if(ss<10)Time+="0"; Time+=(String)ss; return Time; } void buildXML(){ XML=""; XML+=" "; XML+=" "; XML+=millis2time(); XML+=""; // افزودن داده های ما SilaWifi(); // اندازه گیری قدرت سیگنال در اینجا XML+=" "; // قدرت سیگنال WiFi XML+=String(Sila)+SilaW;// قدرت سیگنال WiFi XML+=""; // قدرت سیگنال باتری WiFi(); // اندازه گیری ولتاژ باتری در اینجا XML+=" "; // ولتاژ باتری XML+=String(Batareya)+Bat;// ولتاژ باتری XML+=""; // ولتاژ باتری برای (int i=0;i "; XML+=String(sliderVal[i]); XML+=""; XML+=" "; ESPval[i]=9*(100-sliderVal[i])+100; XML+=String(ESPval[i]); XML+="";) XML+=""; ) void handleWebsite()(buildWebsite(); server.send(200,"text/html",webSite); ) void handleXML()(buildXML(); server.send(200,"text/xml",XML )؛ void handleESPval()( int sliderCNT=server.arg("cnt").toInt(); sliderVal=server.arg("val").toInt(); buildXML(); server.send(200," text/xml"XML"؛ ) void setup() (Serial.begin (115200)؛ pinMode (OUT1, OUTPUT); pinMode (OUT2, OUTPUT); pinMode (BAT, INPUT)؛ WiFi.softAP (ssid، رمز عبور) ; // یک نقطه دسترسی ایجاد کنید // WiFi.begin(ssid,password)؛ //این گزینه ای برای اتصال به یک نقطه موجود است // while(WiFi.status()!=WL_CONNECTED)delay(500)؛ // WiFi.mode(WIFI_STA)؛ Serial.println("\n\nBOOTING ESP8266 ...")؛ Serial.print ("متصل به ")؛ Serial.println(ssid); Serial.print ("آدرس IP ایستگاه:" Serial. println(WiFi.localIP()); // چاپ برای نظارت بر پورت اختصاص داده شده به IP server.on("/",handleWebsite); server.on("/xml",handleXML); server.on ("/setESPval",handleESPval); server.begin(); ) void loop() (server.handleClient(); if(millis()>wai t000)(buildXML(); wait000=millis()+1000UL; ) if(millis()>wait001)(wait001=millis()+300; //مقادیر به روز رسانی هر 300 میلی ثانیه Trimer = (ESPval*.0015); Serial.print("Skorost]"); Serial.print( ESPval؛ Serial.print ("Povorot"); Serial.print (ESPval); Serial.print ("Trimer"); Serial.print (ESPval); Serial.print (Trimer); if (ESPval > 200)( / / اگر لغزنده سرعت > 200 اگر (ESPval > 600) ( // اگر نوار لغزنده چرخش > 600 باشد، آنالوگ رایت را به چپ بچرخانید(OUT1, ESPval)؛ analogWrite(OUT2, int(ESPval * Povorot*Trimer)); سریال. print(" Le "); Serial.print(ESPval * Pivorot*Trimer); ) other if (400 > ESPval)( // اگر نوار لغزنده چرخش< 400 то поворачиваем на право analogWrite(OUT1, int(ESPval * Povorot)); analogWrite(OUT2, int(ESPval*Trimer)); Serial.print(" Pr "); Serial.print(int(ESPval * Povorot)); } else { // Если слайдер поворота >400 و< 600то едем прямо analogWrite(OUT1, ESPval); analogWrite(OUT2, int(ESPval*Trimer)); Serial.print(" OK "); } } else { // Если слайдер скорости < 200 - выключить моторы analogWrite(OUT1, 0); analogWrite(OUT2, 0); Serial.print(" Stop "); } Serial.print(" Batareya "); Serial.println(Batareya); } }


توضيحات زيادي در كد هست اميدوارم همه چيز مشخص بشه.
موتورهای کشتی با تغییر موقعیت لغزنده های سه لغزنده در صفحه کنترل می شوند.
- اولین لغزنده وظیفه سرعت چرخش موتورها (و سرعت قایق به ترتیب) را بر عهده دارد. اگر موقعیت لغزنده این نوار لغزنده را از 20 به 100% تغییر دهید، مقدار متغیر ESPval مربوط به نوار لغزنده تغییر می کند. مقدار متغیر روی پورت های OUT1 و OUT2 ESP8266 نوشته می شود (خروجی های آن به گیت های کنترل می رود. ترانزیستورهای اثر میدانی) و دور موتور از 0 به حداکثر افزایش می یابد.
در محدوده موقعیت های این نوار لغزنده از 0 تا 20 درصد، 0 به پورت ها نوشته می شود و موتورها متوقف می شوند.
- لغزنده دوم وظیفه چرخش ها را بر عهده دارد (متغیر ESPval). اگر لغزنده آن در موقعیت راست یا چپ باشد، مقدار سرعت موتور مربوطه با ضریب 0.8 (ثابت Povorot) کاهش می یابد. موتور کند می شود و قایق در جهت درست می چرخد.
- لغزنده سوم (متغیرهای ESPval و Trimer) برای تراز کردن تفاوت در مشخصات موتور مورد نیاز است. بسته به موقعیت لغزنده، یکی از موتورها را می توان کاهش یا شتاب داد.

متأسفانه، عملکرد اندازه گیری ولتاژ باتری تکمیل نشد. در طی مراحل راه اندازی، ورودی ماژول ADC رایت شد (فکر کنم آن را به + باتری کوتاه کردم) ...
اندازه گیری قدرت سیگنال WiFi کار می کند، اما کالیبراسیون دقیق تری لازم است.

برای رفع اشکال، از اتصال به خانه استفاده شد. شبکه های وای فایو خروجی اطلاعات به درگاه سریال.


در نسخه کاری کد، یک نقطه دسترسی جداگانه توسط ماژول بالا می رود و هیچ خروجی مورد نیاز نیست - خطوط کد مربوطه توضیح داده می شوند.

طرح در IDE نسخه 1.6.12 گردآوری شده است.

بیش از مقدار کافی حافظه آزاد برای پیاده سازی خواسته های مختلف بعدی در کد وجود دارد.

اگر کسی اضافات/اصلاحات سازنده ای در کد دارد - لطفاً در نظرات صحبت کنید.


شنا کردن

ابتدا در قسمت آب حمام اجراهای آزمایشی انجام شد که در نتیجه بهبودهای زیر انجام شد:
- 4 عدد باتری قلمی در منبع تغذیه بدون قید و شرط با 2 عدد باتری 18650 تعویض شده است.
- برش یکی از موتورها به تنظیمات دور و دور اضافه شد
- گام پروانه افزایش یافته است

سپس، در سفر بعدی به ویلا، کشتی بطور رسمی برای حرکت در آبهای بلند فرستاده شد.


آزمایشات میدانی نشان داده است که در نسخه بعدیلازم:
- با اضافه کردن، قدرت سیگنال ماژول WiFi را افزایش دهید آنتن خارجی
- قطر پروانه ها را افزایش دهید (یا پروانه ها را در Aliexpress سفارش دهید)
- افزایش ترمز موتورها هنگام پیچیدن از 20% به 40-50%
- بدنه را برای بهبود جریان تغییر دهید
- موتورها را با براشلس تعویض کنید
- فرمانی بسازید که توسط سروو هدایت می شود
- پیچ FPV
- اضافه کردن نور LED برای شنا در شب
- یک آتش بازی روی عرشه نصب کنید و آن را در وسط حوض پرتاب کنید
- هر چی دلت بخواد...

اما این پیشرفت ها ممکن است در فصل جدید تجسم یابد.

بنابراین، با صرف زمان و هزینه اندک، هر سوزن دوزی متوسط ​​می تواند اسباب بازی رادیویی خود را جمع آوری کند.

بدون تغییر قابل توجهی در برنامه، به همان روش ساده، می توانید یک ماشین کنترل شده (یا چندین ماشین) را برای سفرهای سرگرم کننده در اطراف آپارتمان در عصرهای طولانی زمستان کور کنید.

خوشحال می شوم اگر این اثر الهام بخش کسی باشد که درگیر خلاقیت شود.

من قصد دارم +87 بخرم افزودن به علاقه مندی ها نقد را پسندید +131 +257

این پروژه ایجاد یک ماشین وای فای با کنترل مدل ماشین از طریق اینترنت یا استفاده از لپ تاپ با وای فای در فاصله تا 500 متر را توصیف می کند. این دستگاه مجهز به یک دوربین بلادرنگ است که به شما امکان می دهد دستگاه را با نگاه کردن به صفحه لپ تاپ کنترل کنید.

چند وقت پیش یک روتر Linksys WRT54GL پیدا کردم. برای هک و اصلاح بسیار مفید است. او زیر کار می کند کنترل لینوکس. فریمورهای جایگزین زیادی برای این روتر نوشته شده است. این پروژه از سیستم عامل Linux Open-WRT سفارشی استفاده می کند. بجز فرصت های بزرگبا تغییرات نرم افزاری این روتر، یکسری تغییرات سخت افزاری و هک های احتمالی وجود دارد. یعنی من یک روتر ارزان و قابل هک با لینوکس داخلی در اختیار داشتم - می دانستم که انجام کاری با آن خوب و راحت است. بنابراین، ایده یک ماشین Wi-Fi متولد شد.

هدف از این مقاله ارائه یک نمای کلی از پروژه و نشان دادن برخی از ویژگی های پیاده سازی نرم افزار و قطعات الکترونیکی می باشد. این مقاله راهنمای گام به گام مونتاژ خودرو نیست، اما اطلاعات کافی برای افراد با انگیزه خوب و دانش اولیه در زمینه الکترونیک و برنامه نویسی دارد. همه برنامه ها تحت شرایط Open نوشته شده اند توافقنامه مجوز GNU v2، بنابراین استفاده از کد و بهبود آن رایگان است.

سخت افزار

ماشین تحریر

اضافه شدن یک دوربین تحت شبکه، روتر، باتری های سنگین، مدار اضافی و یک دسته سیم وزن اضافی زیادی را اضافه می کند و اکثر مدل ها برای این کار طراحی نشده اند. بنابراین، به دلیل تمام موارد اضافه شده، لازم است یک ماشین رادیویی نسبتاً بزرگ پیدا کنید. در اینترنت می توانید رادیو کنترل استفاده شده را پیدا کنید وسایل نقلیهبدون کنترل از راه دور برای 200-300 روبل. من چندین دستگاه خریدم تا بتوانم قطعات را از آنها بیرون بیاورم. حمل و نقل 1:10 یا بیشتر خوب است و احتمالاً کوچکتر نمی خواهید. من این دستگاه را به قیمت 150 روبل خریدم.

من حدود 20 ماشین رادیویی را دمونتاژ کردم. تقریباً هر یک از آنها از تراشه Realtek RX2/TX2 یا همتایان کامل آن با پین اوت مشابه استفاده می کنند. اسناد مربوط به آنها را می توان در اینترنت یا از طریق پیوندها یافت. این بدان معنی است که کنترل دستگاه با وسایل الکترونیکی بدون اضافه کردن مدارهای خود بسیار آسان است. می توانید میکروکنترلر را مستقیماً به خروجی ها (جلو، عقب، چپ، راست) وصل کنید و ماشین را کنترل کنید. توانایی استفاده از لوازم الکترونیکی استاندارد خودرو باعث صرفه جویی زیادی در زمان و تلاش می شود.

من WRT54GL خود را طوری تغییر دادم که دارای 2 پورت سریال و یک کارت SD 1 گیگابایتی باشد (مثلا HDDبرای 1 گیگابایت). این پروژه از کارت SD استفاده نمی کند بلکه از یکی از پورت های سریال استفاده شده است. روتر من دو پورت سریال دارد: یک پورت کنسول و TTS/1، که ما از آن استفاده خواهیم کرد. برای این پروژه من از OpenWRT White Russian نسخه 0.9 استفاده می کنم. نسخه های بعدی وجود دارد، اما ما برای این پروژه به آنها نیاز نداریم. راهنمای تالیف (به زیر مراجعه کنید) از این نسخه استفاده می کند، به همین دلیل من آن را انتخاب کردم.

انتخابمیکروکنترلر

من سه میکروکنترلر مختلف را برای این پروژه ارزیابی کردم. در زیر خلاصه ای از امتیاز آورده شده است.

میکروکنترلر

PIC16F628A

آردوینو (ATmega168)
Freeduino MaxSerial

AVR Butterfly (ATmega169)

قیمت.
سطح کنترل برنامه

برنامه نویسی بسیار آسان (C با بسیاری از کتابخانه های داخلی).

کیت توسعه دهنده آماده، تقریباً بدون نیاز به لحیم کاری.

برنامه نویسی آسان تر از PIC.
رابط سریال یکپارچه
لحیم کاری به ندرت مورد نیاز است.

در برابر

برنامه نویسی مشکل است ( اسمبلر ).
زنجیر باید به صورت دستی متصل شود.
سخت افزار اضافی مورد نیاز (MAX232A).
به برنامه نویس نیاز دارد.

خطاهای لودر (به زیر مراجعه کنید).
تجهیزات جانبی یکپارچه دارای ولتاژهای خروجی عجیبی هستند.
قیمت.

من PIC16F628A را به چند دلیل انتخاب کردم:

  • من زیاد داشتم.
  • من تجربه کمی با آنها دارم.
  • من یک برد کوچک می خواستم و برد PIC کوچکترین از 3 گزینه بود.
  • من می خواستم کنترل کاملی بر روی اعمال برنامه داشته باشم و این در هنگام برنامه نویسی در اسمبلر کاملاً امکان پذیر است.

آردوینو (Freeduino MaxSerial) انتخاب دوم من بود و من خیلی دوست داشتم که ساخت و اجرا کردن آن آسان باشد. همچنین پشتیبانی خوب جامعه و سهولت استفاده وجود دارد.

من در ابتدا از برد اشکال زدایی AVR Butterfly استفاده کردم. خوب کار می کرد تا اینکه یک بار باتری ها تمام شد. یک اشکال در بوت لودر AVR Butterfly وجود دارد که در اینجا به تفصیل توضیح داده شده است. کد را خراب می کند و اجازه نمی دهد که با بوت لودر دیگری دوباره برنامه ریزی شود. دستگاه یک روز کار می کرد و روز بعد نه. مدتی طول کشید تا مشکل را پیدا کنم و زمان زیادی را برای رفع آن صرف کردم، بنابراین من به استفاده از این برد به عنوان یک سیستم کنترل ادامه ندادم. همچنین متوجه شدم که ولتاژ خروجی روی پین‌ها می‌تواند غیرقابل پیش‌بینی باشد، زیرا آنها علاوه بر رانندگی لوازم جانبی، صفحه LCD را نیز کنترل می‌کنند.

در زیر آمده است منبعبرای PIC و آردوینو. هر دو تست شده اند، بنابراین از هر کدام که بهتر می دانید و با آن احساس راحتی می کنید استفاده کنید. آردوینو (Freeduino MaxSerial) بیشترین است بهترین گزینهبرای شروع سریع من آن را خریدم.

مدار کنترل

در واقع دستگاه من از دو برد کنترل استفاده می کند. این کار به این دلیل انجام می شود که من ترانزیستورهای کنترل را روی برد استاندارد دستگاه سوزاندم. خوشبختانه تونستم آنها و تراشه RX2 را (که هم سوخت) لحیم کاری کنم و مدار کنترل را ذخیره کنم. اکثر ماشین های اسباب بازی RC از حدود 6 سیم برای کنترل موتور استفاده می کنند. این به این دلیل است که دستگاه مونتاژ شده دارای یک کنتاکت کشویی فلزی است که با موتور حرکت می کند و از سیم های اضافی برای رله استفاده می شود. هر خودروی رادیو کنترلی پارامترهای مختلفی برای این کنتاکت دارد، بنابراین استفاده از مدار استاندارد بسیار بهتر است.

من ترانزیستورها را با اعمال ولتاژ منبع تغذیه 16 ولت به جای 9.6 ولت استاندارد سوزاندم. ترانزیستورها برای جریان 5A درجه بندی شده اند، اما من احتمالا آنها را بیش از حد بارگذاری کرده ام و آنها به طرز زیبایی دود می کنند. من یک برد از یک ماشین RC دیگر گرفتم و از ترانزیستور استفاده کردم. من این مدار را از 12 ولت اجرا کردم و مشکلی ایجاد نکرد، هرچند ترانزیستورها خیلی داغ شدند. استفاده از بردهای ماشین آلات استوک به جای ساخت پل H خود باعث صرفه جویی در زمان و هزینه می شود.

این پروژه از باتری های قدرتمند استفاده می کند. من اینها را برای خودروهای RC رده بالا به قیمت 50 دلار + ارسال eBay خریدم. دارای 3800 میلی آمپر ساعت و شارژر 1.8A گنجانده شده است. آنها را می توان در eBay پیدا کرد. یک باتری تقریباً 1.5 ساعت (از تخلیه کامل) شارژ می شود. ولتاژ آنها 7.2 ولت است، با این حال، زمانی که آنها فقط شارژ می شوند ولتاژ آنها حدود 8.3 ولت است و زمانی که آنها کاملاً تخلیه می شوند (دیگر قادر به تغذیه دستگاه نیستند) حدود 7.1 ولت می دهند.

همه کانکتورهای باتری را با کانکتورهای استاندارد Molex ATX تعویض کردم. این کار به منظور استفاده از کانکتورهای ارزان قیمت انجام می شود که من تعداد زیادی از آنها را داشتم که ساخت اسپلیتر برای اندازه گیری جریان را آسان می کند. باتری هایی که به صورت سری متصل می شوند، در صورت شارژ کامل حدود 16 ولت می دهند.

خط 9.6 ولت با نصب 4 دیود به صورت سری با باس 12 ولت از 7812 به دست می آید. افت ولتاژ در دیود حدود 0.7 ولت است. با قرار دادن 4 دیود در یک ردیف، حدود 2.8 ولت از دست می دهیم و برای دستگاه هایی که کمتر از 12 ولت نیاز دارند، 9 ولت دریافت می کنیم. پس از سوزاندن ترانزیستورها، تصمیم گرفتم مدار را با ولتاژ کمتری تغذیه کنم. 7812 دارای 1A است و موتورها به طور قابل توجهی بیشتر می کشند. Digikey یک رگولاتور 12 ولتی 7.5 آمپری را به قیمت حدود 14 دلار می فروشد و من آن را خریدم. من آن را به یک هیت سینک وصل کردم زیرا فکر می کردم ممکن است گرم شود. بعد از مدتی کار کردن حتی گرم نشده است، بنابراین نیازی به هیت سینک نیست.
من نمی خواهم مدار کنترل را به خطر بیندازم، بنابراین آن را با ولتاژ تا حد امکان نزدیک به استاندارد تغذیه می کنم. دوربین به 9 ولت نیاز دارد، سیگنال هنگام تغذیه با 5 ولت کاملاً بی صدا است، بنابراین همه این دستگاه ها از خط 9.2 ولت کار می کنند.

تمام لوازم الکترونیکی قدرت روی یک تخته نان مونتاژ شده و در یک کیس قرار می گیرند.

طرح

آردوینو:

اتصال آردوینو:
جلو - پین 8
پشت - پین 9
سمت چپ - پین 10
سمت راست - پین 11
LED سبز - پین 7
LED قرمز - پین 6
سیگنال - پین 5

پورت سریال Freeduino MaxSerial را می توان با استفاده از کابل سریال استاندارد به پورت سریال روتر متصل کرد.

Freeduino MaxSerial از پین سریال 4 - DTR (Data Terminal Ready) برای تنظیم مجدد میکروکنترلر و اجازه بارگذاری کد جدید استفاده می کند. در عملکرد عادیبا کامپیوتر روی این پین 10+ یا -10 ولت بسته به اینکه پورت سریال متصل است باشد. اما در پورت سریال روتر، این پین به زمین و غیر فعال است. هنگامی که روتر شروع به انتقال داده از طریق پورت سریال می کند، MaxSerial ریست می شود. به ما نمی خورد پایه DTR را به +9V می کشیم. این تغییر ساده حالت برنامه بسته را فعال می کند، یعنی نمی توان میکروکنترلر را فلش کرد و روی پورت سریال ریست کرد. اگر می خواهید میکروکنترلر را دوباره فلش کنید، کافی است سوئیچ را بچرخانید.

توجه: اگر استفاده می کنید نسخه USBآردوینو، به سادگی می توانید پین های RX و TX را به MAX232A و سپس به پورت سریال روتر متصل کنید.

دوربین

یکی از جنبه های اصلی این پروژه این است که می توان خودرو را بدون خط دید با استفاده از دوربین شبکه پاناسونیک BL-C1A کنترل کرد. این تقریبا ارزان‌ترین دوربین شبکه سیمی است بررسی های خوب. این نرم افزار فقط برای ویندوز در دسترس است - این یک منفی کوچک اما قابل تحمل است. برای مشاهده یک تصویر نرم افزارلازم نیست. مدل‌های گران‌تر دارای قابلیت تابه و شیب هستند، اما به طور قابل توجهی گران‌تر هستند و به عملکردشان نیازی ندارند.

این دوربین دارای یک رابط وب بسیار کاربر پسند است که باعث می شود نه تنها دستگاه ویندوز. با استفاده از دستور زیر می توانید تصویر را از دوربین مشاهده کنید:
http:///ImageViewer?Resolution=320x240?Quality=standard
رزولوشن های موجود 640x480، 320x120، 160x60 هستند. کیفیت موجود (فشردهی) دقت (کیفیت)، استاندارد (استاندارد)، حرکت (حرکت).

کیفیت ویدیو خوبه با این حال، اغلب حتی با اتصال خوب به مدت 1 ثانیه منجمد می شود. حدس من این است که لوازم الکترونیکی دوربین به اندازه کافی قدرتمند نیستند که از پخش زنده مداوم با فوکوس خودکار پشتیبانی کنند. در کل من از او راضی هستم.

با نگاه کردن به داخل دوربین، می توانید متوجه شوید که کار می کند پردازنده ARM 250 مگاهرتز طبق اطلاعات سایت رسمی 64 مگابایت هم داره حافظه دسترسی تصادفی. نمی دانم چقدر سخت است که لینوکس روی آن کار کند...

مونتاژ

فقط شاسی از دستگاه استفاده شد. تمام قسمت های تزئینی و غیر کاربردی حذف شده است. دوربین با تغییر جزئی نسبت به پایه استوک در جلو نصب شد. این برد در قسمت جلوی دستگاه نصب شده بود و برای جلوگیری از اتصال کوتاه با مهره ها و پیچ های پلاستیکی روی آن پیچ می شد.

برد میکروکنترلر PIC نیز در طرف دیگر به طور محکم پیچ شده است. تمام سیم‌ها عمداً بیشتر از زمان مورد نیاز گرفته شده‌اند تا در حین مونتاژ حرکت کنند. پس از مونتاژ، تکه های سیم اضافی جمع شده و گره می شوند. تعداد زیادی سیم وجود داشت، احتمالاً حدود 30، که باید از / به جلو و بازگشتماشین‌ها، بدون احتساب کابل اترنت.

تمام مدارهای برق در یک محفظه در عقب خودرو قرار داشتند، به استثنای LT1083 7.5A که در پایین خودرو قرار دارد. من آن را در پرونده قرار ندادم، زیرا این یک افزونه به پروژه بود و ساده ترین راه برای اضافه کردن آن به این روش بود. هنگامی که LED پشت جعبه قرمز می درخشد، روتر در حال بوت شدن است. وقتی روتر بوت می شود، سیگنالی به میکروکنترلر می فرستد، LED سبز رنگ روشن می شود و من می دانم که می توانم به دستگاه وصل شوم. این نشانگر هنگام اشکال زدایی بسیار مفید بود.

تمام وسایل الکترونیکی قبل از لحیم کاری و نصب دستگاه روی تخته نان مونتاژ می شدند. باتری ها با چسب ذوب داغ و اتصالات کابل متصل می شوند. روتر آنقدر پهن بود که نمی‌توانست روی ماشین تحریر بدون افزونه قرار بگیرد. دو تکه پلکسی گلاس اضافه کردم تا ماشین پهن تر بشه.

بخش نرم افزاری

این پروژه به 3 برنامه نیاز دارد. برنامه کلاینت VB6 Wifi_Robot در ویندوز، CarServer به زبان C نوشته شده و روی روتری که OpenWRT WhiteRussian v0.9 (لینوکس) و همچنین سیستم عامل میکروکنترلر را اجرا می کند، اجرا می شود. من سیستم عامل میکروکنترلر PIC16F628A و آردوینو محبوب (Freeduino MaxSerial) را آزمایش کردم. همه نرم افزارها تحت مجوز عمومی عمومی GNU v2 توزیع می شوند.

دستورالعمل‌های زیر فرض می‌کنند که شما یک Linksys WRT54GL به اینترنت با OpenWRT WhiteRussian v0.9 نصب شده دارید. راهنمای نصب OpenWRT را می توانید در اینجا بیابید.

نصب CarServer
در صورت تمایل به استفاده از نرم افزار
SSH به روتر شما، سپس ...
# سی دی / tmp
# wget http://www.jbprojects.net/projects/wifirobot/carserver_1_mipsel.ipk
# ipkg نصب کنید./carserver_1_mipsel.ipk

کامپایل و نصب CarServer
اگر می خواهید ببینید چگونه کار می کند یا آن را اصلاح کنید

شما باید OpenWRT SDK (فقط لینوکس) را دانلود کنید و این راهنمای برنامه نویسی را دنبال کنید: نوشتن و کامپایل یک برنامه OpenWRT ساده توسط اریک بیشاپ (فقط قسمت اول را دنبال کنید)
Makefile در /OpenWrt-SDK-Linux-i686-1/package/carserver/ است
Makefile در /OpenWrt-SDK-Linux-i686-1/package/carserver/src است
carserver.c در /OpenWrt-SDK-Linux-i686-1/package/carserver/src قرار دارد
ipkg کامپایل شده شما در /OpenWrt-SDK-Linux-i686-1/bin/packages نشان داده می شود. سپس:
# scp carserver_1_mipsel.ipk [ایمیل محافظت شده]:/tmp/.
برای کپی کردن در روتر از طریق SSH وارد شوید و نصب کنید

رایگان وجود دارد کتاب الکترونیکیاختصاص داده شده به سری روترهای WRT54G که Linksys WRT54G Maximum هک نامیده می شود. فکر کنم رایگان باشه در Google Books قابل مشاهده است. از لینک هم قابل دانلود است. این کتاب نحوه افزودن پورت سریال، پیکربندی نرم افزار و بسیاری از هک ها و تغییرات دیگر را پوشش می دهد. با یکی از نویسندگان تماس گرفتم. این یک کتاب الکترونیکی رایگان نیست. می توانید آن را در Google Books مشاهده کنید و با خرید آن از آمازون از نویسندگان حمایت کنید. این یک کتاب عالی است!

دریافت یک پورت سریال کاری
ما از TTS/1 استفاده می کنیم، بنابراین اگر یک پورت سریال اضافه می کنید، مطمئن شوید که همینطور است. اگر OpenWRT WhiteRussian v0.9 را نصب کرده اید، وارد SSH شوید. دستورالعمل های کتاب لینک شده در بالا کمی قدیمی است. اینجا نسخه ی به روز شده:
# آپدیت ipkg
# ipkg نصب مجموعه

# سی دی /usr/sbin
# wget http://www.jbprojects.net/projects/wifirobot/stty.tgz
# tar -zxvf stty.tgz
# chmod 755 stty

خطوط زیر را به /etc/init.d/custom-user-startup اضافه کنید تا پورت سریال در هنگام راه اندازی کار کند و CarServer به طور خودکار راه اندازی شود.
/usr/sbin/setserial /dev/tts/1 irq 3
/usr/sbin/stty -F /dev/tts/1 سرعت خام 9600
/bin/carserver&

در حال راه اندازی برنامه مشتری Wifi_Robot

این فایل حاوی کد منبع VB6 و EXE کامپایل شده است. اگر نمی خواهید برنامه نویسی کنید، فقط می توانید wifi_robot_client.exe و config.txt را استخراج کنید. اگر می خواهید VB6 را تغییر دهید، می توانید آن را باز و کامپایل کنید. این برنامه فقط یک برنامه کمی تغییر یافته از پروژه ماشین رادیویی کنترل شده با کامپیوتر است.

نرم افزار میکروکنترلر

PIC
شما به یک برنامه نویس PIC نیاز دارید. من از P16PRO40 خریداری شده از eBay استفاده می کنم. برنامه نویسان زیادی وجود دارند که می توانید آنها را بخرید یا خودتان بسازید. شما می توانید HEX را خودتان با استفاده از میکروچیپ MPLAB کامپایل کنید یا فقط فایل نهایی را دانلود و فلش کنید فایل هگز. PIC asm بر اساس این تست PIC16F628 UART است.

آردوینو (Freeduino MaxSerial)
این برنامه را می توان بدون برنامه نویس اضافی در Freeduino MaxSerial بارگذاری کرد.
اگر از Freeduino MaxSerial استفاده می‌کنید، مطمئن شوید که تغییرات سخت‌افزاری کوچکی انجام داده‌اید که هر بار که Freeduino داده‌ها را از طریق پورت سریال از روتر دریافت می‌کند، از تنظیم مجدد جلوگیری می‌کند. برای جزئیات بیشتر به بالا مراجعه کنید.

اندازه گیری و آزمایش

حداکثر سرعت
برای محاسبه حداکثر سرعت، در فاصله 3 متری از یکدیگر دو علامت زدم و چندین بار ماشین را حذف کردم. این دوربین 30 فریم در ثانیه ضبط می کند، بنابراین خطای احتمالیدوربین ها +/- 3.3٪ و +/- 1٪ خطای فاصله.

یک ماشین 3 متر را در 0.7 ثانیه طی می کند (21 فریم از 30 فریم در 1 ثانیه).
حداکثر سرعت: 4.3 متر بر ثانیه = 15.5 کیلومتر بر ساعت = 9.6 مایل در ساعت

فاصله
روتر را به یک میدان بزرگ بردم. من توانستم از لپ تاپ خود تا فاصله 500 متری (1 مگابیت در ثانیه) وصل شوم. بیشتر از این فاصله، دیگر نتوانستم وصل شوم. سیستم عامل جایگزین (OpenWRT) به شما امکان می دهد قدرت خروجی را افزایش دهید. من سعی کردم این مقدار را تغییر دهم اما روی فاصله تأثیری نداشت. شاید لپ تاپ من (Dell Inspiron 6000) که همیشه وای فای خوبی داشته است (بهتر از 6400 دوستم) ممکن است عامل محدود کننده باشد.

بنابراین ما دو موتور برگشت پذیر (چرخش در هر دو جهت) را کنترل خواهیم کرد: موتور اصلی و فرمان. ما آنها را از یک باتری 3.7 ولت تغذیه می کنیم، اما در صورت توافق بر سر منبع تغذیه کنترلر یا سازماندهی آن با یک باتری جداگانه، می توانید در اصل تا 12 ولت را تامین کنید.

در بخش پاور از ساده ترین درایور استپر موتور مینیاتوری l9110s استفاده می کنیم یا می توانید از مونتاژ در L293 \ 8 استفاده کنید. یا هر یک به همان اندازه قدرتمند که می توانید پیدا کنید. به طور کلی، من همه چیز را در تصویر کشیدم.

می توانید اجزای پروژه را در aliexpress خریداری کنید:

کنترلر وای فای مورد علاقه من است NodeMCU 0.9 ESP8266اما از WeMos D1 mini کوچکتر نیز می توان استفاده کرد.

باتری را می توان از طریق میکرو USB شارژ کرد و پس از آن مستقیماً درایور موتور و کنترلر وای فای را از طریق شارژ می کند. تبدیل تقویت کننده به 5 ولت.

کد برنامه:

#عبارتند از
const char* ssid = "نام شبکه وای فای شما";
const char* password = "رمز عبور شبکه شما";
int up = 2; //تعداد خروجی های گسسته
int down = 14;
int left = 4;
int right = 12;
// یک نمونه از سرور ایجاد کنید
// پورتی را برای گوش دادن به عنوان آرگومان مشخص کنید
سرور WiFiServer(80)؛
void setup()(
Serial.begin(9600);
تاخیر (10);
//خروجی ها را آماده کنید
pinMode (بالا، OUTPUT)؛
digitalWrite (بالا، 0);
pinMode (پایین، OUTPUT)؛
digitalWrite(down, 0);
pinMode (چپ، OUTPUT)؛
digitalWrite (سمت چپ، 0)؛
pinMode (راست، OUTPUT)؛
digitalWrite (راست، 0)؛

// به شبکه وای فای متصل شوید
Serial.println();
Serial.println();
Serial.print ("اتصال به ");
سریال println(ssid);

wifi.begin (ssid، رمز عبور)؛

در حالی که (WiFi.status() != WL_CONNECTED) (
تاخیر (500);
Serial.print(".");
}
Serial.println("");
Serial.println ("وای فای متصل");

//سرور را راه اندازی کنید
server.begin();
Serial.println("سرور شروع شد");
// نشانی IP را در مانیتور پورت نشان دهید
Serial.println(WiFi.localIP());
}
حلقه خالی() (
// بررسی کنید که آیا کلاینت متصل است یا خیر
WiFiClient client = server.available();
اگر (! مشتری) (
برگشت؛
}

//ما صبر می کنیم تا مشتری مقداری داده را ارسال کند
Serial.println("مشتری جدید");
while(!client.available())(
تاخیر (1);
}

// خط اول پرس و جو را بخوانید
String req = client.readStringUntil("\r");
سریال println(req);
client.flush();

//پردازش فرمان
if (req.indexOf("/gpio/up") != -1)(
digitalWrite (بالا، 1)؛
digitalWrite(down, 0);
تاخیر (1000);
digitalWrite (بالا، 0);
digitalWrite(down, 0);
}
else if (req.indexOf("/gpio/down") != -1)(
digitalWrite (بالا، 0);
digitalWrite(down, 1);
تاخیر (1000);
digitalWrite (بالا، 0);
digitalWrite(down, 0);
}
else if (req.indexOf("/gpio/left") != -1)(
digitalWrite (بالا، 1)؛
digitalWrite(down, 0);
digitalWrite (سمت چپ، 1)؛
digitalWrite (راست، 0)؛
تاخیر (1000);
digitalWrite (بالا، 0);
digitalWrite(down, 0);
digitalWrite (سمت چپ، 0)؛
digitalWrite (راست، 0)؛
}
else if (req.indexOf("/gpio/right") != -1)(
digitalWrite (بالا، 1)؛
digitalWrite(down, 0);
digitalWrite (سمت چپ، 0)؛
digitalWrite (راست، 1);
تاخیر (1000);
digitalWrite (بالا، 0);
digitalWrite(down, 0);
digitalWrite (سمت چپ، 0)؛
digitalWrite (راست، 0)؛
}
دیگر(
Serial.println("درخواست نامعتبر");
}

Client.flush();
// آماده شدن برای پاسخ
رشته s = "HTTP/1.1 200 OK\r\nنوع محتوا: text/html\r\n\r\n\r\n \r\n"؛

S+="


U.P.
";
s+="
ترک کرد "؛
s += "درست است
";
s+="
پایین"؛
s+="
\n"؛
// پاسخ را برای مشتری ارسال کنید
client.print(s);
تاخیر (1);
Serial.println("Client قطع شده");
) برنامه در Arduino IDE نوشته شده است. نحوه راه اندازی Arduino IDE برای کار با کنترلر NodeMCU 0.9 ESP8266به لینک نگاه کنید پس از دانلود برنامه در کنترلر، مانیتور پورت می تواند آدرس IP را که برد پس از اتصال به روتر وای فای شما دریافت می کند، بخواند. در یک مرورگر کامپیوتر، شما نیاز دارید نوار آدرساین آدرس را وارد کنید و به صفحه ای بروید که برنامه کنترلر ایجاد می کند. شبیه این خواهد شد:

پایین

وقتی روی لینک UP کلیک کنید، ماشین به مدت 1 ثانیه به جلو حرکت کرده و متوقف می شود. وقتی DOWN را فشار دهید، ماشین به مدت 1 ثانیه به عقب می رود. چپ - موتور چرخش چرخ ها را به سمت چپ می چرخاند و ماشین 1 ثانیه به سمت چپ حرکت می کند. وقتی RIGHT را فشار می‌دهید به سمت راست هم همینطور است.

کل این سیستم فقط با یک نقطه دسترسی WiFi پیکربندی شده (روتر WiFi) کار می کند، اما در آینده من علاقه مند به بازی کردن با کنترلر NodeMCU 0.9 ESP8266، که خود یک نقطه دسترسی را سازماندهی می کند و به عنوان یک وب سرور عمل می کند ، یعنی وقتی از مرورگر به IP آن دسترسی پیدا می کنید ، صفحه وب با کنترل ها را می بینیم. همچنین سازماندهی انتقال داده از یک کنترلر به کنترلر دیگر از طریق شبکه وای فای مستقل آنها جالب است.

من اخیرا تصمیم گرفتم جیپ اسباب بازی RC پسرم را ارتقا دهم. رادیو کنترل تقریباً بلافاصله از کار افتاد. همانطور که کالبد شکافی نشان داد، موتورهای بسیار ضعیف و دست و پا چلفتی در دستگاه نصب شده بودند. بلافاصله موتور اصلی موتور را با یک موتور بزرگتر در اندازه و قدرت تعویض کردم. برای انجام این کار، من مجبور شدم به عنوان یک حکاکی کار کنم، با یک اره مدور نصب شده روی آن (چگونه فضای کافی را اختصاص دهم؟). برد گیرنده رادیو هم بیرون انداخته شد.

علاوه بر این، بدون دو بار فکر کردن، این مفهوم انتخاب شد کنترل از راه دوربه عنوان مثال مریخ نورد: دستوری داده می شود و خود جیپ آن را اجرا می کند و می ایستد. همه به دلیل عدم اطمینان از اینکه پسر 2.5 ساله من می تواند موتورها را با یک کنترل از راه دور استاندارد کنترل کند. من مطمئن هستم که بدون توجه به رفتار ماشین، کنترل ها را برای مدت طولانی نگه می دارد. و اصل مریخ نورد: 20 سانتی متر رانندگی کنید و متوقف شوید، این کار را انجام می دهد. علاوه بر این، مدتهاست که آرزو داشتم حداقل در ساده ترین نسخه آن را امتحان کنم. در این پیاده سازی، ما نه 20 سانتی متر، بلکه یک زمان معین - 1 ثانیه خواهیم رفت.

بنابراین ما دو موتور برگشت پذیر (چرخش در هر دو جهت) را کنترل خواهیم کرد: موتور اصلی و فرمان. ما آنها را از یک باتری 3.7 ولت تغذیه می کنیم، اما در صورت توافق بر سر منبع تغذیه کنترلر یا سازماندهی آن با یک باتری جداگانه، می توانید در اصل تا 12 ولت را تامین کنید.

در بخش قدرت، ما از ساده ترین مینیاتور یا هر مینیاتوری به همان اندازه قدرتمندی که می توانید پیدا کنید استفاده می کنیم. به طور کلی، من همه چیز را در تصویر کشیدم.

باتری را می توان از طریق میکرو USB شارژ کرد و پس از آن مستقیماً درایور موتور و کنترلر WiFi را از طریق .

کد برنامه:

#عبارتند از
const char* ssid = "نام شبکه وای فای شما";
const char* password = "رمز عبور شبکه شما";
int up = 2; //تعداد خروجی های گسسته
int down = 14;
int left = 4;
int right = 12;
// یک نمونه از سرور ایجاد کنید
// پورتی را برای گوش دادن به عنوان آرگومان مشخص کنید
سرور WiFiServer(80)؛
void setup()(
Serial.begin(9600);
تاخیر (10);
//خروجی ها را آماده کنید
pinMode (بالا، OUTPUT)؛
digitalWrite (بالا، 0);
pinMode (پایین، OUTPUT)؛
digitalWrite(down, 0);
pinMode (چپ، OUTPUT)؛
digitalWrite (سمت چپ، 0)؛
pinMode (راست، OUTPUT)؛
digitalWrite (راست، 0)؛

// به شبکه وای فای متصل شوید
Serial.println();
Serial.println();
Serial.print ("اتصال به ");
سریال println(ssid);

wifi.begin (ssid، رمز عبور)؛

در حالی که (WiFi.status() != WL_CONNECTED) (
تاخیر (500);
Serial.print(".");
}
Serial.println("");
Serial.println ("وای فای متصل");

//سرور را راه اندازی کنید
server.begin();
Serial.println("سرور شروع شد");
// نشانی IP را در مانیتور پورت نشان دهید
Serial.println(WiFi.localIP());
}
حلقه خالی() (
// بررسی کنید که آیا کلاینت متصل است یا خیر
WiFiClient client = server.available();
اگر (! مشتری) (
برگشت؛
}

//ما صبر می کنیم تا مشتری مقداری داده را ارسال کند
Serial.println("مشتری جدید");
while(!client.available())(
تاخیر (1);
}

// خط اول پرس و جو را بخوانید
String req = client.readStringUntil("\r");
سریال println(req);
client.flush();

//پردازش فرمان
if (req.indexOf("/gpio/up") != -1)(
digitalWrite (بالا، 1)؛
digitalWrite(down, 0);
تاخیر (1000);
digitalWrite (بالا، 0);
digitalWrite(down, 0);
}
else if (req.indexOf("/gpio/down") != -1)(
digitalWrite (بالا، 0);
digitalWrite(down, 1);
تاخیر (1000);
digitalWrite (بالا، 0);
digitalWrite(down, 0);
}
else if (req.indexOf("/gpio/left") != -1)(
digitalWrite (بالا، 1)؛
digitalWrite(down, 0);
digitalWrite (سمت چپ، 1)؛
digitalWrite (راست، 0)؛
تاخیر (1000);
digitalWrite (بالا، 0);
digitalWrite(down, 0);
digitalWrite (سمت چپ، 0)؛
digitalWrite (راست، 0)؛
}
else if (req.indexOf("/gpio/right") != -1)(
digitalWrite (بالا، 1)؛
digitalWrite(down, 0);
digitalWrite (سمت چپ، 0)؛
digitalWrite (راست، 1);
تاخیر (1000);
digitalWrite (بالا، 0);
digitalWrite(down, 0);
digitalWrite (سمت چپ، 0)؛
digitalWrite (راست، 0)؛
}
دیگر(
Serial.println("درخواست نامعتبر");
}

Client.flush();
// آماده شدن برای پاسخ
رشته s = "HTTP/1.1 200 OK\r\nنوع محتوا: text/html\r\n\r\n\r\n \r\n"؛

S+="


U.P.
";
s+="
ترک کرد "؛
s += "درست است
";
s+="
پایین"؛
s+="
\n"؛
// پاسخ را برای مشتری ارسال کنید
client.print(s);
تاخیر (1);
Serial.println("Client قطع شده");
) برنامه در Arduino IDE نوشته شده است. کنترلر NodeMCU 0.9 ESP8266 که خودش یک اکسس پوینت را سازماندهی می کند و به عنوان یک وب سرور عمل می کند، یعنی وقتی از مرورگر به IP آن دسترسی پیدا می کنید، یک صفحه وب با کنترل ها را می بینیم. همچنین سازماندهی انتقال داده از یک کنترلر به کنترلر دیگر از طریق شبکه وای فای مستقل آنها جالب است.

در تابستان، ایده ساخت یک ماشین رادیویی به وجود آمد، اما نه فقط چیزی شبیه به ساخت مهندسی چینی، که در هر مرحله فروخته می‌شود، بلکه خودرویی که می‌توان آن را از طریق رایانه یا تلفن کنترل کرد. قابل درک است که دستگاهی که می توان از طریق Wi-Fi در خالص ترین شکل خود کنترل کرد، کاملاً جالب نیست. اگه دوربین داشت چی؟ و اگر از طریق 3G / EDGE / GPRS نیز مدیریت می کنید؟ این یک موضوع دیگر است! این بدان معنی است که دستگاه کنترل باید USB و Wi-Fi داشته باشد (خوب، یا فقط USB، می توانید یک آداپتور USB Wi-Fi بخرید). اکنون باید نحوه کنترل موتورها را دریابیم. در ابتدا می خواستم این کار را با استفاده از یک پورت COM و یک شیفت رجیستر (74HC595) انجام دهم، اما پس از سوزاندن 5 ریز مدار، این روش را رها کردم. بعداً چشمم به آردوینو یعنی آردوینو دومیلانو افتاد. این برد دارای 14 پورت ورودی/خروجی دیجیتال است که شش عدد از آن ها PWM هستند (کنترل ولتاژ روی موتور و آویز کردن سرووها برای دوربین امکان پذیر خواهد بود)، دو عدد به عنوان Tx و Rx پورت سریال قابل استفاده است.

روتر

در شهر شما پیدا شد روتر D-link DIR-320 که دارد پورت USBبلافاصله آن را خرید. با رسیدن به خانه، متوجه شدم که این روتر دارای یک پورت UART است. بنابراین، ما یک کانال ارتباطی بین روتر و آردوینو داریم.
برای روتر، سیستم عامل OpenWrt را انتخاب کردم. می توانید فریمور آماده را از OpenWrt برای DIR-320 دانلود کنید. یادم نیست چرا، اما تصمیم گرفتم خودم سفت‌افزار را جمع‌آوری کنم (به تفصیل توضیح داده شد). برای انجام این کار، به لینوکس نیاز دارید (من بر روی اوبونتو 11.10 ساخته ام). ابتدا منابع سیستم عامل را دانلود کنید و هر آنچه را که نیاز دارید جمع آوری کنید:
svn co svn://svn.openwrt.org/openwrt/branches/backfire dir320 سی دی dir320 ./scripts/feeds update -a && ./scripts/feeds install –a ساختن پیش نیاز و& ساخت ابزار/نصب و ساخت ابزار زنجیره/نصب
پیکربندی سیستم عامل
منوی پیکربندی را انجام دهید
بسته های زیر را انتخاب کنید:
  • سیستم هدف ---><*>Broadcom BCM947xx/953xx - Kernel 2.6
  • پیکربندی تصویر ---><*>آدرس IP LAN ---> – [اختیاری] می توانید آدرس IP را که روتر پس از بارگیری هسته و همه ماژول ها خواهد داشت انتخاب کنید.
  • ماژول های هسته ---><*>سیستم های فایل ---><*>kmod-fs-ext3 - بعداً در این مورد بیشتر توضیح دهید
  • Utilities ---> Filessystem ---><*>e2fsprogs - و در مورد این
  • ابزارهای کمکی ---> دیسک ---><*>block-extroot - و در مورد این نیز
  • ماژول های هسته ---><*>پشتیبانی USB ---><*>kmod-usb-core - پشتیبانی از USB
  • ماژول های هسته ---><*>پشتیبانی USB ---><*>kmod-usb-ohci - برای هاب USB. او چرا؟ بیشتر در مورد آن نیز بعدا.
  • ماژول های هسته ---><*>پشتیبانی USB ---><*>kmod-usb-storage - پشتیبانی از درایوهای فلش USB
  • ماژول های هسته ---><*>پشتیبانی USB ---><*>kmod-usb2 - USB 2.0
  • مدیریت --> webif ---><*>webif-applications - پنل مدیریت
  • ماژول های هسته ---><*>پشتیبانی ویدیو ---><*>kmod-usb-video-core - پشتیبانی از USB-video
  • ماژول های هسته ---><*>پشتیبانی ویدیو ---><*>kmod-usb-video-uvc - پشتیبانی از وب کم های UVC
آخرین مورد به شما بستگی دارد، من یک وب کم UVC داشتم.
پس چرا آن بسته هایی را انتخاب کردیم که هدفشان را توضیح ندادم؟ مشکل این است که مقدار فلش مموری نصب شده در روتر 4 مگابایت است که ممکن است در ادامه کار ما اختلال ایجاد کند. ما rootf ها را به یک درایو فلش USB منتقل می کنیم و روتر از آن بوت می شود.
به هر حال، در مورد فلش مموری: باید موارد زیر را به خاطر بسپارید:
kernel_menuconfig را بسازید
  • درایورهای دستگاه ---><*>پشتیبانی از دستگاه فناوری حافظه (MTD) ---> درایورهای RAM/ROM/Flash ---> [*] تراشه فلش راننده پیشرفتهگزینه های پیکربندی --> [*] انتخاب هندسه فلش خاص CFI --> [*] پشتیبانی از پهنای گذرگاه 8 بیتی
  • درایورهای دستگاه ---><*>پشتیبانی از دستگاه فناوری حافظه (MTD) ---> RAM/ROM/درایورهای تراشه فلش ---> [*] گزینه های پیکربندی پیشرفته درایور فلش چیپ --> [*] انتخاب هندسه فلش خاص CFI --> [*] پشتیبانی 16 -عرض گذرگاه بیت
و در Kernel Hacking باید console=/dev/ttyS0 را به console=/dev/null تغییر دهید تا روتر از این پورت به عنوان پورت دیباگ استفاده نکند.
کامپایل و فلش
کامپایل سیستم عامل:
ساخت V=99 -j2
حالا باید فلشش کنید:
برای bash:
#!/bin/bash echo "========================================== =======================" echo "این اسکریپت سیستم عامل dd-wrt (firmware.bin)" echo "در فهرست فعلی را به 192.168 آپلود می کند. 0.1 "echo "در هنگام راه اندازی روتر". " echo "" echo "* تنظیمات کارت اترنت خود را روی: "echo" IP: 192.168.0.10 "echo" Mask: 255.255.255.0 "echo" دروازه: 192.168.0.1 "echo "* روتر را از برق جدا کنید کابل. " echo "" echo "برای لغو Ctrl+C یا هر کلید دیگری را فشار دهید تا ادامه دهید... " read echo "" echo "* کابل برق روتر را دوباره وصل کنید. " echo "" echo "===== ================================================== ==========" echo "در انتظار روتر... برای لغو Ctrl+C را فشار دهید. " echo "" try()( ping -c 1 -w 1 192.168.0.1 ) در حالی که [ " دلار؟" != "0" ] ; اکو انجام شده را امتحان کنید "*** شروع فلش کردن **** " atftp --no-source-port-checking -p -l firmware.bin 192.168.0.1 echo "Firmware با موفقیت بارگیری شد!"
برای ویندوز:
@echo off echo ============================================== =================== echo این فایل دسته ای سیستم عامل dd-wrt را در دایرکتوری فعلی به echo 192.168.0.1 در طول راه اندازی روتر آپلود می کند. echo. echo * اترنت خود را تنظیم کنید تنظیمات کارت به: echo IP: 192.168.0.2 echo Mask: 255.255.255.0 echo Gateway: 192.168.0.1 echo * کابل برق روتر را از برق بکشید. echo. echo برای لغو Ctrl+C یا هر کلید دیگری را برای ادامه فشار دهید. .. pause > nul echo.echo * کابل برق روتر را دوباره وصل کنید. اکو پژواک ================================================= ================ echo در انتظار روتر... Ctrl+C را فشار دهید تا لغو شود. اکو تنظیم FIND=%WINDIR%\command\find.exe در صورت وجود %FIND% goto LPING مجموعه FIND=%WINDIR%\system32\find.exe در صورت وجود %FIND% goto LPING مجموعه FIND=find:LPING ping -n 1 -w 50 192.168.0.1 | %FIND% "TTL=" if errorlevel 1 goto LPING Echo *** Start Flashing **** tftp -i 192.168.0.1 firmware.bin if errorlevel 1 goto LPING set FIND= echo. پژواک ================================================= ================ پژواک * حدود 2 دقیقه منتظر بمانید تا فریمور فلش شود. echo * تنظیمات کارت اترنت خود را به DHCP بازگردانید. echo * آدرس روتر پیش‌فرض روی 192.168.1.1 echo خواهد بود. مکث
راه اندازی بوت USB
پس از اولین روشن شدن، به رابط وب روتر بروید و رمز عبور را تغییر دهید. حالا از طریق SSH به آن متصل می شویم. شما باید بوت شدن را از درایو فلش USB تنظیم کنید، برای این کار ابتدا باید آن را علامت گذاری کنید. من دو پارتیشن داشتم: اولی پارتیشن ext3 برای rootfs، دومی swap است. /etc/config/fstab را در vim باز کنید و بنویسید که با fstab ما مطابقت دارد. من اینطور دارم:
گزینه config global automount from_fstab 1 گزینه anon_mount 1 config global autoswap option from_fstab 1 گزینه anon_swap 0 config mount option target / option device /dev/sda1 گزینه fstype ext3 گزینه گزینه های rw, گزینه sync فعال است 1 گزینه enabled_fsck 1 گزینه is_rootfs گزینه wap دستگاه گزینه /dev/sda2 فعال است 1
ذخیره، راه اندازی مجدد (راه اندازی مجدد).
دیو
آردوینو موتورها را کنترل می‌کند، بنابراین بیایید دیمونی بنویسیم که هر چیزی را که در پورت TCP 5554 آمده است به /dev/ttyS0 هدایت می‌کند.
نسخه کامپایل شده دیمون را در آرشیو (کارت) جستجو کنید
ما با استفاده از gcc که در آماده سازی برای ساخت سیستم عامل ساخته شده است، کامپایل می کنیم:
<…>dir320/staging_dir/toolchain-mipsel_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/mipsel-openwrt-linux-uclibc-gcc-4.3.3<имя файла с исходниками>-o<имя выходного файла>
یک انحراف کوچک در مورد راحتی سازماندهی کار با روتر
  • بعد از هر گنجاندن، باید آپدیت opkg را می نوشتم، بنابراین آن را به /etc/rc.local اضافه کردم.
  • استفاده از سرور FTP بسیار راحت است. من pure-ftpd را نصب کردم. برای این می نویسیم:
    نصب opkg pure-ftpd
    بیایید آن را به /etc/rc.local اضافه کنیم:
    pure-ftpd -4 -B -M -l unix -U 000:000
  • تغییر رابط وب به luci راحت خواهد بود، برای این می نویسیم:
    opkg حذف webif* opkg نصب لوسی
شیطان [ادامه دارد]
ما دیمون خود را در روتر آپلود می کنیم، آن را به بارگذاری خودکار اضافه می کنیم.
اکنون mjpg-streamer را نصب کنید:
opkg استریمر mpjpg را نصب کنید
موارد زیر را در /etc/config/mjpg-stramer می نویسیم:
پیکربندی mjpg-streamer گزینه دستگاه "/dev/video0" وضوح گزینه "640x480" گزینه fps "24" گزینه پورت "8080" گزینه "true" فعال است
در حال تلاش برای اتصال دوربین اگر همه چیز خوب است، می توانید تصویر را در اینجا ببینید:
http:// /?action=stream .

آردوینو و اتصال

ابتدا بیایید در مورد نمودار اتصال موتور تصمیم گیری کنیم. از آنجایی که من بدنه را از دستگاهی که از قبل آماده شده بود گرفتم، با موتورها خوش شانس بودم - آنها قبلاً آنجا بودند. جلویی مسئول پیچ ها (چپ، راست، مستقیم) و عقب برای حرکت بود (من مجبور شدم آن را به موتور دکمه قفل درب برخی از VAZ تغییر دهم). شما می توانید بارها را با آردوینو با استفاده از ترانزیستورهای اثر میدانی کنترل کنید (95N2LH5، اما من از IRF 630 استفاده کردم، زیرا این درختان صنوبر را در شهر خود پیدا کردم). اتصال به صورت زیر است: زمین ترانزیستور به پایه کنترل آردوینو، منبع به زمین آردوینو و منهای توان بار، تخلیه به منهای بار، به اضافه توان به به علاوه بار اما در این راه فقط می توانیم به جلو برانیم و فقط در یک جهت بپیچیم. برای مقابله با مشکل، یک رله با دو گروه از مخاطبین به کمک ما می شتابد. من یک موتور (جلو) 6 ولت داشتم و دیگری 12. در این مورد از دو باتری 6 ولتی استفاده شد (یکی از آنها سرب اسید از منبع تغذیه اضطراری است) با توجه به اینکه منهای روتر خواهد بود. بعداً باید به زمین آردوینو وصل شود، سپس 6 ولت بگیرید برای روتر کار نمی کند (بررسی کنید که چند ولت به روتر می دهید - بعد از اینکه 12 ولت به آن زدم مجبور شدم یکی دیگر بخرم). بنابراین، مجبور شدم از رله دیگری برای تامین / عدم تامین برق موتور جلو استفاده کنم.

من نمودار را برای مدت طولانی کشیدم. اکنون همه ترانزیستورهای اثر میدان وجود دارند و هیچ مقاومتی وجود ندارد.
حالا در مورد خود کد. همه چیز برای من بسیار ساده است - 4 دستور وجود دارد که پارامتر خاص خود را با اندازه 1 بایت دارند:

  • m - مسئول ولتاژ و در نتیجه سرعت موتور، مقدار از 0 تا 255 است.
  • r - مسئول نوبت. "1" - چرخش، "0" - چرخش نکنید
  • n - "1" - به عقب برگردید، "0" - به جلو بروید
  • e - "1" - در جهت دیگر بچرخید
کد آردوینو من اینه:
int inByte, val; void setup() ( Serial.begin(9600)؛ pinMode(2, OUTPUT)؛ pinMode(4, OUTPUT)؛ pinMode(7, OUTPUT)؛ ) void loop() ( if (Serial.available() > 0) ( inByte = Serial.read(); if ((inByte=="n")||(inByte=="e"))( while (Serial.available()==0) () val=Serial.read() ; if (inByte=="n")( if (val=="1")( digitalWrite(2, HIGH); Serial.print("Writing to 2 pin\n\r"); ) if (val== "0")( digitalWrite(2, 0); Serial.print("Writing to 2 pin\n\r"); ) ) if (inByte=="e")( if (val=="1")( digitalWrite(4، HIGH); Serial.print ("نوشتن در 4 پین\n\r"); ) if (val=="0") (digitalWrite(4، LOW); Serial.print ("نوشتن در 4 پین" \n\r"); ) ) ) if ((inByte=="m")||(inByte=="r"))( while (Serial.available()==0) () val=Serial.read () if (inByte=="m")( if (val!=0") analogWrite(3, val); else analogWrite(3, 0); Serial.print("نوشتن در 3 پین\n\r "); ) if (inByte=="r")( if (val=="1")( digitalWrite(7, HIGH); Serial.print("Writing to 7 pin\n\r"); ) if ( val=="0")( digitalWrite(7، LOW)؛ Serial.print ("نوشتن در 7 پین\n\r"); ))))))
همانطور که می بینید، موتور عقب من به پایه 3، جلو به پایه 7، رله عقب به پایه 2، جلو به پایه 4 وصل شده است. از آنجایی که 3 پایه PWM است، با استفاده از analogWrite(3, val);، جایی که val از 0 تا 255، ما می توانیم ولتاژ موتور را کنترل کنیم.
ما روتر خود را جدا می کنیم. پورت UART را می بینیم. ما آن را با آردوینو وصل می کنیم.

حالا بیایید ببینیم که چگونه همه کار می کند. ما به پورت خود تلنت می کنیم و بررسی می کنیم:
  • n1 - کلیک های رله
  • متر<пробел>- چرخ ها کمی شروع به چرخیدن می کنند
  • n0 - چرخ ها در جهت مخالف می چرخند
  • m0 - چرخ ها نمی چرخند
  • r1 - چرخ های جلو را بچرخانید
  • e1 - چرخ ها در جهت مخالف می چرخند
  • r0 - چرخ ها صاف می شوند
  • e0 - کلیک های رله
برای اشکال زدایی کار با پورت com روی روتر، می توانید از minicom (opkg install minicom) استفاده کنید.

بخش نرم افزاری

بایگانی شامل برنامه من برای کنترل دستگاه است (چرخش و قدرت از بایگانی باید در / bin / روی روتر کپی شود، کارت دیمون من است). فقط با جوی استیک کار می کند. در برگه برنامه ریزی، می توانید بنویسید اسکریپت bash(فراموش نکنید که opkg bash را روی روتر نصب کنید) تا با cron daemon اجرا شود. از آنجایی که این دیمون پس از تغییر تنظیماتش نیاز به راه اندازی مجدد دارد، برنامه من اسکریپت را در آن اجرا می کند