با ما همراه باشید

IOT

ماشین رباتیک همراه با دوربین که از طریق وب کنترل می شود

منتشر شده

در

در این جلسه DIY ما در حال ساخت یک ماشین رباتیک همراه با دوربین هستیم که از طریق وب  می شود کنترلش کرد همچنین از رزبری پای (Raspberry Pi) و وب کم نیز استفاده می کنیم. این پروژه می تواند یک ابزار امنیتی و جاسوسی مفید و ارزان باشد که دارای بسیاری از گزینه های قابل تنظیم است و می تواند در عرض چند ساعت ساخته شود. در این پروژه IoT (اینترنت اشیاء) ما عمدتا از رزبری پای (Raspberry Pi)، دوربین وب کم و دو موتور DC با شاسی ربات برای ساخت این پروژه ماشین رباتیک استفاده می کنیم. این یک وبکم (دوربین) است که بر روی آن نصب شده است، از طریق آن ما می توانیم ویدئو زنده دریافت کنیم و بخش جالب اینجاست که ما می توانیم این ربات را از طریق مرورگر وب بر روی اینترنت کنترل و حرکت دهیم. همانطور که می توان با استفاده از صفحه وب کنترل کرد، به این معناست که می توان آن را با استفاده از صفحه وب در موبایل کنترل کرد. ما یک صفحه وب با HTML ایجاد کردیم که دارای لینک چپ، راست، جلو، عقب است، که با کلیک کردن روی آن ما می توانیم ربات را در هر جهت حرکت دهیم. در اینجا ما برای حرکت و بدست آوردن ویدئو به صورت زنده از دوربین USB استفاده کردیم و برای ارسال دستورات از صفحه وب به Raspberry Pi  استفاده کردیم ، و از پایتون برای حرکت روبات بهره بردیم که در بخش بعدی این آموزش توضیح داده خواهد شد. ما  Raspbian Jessie OS داریم که بر روی برد Raspberry Pi نصب کرده ایم. شما می توانید به این مقاله را برای نصب Raspbian OS و شروع به کار با Raspberry  Pi نگاهی بی اندازید. 

نصب و پیکربندی Motion برای دریافت  ویدیو:

Motion (نرم افزار دوربین مدار بسته) رایگان ، نرم افزار CCTV آشکارساز حرکت متن باز (open source)، توسعه یافته برای لینوکس است.  حرکت را تشخیص می دهد و ضبط ویدئو را شروع می کند. با “Motion” نصب شده در Raspberry Pi شما می توانید Raspberry Pi خود را به یک دوربین امنیتی تبدیل کنید. برای دریافت ویدئو بصورت زنده، استفاده از فیلم های زمان گذشت و گرفتن عکس های فوری در فاصله زمانی منظم استفاده می شود. آن را ضبط کرده و ویدئو را هر زمان که Motion ، هر گونه اختلال در منطقه مشاهده کند، ذخیره می کند. ویدئو بصورت زنده را می توان در مرورگر وب با وارد کردن آدرس IP رزبری پای همراه با پورت مشاهده کرد.

ما یک آموزش مختصر در مورد استفاده از Motion با Raspberry Pi و دوربین USB (وبــکم) ایجاد کرده ایم، در اینجا ما به طور خلاصه توضیح می دهیم که چگونه آن را بر روی Raspberry Pi نصب کنبم و برای ربات مان که وظیفه ارسال ویدئو بصورت زنده به صفحه وب دارد استفاده کنیم.

در اینجا شما باید فقط چند دستور اجرا کنید تا بتوانید اولین ویدیو را در شبکه دریافت کنید. قبل از آن، به درستی بررسی کنید که Raspberry Pi شما به اینترنت وصل است، یا با استفاده از LAN یا Wi-Fi و سپس مراحل زیر را دنبال کنید:

مرحله ۱: ابتدا دستور زیر را اجرا کنید تا Raspbian OS در Raspberry Pi به روز شود:

sudo apt-get update

مرحله ۲: سپس با استفاده از دستور زیر، کتابخانه  ‘Motion’ را نصب کنید:

sudo apt-get install motion

مرحله ۳: الان  Motion daemon را  Yes کنید با ادیت کردن فایل: : / etc / default / motion به گونه ای که همیشه در حال اجراند.: / etc / default / motion به گونه ای که همیشه در حال اجراند.  این فایل را با استفاده از ویرایشگر ‘nano’ با sudo مانند زیر ویرایش کنید:

sudo nano /etc/default/motion

سپس برای ذخیره کردن فایل کلیدهای CTRL + X  فشار دهید، سپس «Y» و دکمه Enter بزنید.

مرحله ۴: حالا ما نیازمندیم که  دستور دایرکتوری هدف (/ var / lib / motion /) را تعیین کنیم، که در آن Motion همه ویدئوهای ضبط شده و فایل های تصویری ذخیره می کند. ما باید با قرار دادن دستور زیر، “Motion” را به عنوان مالک این دایرکتوری قرار دهیم:

sudo chown motion:motion /var/lib/motion/

این دستور لازم است در غیر این صورت هنگامی که وضعیت سرویس Motion را بررسی می کنید خطایی دریافت  خواهید کرد.

شما می توانید وضعیت سرویس را با استفاده از این دستور بررسی کنید:  sudo وضعیت motion سرویس می کند

مرحله ۵: حالا تقریبا انجام شده است، ما فقط باید یک گزینه config را در فایل تنظیمات Motion (/etc/motion/motion.conf) تغییر دهیم که stream_localhost off است. ما باید این جریان لوکال هاست را خاموش کنیم، در غیر این صورت ما نمی توانیم به  ویدئو در شبکه مان دسترسی داشته باشیم و تنها از طریق Raspberry Pi قابل دسترسی خواهد بود. برای انجام این کار، فایل پیکربندی Motion را با ویرایشگر nano ویرایش کنید و آن را خاموش کنید، مانند شکل زیر:

sudo nano /etc/motion/motion.conf

اکنون ما آماده هستیم که  فید زنده مان از دوربین(وبکم) که به وسیله USB  به Pi متصل است  را دریافت کنیم. فقط سرویس Motion را با استفاده از دستور زیر اجرا کنید و آی پی Raspberry Pi خود را با پورت ۸۰۸۱ در مرورگر خود باز کنید (مانند ۱۹۲٫۱۶۸٫۴۳٫۱۹۹:۸۰۸۱). در این پروژه ما این آی پی را در کد HTML مان با تگ img src  اجرا می کنیم.

sudo /etc/init.d/motion restart

و شما فید زنده را از طریق دوربین وبکم خود خواهید دید. در اینجا ما از یک دوربین وب کم USB استفاده کرده ایم که با Raspberry Pi هماهنگ شده است اما شما می توانید با استفاده از یک دوربین با کیفیت خوب با وضوح بهتر استفاده کنید.  در مرورگر نشان داده می شود، شما می توانید از هر دستگاه برای مشاهده ویدئو بصورت زنده استفاده کنید، دستگاهی که از مرورگر وب پشتیبانی کند مانند موبایل، تبلت و … .

در صورت لزوم، راه اندازی مجدد Raspberry Pi را به عنوان یک مرحله عیب یابی یا قلق گیری امتحان کنید.

sudo reboot

این همه چیز در مورد استفاده از Motion برای ربات Surveillance (رباتی که دارای دوربین هست) ما است، علاوه بر این، دارای گزینه های متعدد پیکربندی است که ما در مورد آموزشش بعدا بحث خواهیم کرده ایم.

توجه: اگر شما از مدل Raspberry Pi زیر نسخه ۳ استفاده کردید، ممکن است به یک دانگل Wi-Fi نیاز داشته باشید تا به صورت دستی raspberry Pi را به روتر وصل کنید. 

راه اندازی فلاسک در Raspberry Pi برای کنترل ربات از طریق صفحه وب:

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

یک بسته پشتیبانی از فلاسک در Raspberry Pi با استفاده از دستور داده شده نصب کنید:     

$ pip install Flask

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

from flask import Flask
from flask import Flask, render_template, request

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

کد HTML برای صفحه وب:

ما باید یک صفحه وب با استفاده از زبان HTML برای نمایش لینک های کنترل (چپ، راست، جلو، عقب) ایجاد کنیم تا دستورات  را بتوانیم از طریق مرورگر وب به ربات منتقل کنیم. ما از اسکریپت جی کوئری برای فراخوانی توابع در برنامه پایتون استفاده می کنیم. پنج توابع در کد پایتون وجود دارد که ربات را به سمت چپ، راست، عقب و جلو حرکت می دهد و یکی نیز برای توقف می باشد. کد کامل پایتون در انتها، داده شده است. این توابع را می توان با کلیک کردن بر روی لینک های کنترل که در صفحه وب هستند اجرا کرد، و موتورها مرتبط به چه نوع لینکی هستند حرکت می کنند. در اینجا ما کدها را به نحوی نوشته ایم که روبات زمانی حرکت می کند که دستان روی دکمه ماوس نگه بدارید و به محض برداشتن دستتان روی دکمه ماوس روبات متوقف می شود، البته جهت حرکت ربات نیز مستلزم این هست که چه لینکی را فشرده اید. در زیر کد HTML برای صفحه وب شامل jQuery است:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
</head>
<body>
 
<img src="http://192.168.43.199:8081" /> <!--Enter the IP Address of your Raspberry Pi-->
<div style="float:right">
 
</div>
<div style=" height:400px; width:300px; float:right;">
<center>
<h1><span style="color:#5C5C5C;">Circuit</span><span style="color:#139442"> Digest</span></h1>
<h2>Surveillance Robot</h2><br><br>
<a href="#" id="up" style="font-size:30px;text-decoration:none;">  🢁🢁<br>Forward</a><br><br></center>
<a href="#" id="left" style="font-size:30px;text-decoration:none;"> 🢀🢀Left</a>        
<a href="#" id="right" style="font-size:30px; text-decoration:none;"> Right 🢂🢂</a><br><br>
<center><a href="#" id="down" style="font-size:30px;text-decoration:none;"> Backward<br> 🢃🢃</a></center>
</div>
 
<script>
$( document ).ready(function(){
    $("#down").on("mousedown", function() {
     $.get('/down_side');
     }).on('mouseup', function() {
     $.get('/stop');
    });
    $("#up").on("mousedown", function() {
     $.get('/up_side');
     }).on('mouseup', function() {
     $.get('/stop');
    });
    $("#left").on("mousedown", function() {
     $.get('/left_side');
     }).on('mouseup', function() {
     $.get('/stop');
    });
    $("#right").on("mousedown", function() {
     $.get('/right_side');
     }).on('mouseup', function() {
     $.get('/stop');
    });
});
</script>
 
</body>
</html>

در اینجا شما می توانید ببینید که ما آدرس IP، که در آن ویدئو در صفحه وب در حال پخش هست با استفاده از تگ img src  جاسازی کردیم. آدرس IP را با توجه به Raspberry Pi تغییر دهید اما پورت را دست نزنید.

<img src="http://192.168.43.199:8081" /> <!--Enter the IP Address of your Raspberry Pi-->

کاربر نیاز به کپی کردن کدهای HTML بالا در برخی از ویرایشگر متن مانند(notepad) دارد و فایل را با فرمت HTML اینگونه  (robot.html) ذخیره کند. سپس این فایل HTML را در پوشه templates با توجه به مکان اسکریپت پایتون خود قرار دهید. یغنی اینکه شما باید یک پوشه به نام templates  در جایی که فایل کد پایتون  برای این ربات قرار داده اید ایجاد کنید. فایل HTML در این پوشه templates است. این مرحله مهم است، اگر این نکنید  پروژه کار نخواهد کرد. شما می توانید فایل robot.html را به وسیله دابل کلیک بر روی آن بازش کنید تا ببینید که چگونه لینک های کنترل شما عمل خواهند کرد. در ادامه می توانید، تمام روند در نمایش ویدیو بررسی کنید. پس از آنکه ما برنامه نویسی و تمام کارها انجام دادیم، می توانیم کد پایتون را در Raspberry Pi اجرا کنیم وآی پی آدرس را  در مرورگر وب باز کنیم. (مانند http://192.168.43.199:5010)

شما می توانید IP آدرس Raspberry Pi خود را با استفاده از دستور ifconfig چک کنید:

ifconfig

مدار و راه اندازی:

پس از تست کردن پخش ویدئو بصورت زنده و کد HTML و غیره، ما نیاز به ساخت یک ربات به صورت دستی که باید چرخ ها، شاسی و پیچ و مهره و … را تنظیم کنیم  یا اینکه از ربات پیش ساخته استفاده کنیم. پس از آن که پاور بانک را برای تغذیه Raspberry Pi قرار دادید، سپس Raspberry Pi و دوربین وب را به پاور بانک متصل کنید و تنظیمشان کنید و با استفاده از نوار چسب یا نوار لاستیکی ثابتشان کنید، USB دوربین به Raspberry Pi وصل کنید.

در این پروژه IoT، ما نیازی به اتصالات فراوانی نداریم، ما فقط نیاز به اتصال تعدادی سیم به IC داریور L293D و موتور DC  داریم. اتصالات در مدار زیر نشان داده شده است. در اینجا ما یک PCB همه منظوره برای نصب L293D IC برای کاهش فضا مورد استفاده قرار دادیم، اما شما می توانید از ورقه کوچک برای اتصال موتور DC با L293D استفاده کنید.

چگونه کار می کند:

عملکرد و کار این ربات ناظر بسیار آسان است.  یک فایل پایتون (با پسوند .py) ایجاد کنید، و کد زیر را در آن کپی و سپس  آن را در خود رزبری پای ذخیره کنید. سپس فایل HTML را در پوشه templates قرار دهید همانطور که در بالا توضیح داده شده است. فراموش نکنید که آدرس IP را در فایل HTML تغییر دهید.

سپس با وارد کردن دستور زیر، کد پایتون را اجرا کنید:

python name_of_file.py

سپس آدرس IP  رزبری پای خود را با پورت ۵۰۱۰ مانند http://192.168.43.199:5010 باز کنید ( آدرس IP را با آدرس خود جایگزین کنید).  حالا صفحه وبی با چهار لینک کنترل ربات دارید که می توانید ویدیوها به صورت زنده مشاهده کنید. کاربر می تواند با کلیک کردن و نگه داشتن لینک ها، ربات را کنترل کند. اگر کاربر روی لینک ها کلیک کند و نگه دارد، ربات با توجه به لینک کلیک شده حرکت می کند و هنگامی که کاربر لینک را رها کند، ربات به طور خودکار متوقف می شود.

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

کد:

from flask import Flask
from flask import render_template, request
import RPi.GPIO as GPIO
import time
( ___app = Flask(___name
m11=18
m12=23
m21=24
m22=25
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(m11, GPIO.OUT)
GPIO.setup(m12, GPIO.OUT)
GPIO.setup(m21, GPIO.OUT)
GPIO.setup(m22, GPIO.OUT)
GPIO.output(m11 , 0)
GPIO.output(m12 , 0)
GPIO.output(m21, 0)
GPIO.output(m22, 0)
print “DOne”
a=1
@app.route(“/”)
def index():
return render_template(‘robot.html’)
@app.route(‘/left_side’)
def left_side():
data1=”LEFT”
GPIO.output(m11 , 0)
GPIO.output(m12 , 0)
GPIO.output(m21 , 1)
GPIO.output(m22 , 0)
return ‘true’
@app.route(‘/right_side’)
def right_side():
data1=”RIGHT”
GPIO.output(m11 , 1)
GPIO.output(m12 , 0)
GPIO.output(m21 , 0)
GPIO.output(m22 , 0)
return ‘true’
@app.route(‘/up_side’)
def up_side():
data1=”FORWARD”
GPIO.output(m11 , 1)
GPIO.output(m12 , 0)
GPIO.output(m21 , 1)
GPIO.output(m22 , 0)
return ‘true’
@app.route(‘/down_side’)
def down_side():
data1=”BACK”
GPIO.output(m11 , 0)
GPIO.output(m12 , 1)
GPIO.output(m21 , 0)
GPIO.output(m22 , 1)
return ‘true’
@app.route(‘/stop’)
def stop():
data1=”STOP”
GPIO.output(m11 , 0)
GPIO.output(m12 , 0)
GPIO.output(m21 , 0)
GPIO.output(m22 , 0)
return ‘true’
if name == “main“:
print “Start”
app.run(host=’0.0.0.0′,port=5010)





برای دانلود فایل های این پروژه اینجا کلیک کنید.


ادامه مطلب
1 دیدگاه

1 دیدگاه

یک پاسخ بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

مطالب برتر

>