• ما یک برنامه اندروید برای کنترل ربات خانگی از طریق بلوتوث ایجاد می کنیم. آموزش آردوینو: کنترل دستگاه تلفن هوشمند برای Dummies

    عصر بخیر

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

    دید من از سیستم به این صورت است:

    من فکر می کنم ارزش ترکیب سرورهای خانگی و وب با خرید یک IP ثابت را دارد، اما برای اولین بار این کار را انجام می دهد. بیایید ساده شروع کنیم - یاد بگیرید چگونه از راه دور LED و صفحه نمایش LCD را کنترل کنید.

    وب سرور
    در وب سرور، ما یک پایگاه داده با دو جدول - led و متن ایجاد می کنیم. جدول led ها شامل 2 فیلد - شناسه و وضعیت است. این شامل یک ورودی با وضعیت فعلی LED است. جدول متون شامل 2 فیلد - شناسه و متن است. همچنین شامل یک ورودی با متن است این لحظهروی LCD نمایش داده می شود.

    حالا بیایید چند اسکریپت بنویسیم که از تلفن تماس می گیریم و اطلاعات را به پایگاه داده منتقل می کنیم. با php می نویسیم.

    اسکریپت led.php (کنترل رهبری):

    اسکریپت msg.php (کنترل LCD):

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

    سرور خانگی
    یک برنامه دائماً روی آن کار می کند (حتی می توانید آن را دیمون بنامید) ، درخواست هایی را به پایگاه داده ارسال می کند و وقتی اطلاعات موجود در آنجا تغییر می کند ، دستور مناسب را از آردوینو به پورت COM ارسال می کند. بیایید برنامه را به زبان Processing بنویسیم:

    Import processing.serial.*; //کتابخانه برای کار با پورت COM import de.bezier.data.sql.*; // کتابخانه برای کار با پایگاه داده MySQL پورت سریال. MySQL dbconnection. int prevLEDState = 0; //حالت LED قبلی String prevS = ""; //متن قبلی به LCD void setup() فرستاده شد ( پورت = سریال جدید (این، "COM4"، 9600)؛ //درگاه COM 4 را آغاز کنید (آردوین متصل نیست)، نرخ باود 9600 پورت است. bufferUntil("\ n")؛ کاربر رشته = "نام کاربری"؛ پاس رشته = "گذرواژه"؛ پایگاه داده رشته = "dbname"؛ dbconnection = MySQL جدید (این، "yourdomain.ru"، پایگاه داده، کاربر، پاس)؛ / /اتصال به پایگاه داده dbconnection.connect(); ) void draw() ( // اطلاعات مربوط به LED را در پایگاه داده نظارت کنید dbconnection.query("SELECT * FROM leds WHERE id = "1""); //یک پرس و جو برای جدول led در حالی که (dbconnection.next()) //پیمایش انتخاب از نتیجه پرس و جو ( int n = dbconnection.getInt("status"); //مقدار را از فیلد وضعیت دریافت کنید اگر (n != prevLEDState) //اگر آن نسبت به "چرخه" قبلی برنامه تغییر کرده است، سپس دستوری را به پورت COM می فرستیم ( prevLEDState = n; port.write("1")؛ // اولین کاراکتر ارسال شده به معنای کد عملیات است. انجام شده: 1 - کنترل LED، 2 - پورت کنترل LCD.write(n); ) ) //پیگیری اطلاعات LCD در پایگاه داده dbconnection.query("SELECT * FROM texts WHERE id = "1""); //یک پرس و جو در جدول متن ایجاد کنید در حالی که (dbconnection.next())//انتخاب را از نتیجه پرس و جو عبور دهید ( String s = dbconnection.getString("text"); //مقدار را از قسمت متن دریافت کنید اگر ( s != prevS) ( prevS = s;port.write("2"); port.write(s); ) ) delay(50); // 50 میلی‌ثانیه تأخیر ایجاد کنید تا درخواست‌ها به طور مداوم ارسال نشود)
    این کد را هم توضیح نمی دهم، همه چیز واضح است.
    1 بیشتر نکته مهم. برای اینکه برنامه ای از رایانه ما به پایگاه داده ای که روی یک سرور راه دور قرار دارد دسترسی پیدا کند، این باید مجاز باشد. آی پی ما را در لیست مجاز وارد کنید:

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

    ظاهر برنامه نسبتاً ساده به نظر می رسد، اما در این موردمهم نیست:

    من فقط تکه هایی از کد برنامه را برای اندروید خواهم داد. تابعی که اسکریپتی را که LED را کنترل می کند فراخوانی می کند:
    public void changeLED() ( سعی کنید ( URL url1 = new URL("http://your_domain.ru/led.php"); HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection(); امتحان کنید (InputStream in = new BufferedInputConnectionur .getInputStream()); ) در نهایت ( urlConnection.disconnect(); ) ) catch (Exception e) ( ) )
    عملکردی که متنی را برای نمایش روی LCD می فرستد:
    public void submitMsg() (EditText نهایی tt = (EditText) findViewById(R.id.editText1)؛ امتحان کنید ( URL url1 = new URL("http://your_domain.ru/msg.php?msg="+tt.getText ())؛ HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection()؛ (InputStream in = new BufferedInputStream(urlConnection.getInputStream())؛ ) در نهایت (urlConnection.disconnect()(E)x)ception
    خوب، تابع اصلی، که در آن کنترل کننده های رویداد به دکمه ها متصل می شوند:
    void عمومی onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState)؛ setContentView(R.layout.main)؛ دکمه نهایی btn1 = (دکمه) findViewById(R.id.button1)؛ btn1.setOnClickLikeListener(ClickL. ( public void onClick(View v) // کلیک روی دکمه ( changeLED(); ) )؛ دکمه نهایی btn2 = (Button) findViewById(R.id.button2)؛ btn2.setOnClickListener(new Button.OnClickListener() ( public void onClick(View v) // روی دکمه کلیک کنید ( submitMsg(); ) ))؛ )
    و یک نکته مهم دیگر اضافه کردن مجوز به برنامه برای دسترسی به اینترنت است. برای انجام این کار، خط را به فایل AndroidManifest.xml اضافه کنید (در فهرست برنامه اندروید ما قرار دارد):

    در حال صادر کردن برنامه ما به فایل APKو روی گوشی نصب کنید کنترل از راه دور خانه هوشمندآماده!

    آردوینو
    و در نهایت، آخرین اما نه کم اهمیت - اتصال آردوینو و سیستم عامل آن. نمودار اتصال صفحه LCD و LED به آردوینو Uno به شرح زیر است:

    ما یک مقاومت 220 اهم می گیریم. می توانید اطلاعات بیشتری در مورد اتصال صفحه نمایش LCD در اینجا بخوانید - پیوند

    و در اینجا همه چیز در واقعیت به نظر می رسد:

    واقعا زیباست؟

    وظیفه آردوینو گوش دادن به برنامه دیمون است سرور خانگیبه پورت COM که آردوینو به آن متصل است می فرستد (اگرچه اتصال واقعی از طریق کابل USB است، کامپیوتر آن را به عنوان درگاه سریال). پس از دریافت هر گونه داده از رایانه، کنترلر کد فرمان را با اولین کاراکتر اطلاعات ارسالی (یعنی آنچه که اکنون باید کنترل شود - صفحه نمایش LCD یا LED) تشخیص می دهد. علاوه بر این، بسته به کد و اطلاعات زیر آن، یا LED روشن / خاموش می شود، یا پیام ارسال شده نمایش داده می شود. بنابراین، این کد واقعی است:

    #عبارتند از //کتابخانه داخلی برای کار با نمایشگر LCD boolean isExecuting = false; //متغیر نشان می دهد که برخی از دستورات قبلاً اجرا شده است //من فوراً توضیح خواهم داد که چرا این مورد نیاز است. برای هر "تیک" حلقه حلقه، آردوینو کد یک کاراکتر را از پورت COM می خواند. //بنابراین، رشته در چندین چرخه منتقل می شود. در این حالت قبل از هر یک از دو دستور ممکن (تغییر حالت LED و ارسال متن به نمایشگر) //کد این دستور مخابره می شود (به ترتیب 1 و 2). این متغیر // برای جدا کردن کدهای دستوری از اطلاعات بیشتر (وضعیت LED یا متن نمایش) استفاده می شود. ال سی دی کریستال مایع (4،5،10،11،12،13); //نمایش مقداردهی اولیه int ledPin = 8; //تعداد پین آردوینو که LED به آن متصل است int prevLEDSstatus = 0; //وضعیت LED قبلی (روشن/خاموش) int newLEDSstatus = 0; // وضعیت جدید LED int cmd = 0; //کد فرمان اجرا شده void setup() ( Serial.begin(9600)؛ //راه‌اندازی پورت COM (9600 - نرخ باود) pinMode(ledPin,OUTPUT)؛ //راه‌اندازی پایه هشتم آردوینو به صورت یک خروجی ال سی دی. begin(20,4)؛ //راه اندازی اولیه نمایشگر LCD (هر کدام 4 خط 20 کاراکتری) ) void loop() (اگر (Serial.available() > 0) //اگر برخی اطلاعات به پورت COM (اگر (isExecuting == false) //اگر هیچ دستوری در حال حاضر اجرا نمی شود (cmd = Serial.read() - "0"؛ //خواندن کد دستور در حال اجرا isExecuting = true؛ // اکنون متغیر نشان می دهد که اجرای دستور شروع شده است) اگر (cmd == 1) //کنترل LED ( newLEDStatus = (int) Serial.read()؛ //وضعیت جدید LED را بخوانید if (newLEDSstatus != prevLEDSstatus) //اگر در مقایسه با وضعیت فعلی تغییر کرده است، سپس وضعیت فعلی را تغییر دهید ( digitalWrite(ledPin,newLEDSstatus); prevLEDSstatus = newLEDSstatus; )) دیگری //نمایش کنترل (اگر (isExecuting == false) //اگر دستوری وجود ندارد در حال اجرا است ( lcd.clear(); //پاک کردن صفحه ) else ( lcd.print((char)Serial.read()); //چاپ کاراکتر در صفحه نمایش) )) else //اگر هیچ اطلاعاتی به پورت COM نیامد ( delay(50); // اگر (Serial.available() 50 میلی ثانیه تاخیر ایجاد کنید<= 0) //если информации по-прежнему нет isExecuting = false; //считаем, что никакая команда не выполняется } }
    فکر می کنم نیازی به توضیح ندارد، زیرا من همه چیز را با جزئیات کامل در نظرات توضیح داده ام. تنها چیزی که شایان ذکر است برخی محدودیت ها در رشته های ارسال شده برای نمایش است. آنها نباید دارای فاصله باشند (این محدودیت به دلیل نقص الگوریتم من اعمال می شود) و نباید حاوی سیریلیک باشد (زیرا توسط همه نمایشگرها پشتیبانی نمی شود و اگر پشتیبانی شود، نیاز به انتقال کدهای کاراکتر در رمزگذاری خود دارد. تبدیل شخصیت هایی که هیچ خواسته ای وجود ندارد).

    نتیجه
    باشه الان تموم شد معلوم شد که بسیار ساده است.
    ویدئویی از نحوه کار:

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

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

    آنچه برای این مورد نیاز است

    1. هر برد سازگار با آردوینو
    2. ماژول بلوتوث
    3. دستگاهی که سیستم عامل اندروید روی آن نصب شده است

    به عنوان یک ماژول بلوتوث، بهتر است از HC-05 استفاده کنید. خرید آن در فروشگاه آنلاین چینی یا eBay آسان است. این ماژول با ولتاژ 3.3 ولت تغذیه می‌شود، اما خطوط ورودی/خروجی آن می‌توانند منطق 5 ولت را نیز مدیریت کنند و به UART آن اجازه می‌دهند به آردوینو متصل شود.

    ماژول بلوتوث HC-05

    اتصال ماژول بلوتوث به آردوینو

    بنابراین اکنون باید آردوینو خود را با بلوتوث وصل کنیم. اگر آردوینو خروجی 3.3 ولت نداشته باشد، بلکه فقط 5 ولت داشته باشد، برای کاهش قدرت باید یک رگولاتور نصب کنید. تخصیص پین HC-05 به راحتی در اینترنت پیدا می شود. برای استفاده، توصیه می کنیم که یک برد با خطوط خروجی برای قدرت، Rx و Tx بسازید. اتصال به آردوینو باید به ترتیب زیر انجام شود:

    • خروجی آردوینو 3.3 ولت یا (5 ولت از طریق تثبیت کننده!) - به پین ​​12 ماژول بلوتوث
    • خروجی آردوینو GND - به پین ​​13 ماژول بلوتوث
    • پین Arduino TX - به پین ​​2 ماژول بلوتوث RX
    • پین آردوینو RX - به 1 پین ماژول بلوتوث TX

    پس از اتصال، باید عملکرد ماژول بلوتوث را بررسی کنید. یک LED را به پین ​​12 آردوینو وصل کنید و طرح زیر را روی برد آپلود کنید:

    Char incomingByte; // داده های ورودی int LED = 12; // LED متصل به پین ​​12 void setup() ( Serial.begin(9600)؛ // پورت مقدار دهی اولیه pinMode (LED، OUTPUT)؛ //پایه 12 را به عنوان سریال خروجی تنظیم کنید. println("1 را روی LED ON یا 0 را فشار دهید تا LED OFF..."); ) void loop() ( if (Serial.available() > 0) (//if data from incomingByte = Serial.read(); // read byte if(incomingByte == "0" ) (digitalWrite(LED, LOW); // اگر 1 بود، سپس سریال LED را خاموش کنید. println("LED OFF. 1 را فشار دهید تا LED ON!")؛ // و یک پیام را دوباره چاپ کنید) if(incomingByte == " 1") (digitalWrite(LED, HIGH); // اگر 0 بود، سپس سریال LED را روشن کنید. println("LED ON. 0 را فشار دهید تا LED OFF!") ) )

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

    اما اکنون یکی دیگر از محصولات چینی بازار را به تصرف خود درآورده است، مسدود کننده وای فای esp8266 را خودتان انجام دهید می تواند به برد آردوینو یا سیستم دیگری متصل شود و دریافت خواهید کرد. اتصال پایداربا تعدادی مزایای دیگر پس بیایید مقابله کنیم آردوینو uno wi-fi، و آیا ارزش خرید این ماژول را دارد، و همچنین یک میکروکنترلر مشابه در wi-fi arduino چیست.

    در حال حاضر اکثر کاربران آردوینو دیگر نگران قیمت چنین دستگاه هایی نیستند، اگرچه 3 سال پیش ماژول وای فای آردوینو یک محصول لوکس به حساب می آمد. همه اینها به لطف مسدود کننده وای فای esp8266 است که سازندگان آن را به طور کامل معرفی کرده اند محصول جدیدقابل توجه در کارایی و در عین حال کاملاً ارزان بودن که سهم بسزایی داشت و رقابتی را در این راستا ایجاد کرد.

    بنابراین، arduino wi-fi esp8266 اکنون مانند همه برادرانش مقرون به صرفه ترین ماژول موجود در بازار است. بنابراین ، قیمت در سایت های خارجی از 2 دلار شروع می شود ، که به شما امکان می دهد این ماژول ها را به صورت دسته ای خریداری کنید و آنها را هزار بار مجدداً مجدداً باز نکنید و برای حفظ عملکرد ، مخاطبین را لحیم کنید.

    در ابتدا، این ماژول وای فای آردوینو عمدتاً به عنوان سپر وای فای آردوینو استفاده می شد، زیرا ارزان ترین گزینه بود و به هیچ وجه کمتر از نمونه اصلی نبود. این دستگاه واقعاً تقریباً افسانه ای است ، زیرا هیچ منفی قابل توجهی برای هزینه آن وجود ندارد. کتابخانه های زیادی از جمله کتابخانه های کاربر وجود دارد و همچنین از عملیات از طریق گذرگاه های سریال و ساده ترین دستورات AT و AT + پشتیبانی می کند. به لطف این، نیازی به مطالعه معنایی C99 بدنام نیست، همانطور که اغلب در مورد سایر میکروکنترلرهای شخص ثالث وجود دارد.

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

    1. پردازنده 160 مگاهرتز است، اما 32 بیتی است که تأثیر خاصی در عملکرد به جا می گذارد. اما شایان ذکر است که این ماژول هنوز به همراه بردهای آردوینو استفاده می شود که خود آنها را برش می دهند. فرکانس های بالاو بیشتر منابع را بدون هیچ دلیل مشخصی مصرف کنید.
    2. سازنده ای که ماژول wi-fi esp8266 را منتشر کرد پروژه های جالبی را در این زمینه به پایان نرساند و اکنون یک سری میکروکنترلر با کیفیت ثابت وجود دارد.
    3. استانداردهای مدرن امنیت شبکه البته WPA و WPA2 مدت زیادی است که به آن اندازه ای که ما دوست داریم امن نبوده اند، اما حضور آنها نمی تواند باعث خوشحالی چنین کنترلر ارزانی نشود.
    4. 16 پورت خروجی، از جمله 10 بیت، به شما امکان آزمایش با برد را می دهد.

    مهمتر از آن، از جعبه در انتظار شما است حافظه دائمیتا 4 مگابایت، بسته به نوع برد، و این کار با کتابخانه های بزرگ و حتی برخی فایل های رسانه ای را بسیار آسان می کند. در واقع، در اکثر بردهای آردوینو، 1 مگابایت یک لوکس غیرقابل قیمت در نظر گرفته می شود.

    ویژگی های wi-fi esp8266 قطعاً خوشایند است، به خصوص در مقایسه با رقبای گران قیمت آن، اما کاربری که تجربه قبلی با این بردها را نداشته باشد، در مورد نحوه اتصال آن سوال خواهد داشت. واقعیت این است که پین ​​های این ماژول بسیار بیشتر از آن چیزی است که افراد مبتدی به دیدن آن عادت دارند، و بر این اساس، آنها شروع به وحشت می کنند. با این حال، اگر وضعیت را درک کنید، در واقعیت هیچ چیز پیچیده ای در مورد آن وجود ندارد. کافی است لحیم کاری و آهن لحیم کاری را ذخیره کنید و فقط دستورالعمل ها را بخوانید.

    نحوه اتصال ماژول وای فای به آردوینو

    بیایید به اتصال esp8266 esp 12e و چیستی esp8266 نگاه کنیم. پل وای فای uart از این گذشته، این اتصال و پیکربندی ماژول است که بیشترین سؤال را ایجاد می کند.


    اول از همه، تصمیم بگیرید که کدام نسخه از میکروکنترلر را در دسترس دارید. در اولی، LED ها در نزدیکی پین ها ساخته می شوند، و در دومی، که اخیراً شروع به تولید کردند، چراغ های سیگنال در نزدیکی آنتن قرار دارند.

    لطفا قبل از اتصال دانلود کنید. آخرین سیستم عامل، که امکان افزایش نرخ مبادله بسته را تا 9600 واحد اطلاعات در ثانیه فراهم می کند. و اتصال را از طریق کابل usb-ttl و ترمینال مربوطه از CoolTerm بررسی می کنیم.


    پایه های اتصال کابل که در بالا توضیح داده شد استاندارد هستند، اما برق از طریق یک پایه 3.3 ولتی آردوینو می رود. مهم است که به یاد داشته باشید که حداکثر جریانی که برد می دهد را نمی توان بالای 150 میلی آمپر تنظیم کرد و ماژول های wi-fi ابری witty esp8266 esp8266 esp 07 و esp8266 برای آردوینو به 240 میلی آمپر نیاز دارند.

    با این حال، اگر منبع فعلی دیگری وجود نداشته باشد، می توانید از نسخه استاندارد آردوینو استفاده کنید، اما قدرت برد آسیب می بیند. اگرچه 70 میلی آمپر برای بار سبک کافی است، اما برای راه اندازی مجدد ناگهانی میکروکنترلر در زمان اوج بار آماده باشید و بر اساس آن نرم افزار بنویسید تا بدون بارگذاری بیش از حد برد، فایل ها را فیلتر و تقسیم کند.


    یکی دیگر از گزینه های اتصال در زیر است. مهم - کنتاکت های RX-TX توسط یک خط کش به هم متصل می شوند. از آنجایی که سطوح سیگنال ماژول ESP8266 3.3 ولت و آردوینو 5 ولت است، برای تبدیل سطح سیگنال باید از یک تقسیم کننده ولتاژ مقاومتی استفاده کنیم.

    ما ماژول وای فای را در آردوینو ثبت می کنیم

    همانطور که می دانید با تجربه مناسب می توانید esp8266 ex 12e شیلد را با گوشی هوشمند جفت کنید اما برای مبتدیان ثبت esp8266 esp 12 در سیستم آردوینو با مشکل مواجه می شود. در واقع کافی است ماژول را به هم متصل کنید و با انداختن چند دستور AT معمولی از طریق منوی اشکال زدایی، عملکرد آن را بررسی کنید.

    به عنوان مثال، می توانید یک LED استاندارد (برای نمودار اتصال بالا) چشمک زن اضافه کنید:

    #define TXD 1 // GPIO1/TXD01 void setup() (pinMode(TXD, OUTPUT)؛ ) void loop() (digitalWrite(TXD, HIGH); delay(1000); digitalWrite(TXD, LOW); delay(1000) ;)

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

    یک مبدل USB-UART کافی است، زیرا esp8266 از "مغز" آردوینو استفاده نمی کند و حافظه فلش آن برای ذخیره چند کتابخانه اصلی و سیستم عامل کافی است. بر این اساس، صرف هزینه اضافی برای برد کمکی بی فایده است اگر بتوانید آن را به مبدل لحیم کنید و به استفاده از آن در پروژه ادامه دهید. در عین حال، با اتصال یک منبع تغذیه کمکی و بدون نگرانی از اینکه انتقال داده ها در حساس ترین لحظه به دلیل کمبود برق سیستم متوقف می شود.

    یادداشت مهم! برای آخرین مدار، طرح را طبق معمول در آردوینو آپلود می کنیم، اما از آنجایی که ماژول ESP8266 به پین ​​های 0 و 1 متصل است، برنامه نویسی غیرممکن می شود. کامپایلر یک خطا نشان می دهد. سیم‌هایی که به ESP8266 می‌روند را از پایه‌های 0 و 1 جدا کنید، برنامه‌نویسی را انجام دهید و سپس پین‌ها را در جای خود قرار دهید و دکمه ریست را در آردوینو فشار دهید.

    در این مقاله اطلاعاتی در مورد نحوه مونتاژ مخزن مجهز به وبکمو از طریق روتر Wifi کنترل می شود.

    مواد لازم:

    1. دوربین وب
    2. روتر TP-Link TL-MR3020
    3. سرووهای SG90 - 2 عدد
    4. ضد لرزش پلت فرم دوربین
    5. باتری 7.2V 5000mah
    6. باتری 5V 2000mah
    7. Nano 3.0 Atmel ATmega328
    8. درایور موتور L298N
    9. سیم، ترموتوب، هاب USB، دیودها و موارد دیگر.
    10. پلتفرم مورد نظر شما، من DD1-1 را انتخاب کردم

    ساختن هیولای ما
    راه اندازی روتر MR3020
    بیایید ابتدا با روتر شروع کنیم. مدت ها فکر می کردم که OR-WRT یا CyberWRT را انتخاب کنم. OR-WRT در تنظیمات انعطاف پذیر است، اما تمام ویرایش ها و انجام تنظیمات خود را از طریق ترمینال با استفاده از برنامه Putty انجام می شود. و از آنجایی که در آن لحظه می ترسیدم از طریق ترمینال کار کنم، جایی را انتخاب کردم رابط کاربری گرافیکیاین CyberWRT است، به علاوه شما می توانید از طریق یک پورت USB متصل شوید.
    برای تغییر سیستم عامل روتر ما، باید فریمور CyberWrt MR3020 را دانلود کنید.

    همانطور که دانلود کردیم، کارهای زیر را انجام می دهیم:

    1) روتر را روشن کنید و منتظر دانلود باشید.
    2) وارد شوید و وارد 192.168.0.254 (پیش‌فرض admin\admin) شوید
    3) System Tools را در منوی سمت چپ پیدا کنید، آیتم System Upgrade وجود دارد و سیستم عامل را از طریق فرم وب آپلود کنید.
    4) برای راه اندازی مجدد (حدود 4 دقیقه) صبر کنید
    روتر آماده پیکربندی است.

    می توانید یکی از حالت ها را انتخاب کنید:"نقطه دسترسی" و " مشتری وای فایشبکه های". برای تنظیم حالت مشتری:
    - حالت "Client" را انتخاب کنید شبکه های وای فای»
    - آدرس IP دستگاه شما (دستگاه شما در این آدرس در دسترس خواهد بود. سعی کنید یک IP غیرفعال انتخاب کنید. به عنوان مثال: 192.168.1.100)
    - ماسک زیر شبکه (255.255.255.0)
    - دروازه (به عنوان مثال، IP شما روتر خانگییا دروازه - 192.168.1.1)
    - نوع رمزگذاری (نوع رمزگذاری مورد استفاده در شبکه خانگی شما)
    - رمز عبور (رمز ورود به شبکه خانگی)

    اگر همه کارها را درست انجام دادید، یک خط RSS در پایین صفحه خواهید داشت.

    وقتی همه چیز کار می کند، یک بخش ماژول خواهید داشت، در آنجا ماژول "ROBOT" را پیدا می کنید. نصب. آماده.

    اتصال L298N، آردوینو نانو، MR3020، دوربین و موارد دیگر

    تصویر همه چیز را به وضوح نشان می دهد، اما من آن را در هر صورت می نویسم.

    Arduino DIGITAL 4 پین - به پایه IN1 ماژول.
    Arduino DIGITAL 5 پین - به پایه IN2 ماژول.
    Arduino DIGITAL 6 pin - به پایه IN3 ماژول.
    Arduino DIGITAL 7 پین - به پین ​​IN4 ماژول.
    پین GND آردوینو به ترمینال GND ماژول است.
    ترمینال ماژول GND - باتری منهای.
    ترمینال ماژول 7.2 ولت - باتری مثبت.
    ترمینال ماژول RM - موتور سمت راست.
    ترمینال ماژول LM - موتور سمت چپ.
    پورت USB آردوینو - اتصال به هاب USB
    دوربین وب - اتصال به هاب USB
    هاب USB - به USB روتر متصل شوید

    قدرت، به اصطلاح، تدارکات، توسط یک باتری دوم انجام می شود. ظرفیت 2000 میلی آمپر در ساعت 5 ولت، به طوری که روتر نسوزد. و با دو باتری، ربات پایدارتر کار می کند. بنابراین، ما فقط آن را به کانکتور وصل می کنیم میکرو USB. از طریق هاب USB که به روتر متصل است، هم دوربین و هم آردوینو ما در حال حاضر برق دریافت می کنند.

    طرحی برای آردوینو نانو
    شما باید کتابخانه CyberLib را دانلود کنید، این کتابخانه فقط برای Atmega 328 است.

    /* نسخه 1.5 WIFI Tanka در DD1-1 اجرا شده: 1) حرکت دوربین در X و Y 2) شاخ 3) چراغ های جلو 4) صدا در هنگام روشن شدن */ #شامل // شامل کتابخانه #include // شامل کتابخانه سروو Servo myservo1; سروو myservo2; میلیس طولانی; // مورد نیاز برای تایمر int LedStep = 0; // شمارنده برای LED int i; #تعریف robot_go (D4_High; D5_Low; D6_Low; D7_High;) #Define robot_back (D4_Low; D5_High; D6_High; D7_Low;) #تعریف robot_stop (D4_Low; D5_righti_High; D5_righti_Low; D6_Low_Low; D5_Low؛ D6_ High D7_Low . لحن (11 , 494, 500);) #define init (D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D13_Out;) uint8_t inByte; void setup() ( myservo1.attach(9)؛ // سرووها را به پورت myservo2.attach (10) وصل کنید؛ // سرووها را به پورت D11_Out؛ D11_Low؛ // Speaker Headlamp_OFF؛ // چراغ های جلو به طور پیش فرض خاموش برای (uint8_t i) =0;i<12; i++) beep(80, random(100, 2000)); //звуковое оповещение готовности робота init; // Инициализация портов //Buzzer; // Инициализация портов динамика UART_Init(57600);// Инициализация порта для связи с роутером wdt_enable (WDTO_500MS); } void loop() { unsigned long currentMillis = millis(); // Обновление таймера if (LedStep == 0 && currentMillis - previousMillis >500)(// تأخیر 0.5 ثانیه. previousMillis = فعلیMillis؛ // به روز رسانی تایمر LED_ON؛ // فعال کردن LedStep = 1؛ // شمارنده گام ) اگر (LedStep == 1 && currentMillis - previousMillis > 500)( // تأخیر 0.5 ثانیه previousMillis = currentMillis؛ // تایمر به‌روزرسانی LED_OFF؛ // خاموش کردن LedStep = 2؛ // Step counter ) if (UART_ReadByte(inByte)) //اگر چیزی آمد ( سوئیچ (inByte) // به دستوری نگاه کنید (مورد "x": // توقف ربات robot_stop؛ شکستن؛ مورد "W" : // حرکت به جلو robot_go; شکستن؛ مورد "D": // چرخش روبات_چرخش_چپ به چپ؛ شکستن؛ مورد "A": // چرخش به راست robot_rotation_راست؛ شکستن؛ مورد "S": // حرکت روبات_به عقب؛ شکستن؛ مورد "U": // سروو می‌رود up myservo1.write(i -= 20)؛ break؛ case "J": // سروو پایین می رود myservo1.write(i += 20)؛ break؛ case "H": // سروو به چپ می چرخد ​​myservo2.write(i += 20)؛ زنگ تفريح؛ case "K": // سروو به راست می‌چرخد myservo2.write(i -= 20); زنگ تفريح؛ case "Y": // Servo turns 85 myservo1.write(85); myservo2.write(85); زنگ تفريح؛ مورد "F": // روشن کردن چراغ های جلو Headlamp_ON; زنگ تفريح؛ مورد "V": // چراغ های جلو را خاموش کنید Headlamp_OFF; زنگ تفريح؛ مورد "I": // بوق زنگ دار; زنگ تفريح؛ ) ) wdt_reset(); )

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

    آیا ماشین RC می تواند ماشین وای فای باشد...؟

    ماشین‌های RC خوب هستند، اما ماشین‌های RC ارزان برد محدودی دارند و فقط با ریموت خاصی که با کیت ارائه می‌شود کنترل می‌شوند.

    من یک جیپ 4x4 RC با سیستم تعلیق انعطاف پذیر و لاستیک های خارج از جاده را به قیمت حدود 30 دلار خریدم. پس از بازی با دستگاه، تصمیم گرفتم که می توان آن را با آن بهبود بخشید کمک وای فایو اندروید. بعد از صرف زمان کمی برد را به طور کامل از دستگاه جدا کردم. من ولتاژهای این برد را اندازه گرفتم و یک سیستم کنترل موتور با آن توسعه دادم کمک آردوینو. سیستم کنترل اصلی از PWM برای کنترل سرعت استفاده نمی کند. این ماشین برای حرکت از روی موانع با دنده بسیار کم و در نتیجه بسیار آهسته طراحی شده است. مدار من از PWM استفاده می کند.

    من چند ماهه که از آردوینو استفاده میکنم. من همچنین Asynclabs WiFi Sheild را برای Duemilanoe Arduino خریداری کردم تا با WiFi آزمایش کنم. همراه با یک کتابخانه نصب شده در آردوینو IDE. من توانستم برنامه ای بسازم که به شما امکان می دهد موتورها و جهت حرکت را با استفاده از WiFi کنترل کنید.

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

    ابزار و عناصر

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

    مولتی متر
    آهن لحیم کاری
    لحیم کاری
    پیچ گوشتی
    راه حل برای اچینگ برد مدار
    فایبرگلاس فویل
    انبر
    آردوینو
    AsyncLabs WiFi Shield
    کانکتورهای RJ45
    راننده موتور پل H
    خازن ها

    راننده موتور

    با استفاده از Eagle این مدار را طراحی و ساختم تخته مدار چاپیبرای او. این به عنوان یک درایور موتور و تنظیم کننده قدرت برای آردوینو عمل می کند.
    این به شما امکان می دهد از یک باتری استاندارد 7.2 ولتی برای تغذیه موتورهای اصلی و فرمان و آردوینو استفاده کنید.

    این مدار از یک درایور پل H یکپارچه دوگانه SN754410 برای کنترل موتورها استفاده می کند. پین های کنترل درایور به کابل RJ45 متصل می شوند که به AsyncLabs WiFi Sheild متصل می شود.

    سپر آردوینو

    با استفاده از کتابخانه SparkFun در Eagle توسعه دادم سپر آردوینوکه کنتاکت های WiFi Shield از آن عبور کرده و از طریق یک کانکتور RJ45 و 2 ترمینال پیچ به درایور موتور متصل می شوند.

    پین اوت RJ45 بسیار مهم است. یک خطای اتصال می تواند منجر به نتایج غیرقابل پیش بینی شود و شما باید برد را دوباره انجام دهید.

    حکاکی PCB

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

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

    برنامه

    ممکن است کد من به اندازه کافی کارآمد نباشد، اما کار می کند.

    ماشین تحریر

    من توانستم CarServer را بر اساس مثال SocketServer که از Wifi Sheild AsynLabs دریافت کردم بسازم.
    شما باید اطلاعات مربوط به خود را وارد کنید شبکه بی سیمبه کد آردوینو هنگامی که دستگاه روشن است، 15-45 ثانیه به آن فرصت دهید تا با روتر ارتباط برقرار کند. LED قرمز روی WiFi Shield به معنای برقراری ارتباط است.

    من این برنامه را با سی شارپ و MS Visual Studio 2008 ساختم. یک پنجره زیبا درست کردم و ماشین را می توان با فلش کنترل کرد.

    چرا ماشین را از طریق گوشی خود کنترل نمی کنید؟

    این فکر حدود یک هفته پس از خرید DroidX به ذهنم خطور کرد. من شروع به آزمایش کردم و در نهایت از Android SDK استفاده کردم. من برنامه های مشابهی پیدا کردم که از شتاب سنج برای کنترل استفاده می شود. با نگاه کردن به این برنامه ها، من خودم نوشتم.

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

    با ماشین 4*4 با وای فای در حیاط رانندگی کنید!

    برای ایجاد این پروژه زمان بسیار خوبی داشتم. من دانش و مهارت های جدید زیادی کسب کردم و اکنون یک ماشین 4x4 دارم که می توان آن را از طریق تلفن من کنترل کرد.

    من به یک دوربین برای نصب پشت شیشه جلو نیاز دارم تا بتوانم ببینم کجا می روم. این باید کم قدرت باشد و همچنین ویدئو را به تنهایی انتقال دهد. (من فکر می کنم آردوینو می تواند آن را مدیریت کند).

    فهرست عناصر رادیویی

    تعیین تایپ کنید فرقه تعداد توجه داشته باشیدخرید کنیددفترچه یادداشت من
    راننده موتور
    IC1 تراشهSN7544101 به دفترچه یادداشت
    تنظیم کننده خطی5 V1 به دفترچه یادداشت
    ترانزیستور دوقطبی

    2N3904

    1 به دفترچه یادداشت
    C1، C2 خازن الکترولیتی 2 به دفترچه یادداشت
    رابط2 پین7 به دفترچه یادداشت
    رابط8 پین1 به دفترچه یادداشت
    سپر آردوینو
    U1 برد آردوینو 1 به دفترچه یادداشت
    T1 ترانزیستور دوقطبی

    2N3904

    1 به دفترچه یادداشت
    R1 مقاومت 1 به دفترچه یادداشت
    3 دلار آمریکا مقاومت تریمر 1 به دفترچه یادداشت
    رابط2 پین2