[جز الحشود] - جزازة العشب التي يمكن لأي شخص السيطرة عليها عبر الإنترنت

هل لديك دقيقة هل يمكنك جز العشب الخاص بي؟


تاريخ موجز للتطور على ركبة جزازة العشب الروبوتية. يمكنك إدارته من أي مكان في العالم عبر الإنترنت. هل حلمت أن تشعر وكأنها عامل لمركبة روفر أم مركبة قمرية؟ فقط اذهب إلى موقع mowmylawn.ru ويمكنك التحكم في جزازة في فناء المنزل!




الخلفية


بدأت القصة الكاملة لجزازات العشب في صيف عام 2015 ، وكان أول منشور لي على GT يتعلق بتجربتي في بيع جزازات الروبوتات مما كان في المرآب.

تلفزيون



بعد ذلك ، اقترح ممثلو Robomow استخدام منصتهم لمزيد من التطوير. هذا مريح للغاية ، لأن جميع الأسئلة حول الأجهزة والميكانيكا تتطلب مهارات خاصة وتستغرق الكثير من الوقت.

أردت حقًا تنظيم مسابقة لجزازات العشب الآلية الروبوتية . كما اتضح ، هذه ليست مهمة سهلة. تم تسجيل أكثر من 15 فريقًا ، ولكن في النهاية أظهر ثلاثة مشاركين فقط التقدم.

رومان ساكوفيتش ، مينسك (بيلاروسيا) ، "بيلماور"
: . , .

: . Raspberrry Pi — . , , . Nucleo stm32 — . , , .

: RTK, . .

: GPS/GLONASS. . . .



فيوفانوف آي ، تفير


, , . , . , , — ( , ).

نيكولاي ميروننيكوف ، نوفوسيبيرسك



كل الجهود المبذولة لعقد منافسة في Skolkovo باءت بالفشل. في النهاية ، اتضح أنه لا توجد مروج مجانية لمسابقة الروبوتات في سكولكوفو. لا يريد جميع الجهات الراعية المحتملة العبث بالمنافسة الجديدة مع آفاق غير واضحة. لم أحصل على إجابة حتى على الرسائل الموجهة إلى المنظمات البلدية. ونتيجة لذلك ، كان لدينا احتمال غامض لتنظيم مسابقة لأربعة مشاركين من مدن مختلفة. على الرغم من أن المنافسة كانت دولية ، إلا أنه كان من الأفضل إلغاؤها ، وهو أمر لا يؤسف له.

Robocower 2016. ROS & FUN


أتعلم ROS وأكتب قاذفة لجزازة روبوتية ، أستخدم Kinect و SLAM ، فقط على قياس المسافات البصرية ، يقوم الروبوت بإنشاء خريطة ورسم طريق. لا يعمل Kinect بشكل جيد في الطقس المشمس. مع ROS ، ستجعل "Hello World!" في إحدى الأمسيات ، ثم الظلام. لم أجد مطلقًا دليلاً عاديًا للمبتدئين حول كيفية إنشاء روبوت ، وليس فقط الكتابة في الموضوعات. هل تساءل أي شخص عن سبب عدم وجود نقطة واحدة في الاتحاد الروسي على خريطة مجتمع ROS ؟ فتحت مجموعة VK .


في وقت فراغه ، قام بلف مؤازرتين ، ومستشعر فوق صوتي وأردوينو إلى قضبان "حصانه العامل". مرت اختبار بسيط من التفاف البتولا وتوقف! ومن ثم الهاوية ، من الخطر ترك هذا الشيء عبر موقعك! حتى أنها لن تكون قادرة على الركل مثل الروبوتات التي تعرف كيف.


اتضح أن الروبوتات - الأمور مملة للغاية في فهم معظم الناس ، وخاصة روبوتات الخدمة. نعم ، أعرف عن الصداقة الرائعة بين المكانس الكهربائية والقطط الآلية. أنا أعرف عن الإبداعات الفائقة من بوسطن ديناميكس ، وداربا ، والروبوت الرمزية القتالية الروسية ، وهذا يشبه الروبوتات أكثر من صندوق يتفاعل فيه خوارزمية معينة مع العالم الحقيقي.

في فهم ابنتي ، الروبوتات هي على الأقل محولات ، وليست القمامة التي أقضي بها بعض الوقت. لقد اتخذت قرارًا صعبًا وصنعت لعبة "مؤقتًا" على جهاز تحكم البلوتوث من جزازة آلية.



تعمل الإدارة مثل منفاخ الثلج . اتضح أن تكون ممتعة! خاصة بالنسبة لأبي.

فيديو منفاخ الثلج




المزيد - المزيد! كنت مهتمًا بفكرة تطبيق التحكم ليس على البلوتوث ، ولكن عبر الإنترنت ، باستخدام القياس عن بُعد. بالملل ، فكرة جديدة ومضطربة!

ولكن ماذا لو سمح لأي مستخدم للإنترنت بالتحكم في جزازة العشب الخاصة بي؟ هل تعرف مثل هذه الأفكار التي يصعب إخراجها من رأسك؟ كان ذلك فقط ... تم قبول التحدي!

جزازة الحشد



حديد





تمت إضافة التوت بي ، ومحور USB ، ومحول wifi ، وكاميرا الويب بدقة إلى المربع السحري.
من النقاط المثيرة للاهتمام على الحديد. لم يكن لدي سائق يتمتع بالخصائص المناسبة للمحركات. عادة ، يتم استخدام جسر H للترانزستورات ذات التأثير الميداني أو (المتشددين) للتتابع كسائق. أختار خيارًا أكثر صرامة ، لأنه كان المرحلات المتاحة.



يتضمن مخطط الاتصال المعتاد 4 مفاتيح لكل محرك ، أي 8 على 2 محركات تشغيل.



بالنظر إلى أنه من الممكن استخدام حالة الترحيل المفتوحة عادة بالإضافة إلى حقيقة أنه لا توجد حاجة لتعيين المحركات بشكل منفصل ، يمكنك القيام بـ 5 مرحلات فقط لمحركين قيد التشغيل.

بالإضافة إلى الروبوت نفسه ، يتم تثبيت الكاميرا على المنزل ، والذي يكون بتردد 3 إطارات / ثانية. يقوم بتحميل صورة نظرة عامة للموقع إلى خادم بروتوكول نقل الملفات على الإنترنت للحصول على توجيه أفضل. ولكن تم استبداله لاحقًا بمحلول من ivideon.

البرنامج


كما كان من قبل ، يتلقى Arduino رسالة ذات حرف واحد على المنفذ التسلسلي ، والتي تشير إلى الإجراء الضروري. أيضًا للاختبار والتصحيح ، يتم إرسال الرموز المستلمة من التوت عبر البلوتوث ، يمكنك توصيل الهاتف في وضع المحطة الطرفية وتلقي البيانات من الخادم أيضًا على الهاتف.

رسم اردوينو
int m1=2;
int m1b=3;
int m2=4;
int m2b=5;
int mk=6;
int pis=7;


char a,b;

void setup()  
{
Serial.begin(9600);
Serial1.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  while (!Serial1) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.println("Start");

 pinMode(statpin, OUTPUT);
 pinMode(m1, OUTPUT);
 pinMode(m1b, OUTPUT);
 pinMode(m2, OUTPUT);
 pinMode(m2b, OUTPUT);
 pinMode(mk, OUTPUT);
 pinMode(pis, OUTPUT);

analogWrite(pis,  1000);
delay(100);
analogWrite(pis,  700);
delay(200);
analogWrite(pis,  300);
delay(300);
analogWrite(pis,  1000);
delay(100);
analogWrite(pis,  100);
digitalWrite(pis,  HIGH);
 digitalWrite(statpin, LOW);
digitalWrite(m1, LOW);
digitalWrite(m1b,  LOW);
digitalWrite(m2, LOW);
digitalWrite(m2b,  LOW);
digitalWrite(mk,  LOW);
digitalWrite(pis,  HIGH);

}

void loop() // run over and over
{

  if (Serial.available()){
     a=Serial.read();
     Serial1.println(a);

    if(a=='B'){
digitalWrite(m1, HIGH);
digitalWrite(m1b,  LOW);
digitalWrite(m2, HIGH);
digitalWrite(m2b,  LOW);
    }
    if(a=='F'){
digitalWrite(m1, HIGH);
digitalWrite(m1b, HIGH);
digitalWrite(m2, HIGH);
digitalWrite(m2b,  HIGH);
    }
    if(a=='R'){
digitalWrite(m1, HIGH);
digitalWrite(m1b, LOW);
digitalWrite(m2, HIGH);
digitalWrite(m2b,  HIGH);
    }
    if(a=='L'){
digitalWrite(m1, HIGH);
digitalWrite(m1b, HIGH);
digitalWrite(m2, HIGH);
digitalWrite(m2b,  LOW);
    }

       if(a=='S'){
digitalWrite(m1, LOW);
digitalWrite(m1b, LOW);
digitalWrite(m2, LOW);
digitalWrite(m2b,  LOW);
    }

       if(a=='W'){
digitalWrite(mk, HIGH);
    }  
       if(a=='w'){
digitalWrite(mk, LOW);
    }   

       if(a=='V'){
digitalWrite(pis, LOW);
    }  
       if(a=='v'){
digitalWrite(pis, 700);
    }   
  
    }else{
      
    }
  
}




يعمل اثنان من سكربتات بايثون على التوت. يلتقط أحد النصوص البرمجية التي تستخدم opencv الفيديو من كاميرا ويب مثبتة على المسبار ويحمله عبر بروتوكول نقل الملفات إلى الخادم. أيضا ، مع بعض حصة الاحتمال ، يتم تحميل الصورة مع رسالة عشوائية من القائمة إلى حساب تويتر .

النص الأول
import numpy as np
import sys
import pygame
import pygame.camera
from pygame.locals import *
from twython import Twython
from random import random
import ftplib


pygame.init()
pygame.camera.init()
cam = pygame.camera.Camera("/dev/video0",(550,400))
cam.start()

CONSUMER_KEY = '-------MBZDT1PwibFeIcSp'
CONSUMER_SECRET = '-----------------1ZGHgBRz6aEr4YhUVuO84CuEV'
ACCESS_KEY = '-----------------4MCjSkny9Y6rJj5I32ulXctISQF'
ACCESS_SECRET = '------------------------cDadRY3He5Kv6CXVuqy2Dh'
api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)
api.verify_credentials()

host = "-.--.---.196"
ftp_user = "ftp_user"
ftp_password = "ftp_password"
con = ftplib.FTP(host, ftp_user, ftp_password)
con.cwd("/mowmylawn.ru/webcam")

a={0:' !   !',1:'  .   !',2:'     ...    ',3:'      ?',4:',   !',5:'  ,        :)) !',6:', ... !',7:' ,     .',8:'  :  -  ',9:'  —  ,    ...',10:'    :    ?',11:'  ',11:'-,   ',12:' -  ,         .',13:'—     ! — ,    !',14:',   ! ...:(((!',15:'  ? robogazon.ru',16:' ,    !'}

def twit():
    image = cam.get_image()
    pygame.image.save(image,'webcam.jpg')
    photo = open('webcam.jpg','rb')
    b = random() * (len(a)-1)
    b = int(round(b,0))
    #api.upload_media(media=photo)
    #api.update_status(status=a[b])
    api.update_status_with_media(media=photo, status=a[b])

def ftpimg():
    image = cam.get_image()
    pygame.image.save(image,'webcam.jpg')
    photo = open('webcam.jpg','rb')
    send = con.storbinary("STOR "+ 'webcam.jpg', photo)

while 1 :
    ftpimg()
    b = random() * (500)
    b = int(round(b,0))
    if b==107:
        twit()

con.close



يتلقى البرنامج النصي الثاني عبر http الأمر الحالي للعمل على الخادم ويرسل هذا الأمر عبر المسلسل إلى arduino.
  • "S" - توقف
  • "F" - تفضل
  • "B" - ظهر
  • "L" - إلى اليسار
  • "R" - إلى اليمين
  • "W" - تمكين محركات القص
  • "W" - قم بإيقاف تشغيل محركات القص
  • "V" - قم بتشغيل الإشارة
  • "V" - أوقف تشغيل الإشارة


النص الثاني
import serial,time
import urllib3

http = urllib3.PoolManager()


ser = serial.Serial("/dev/ttyUSB0",9600)
ser.writelines("S");

olddata=0
countolddata=0
while 1 :
    r = http.request('GET', 'http://mowmylawn.ru/1.php')
    
    if r.data!=olddata:
        olddata=r.data
        countolddata=0
    else:
        countolddata+=1
    
    if countolddata>20:
        ser.writelines("S")
    else:
        ser.writelines(r.data)

ser.close()
con.close



خدمة الويب


لقد قمت بتحميل صفحة للتشغيل. هناك ملفان .jpg على الصفحة ، يتم تحديثهما أثناء التنزيل. هناك العديد من العوامل التي تؤثر على التأخيرات في التحكم والقياس عن بعد ، هذه هي سرعة اتصالك والقناة على الخادم والقناة في مكاني.

تحديث الرمز .jpg
<script>
setInterval(function(){
var im1='http://mowmylawn.ru/webcam/webcam.jpg?s='+Math.random();
var im2='http://kosmos-podolsk.ru/webc1.jpg?s='+Math.random();
var tmpImg = new Image() ;
    tmpImg.src = im1 ;
    tmpImg.onload = function() {
         $("#w1dd").attr('src',im1 );
    } ;

    tmpImg.src = im2 ;
    tmpImg.onload = function() {
         $("#w2dd").attr('src',im2 );
    } ;	

}, 200);
</script>



الحد الأقصى لمعدل التحديث الذي تمكنت من تحقيقه:
  • كاميرا على المسبار 4 هرتز ؛
  • الكاميرا في المنزل 3 هرتز.

تتكون قاعدة بيانات Mysql من جدولين ، يحتوي الأول على زوج مفتاح / قيمة ، وهذا أمر للروبوت. الجدول الثاني هو المستخدمين.
عندما تصل إلى قائمة الانتظار على الموقع ، يتم إرسال طلب الحصول على ajax لإضافة المستخدم ، ويتم إدخال إدخال بعلامة الطابع الزمني ، وعنوان IP الخاص بك والمفتاح الذي تم إنشاؤه للإدارة في قاعدة البيانات.

يمكن لشخص واحد فقط التحكم في جزازة في نفس الوقت (باستثناء لي) - هذا هو المستخدم مع أصغر طابع زمني. عندما يحين دورك وتبدأ في التحكم في جزازة - أدخل الطابع الزمني لبدء الإدارة في قاعدة البيانات ، يتم منح كل منها 60 ثانية للتحكم ...



في كل مرة تشير فيها إلى أزرار التحكم ، يتم إرسال طلب الحصول على أمر مع الأمر ومفتاح التحكم الخاص بك ، ويتم التحقق من الفرق بين الوقت الحالي والوقت الذي بدأت فيه "اللعبة" ، إذا كان الفرق أكثر من 60 ثانية ، تنتهي اللعبة بالنسبة لك ، سجلك تمت إزالته من القاعدة ويمكنك الانتظار مرة أخرى ، تذهب "اللعبة" إلى اللاعب التالي.

فيديو ترويجي




ثم أعتقد أنه من الضروري التصوير باللغة الإنجليزية ... ثم عانى أوستاب.








أول منشور لي على reddit . حاول إدارة mowmylawn.ru . في حالة وجود طابور كبير أو تأثير تأثير - يرجى الفهم والتسامح.

ملاحظة: تذكر أنه يمكنك المشاركة في مشروع مشترك لتطوير جهاز تتبع اللياقة البدنية لرياضة الصدمات KickBrick . الفريق في انتظارك!

محدث: كان لدي ثلاث مشاكل ، حلان بالفعل.
1) عندما تكون المناورات نشطة للغاية ، يتم فصل كبل إمداد الطاقة لمحركات الدفع ~ 27V ولم يتحرك أحد المحركات إلى الأمام.
2) على ما يبدو ، بسبب نفس السلك ، أحرق محول wi-fi
3) أدى عدد كبير من المستخدمين الذين لديهم GT و reddit أولاً إلى قائمة الانتظار لأكثر من 1000 مستخدم ، ثم تعطل الخادم. التحسين هو كل شيء لدينا!

حدث: اضطررت لاستبدال اردوينو وتنظيف قائمة الانتظار. يمكنك المحاولة.

تحديث:

Source: https://habr.com/ru/post/ar397391/


All Articles