Мазмуну:

Arduino жана Raspberry Pi менен интернет көзөмөлдөгөн видео агымдык роботту куруңуз: 15 кадам (сүрөттөр менен)
Arduino жана Raspberry Pi менен интернет көзөмөлдөгөн видео агымдык роботту куруңуз: 15 кадам (сүрөттөр менен)

Video: Arduino жана Raspberry Pi менен интернет көзөмөлдөгөн видео агымдык роботту куруңуз: 15 кадам (сүрөттөр менен)

Video: Arduino жана Raspberry Pi менен интернет көзөмөлдөгөн видео агымдык роботту куруңуз: 15 кадам (сүрөттөр менен)
Video: Lesson 1: What is Arduino? Types of Arduino Boards and SunFounder Kit | SunFounder Robojax 2024, Ноябрь
Anonim
Arduino жана Raspberry Pi менен интернет көзөмөлдөгөн видео агымдык роботту түзүңүз
Arduino жана Raspberry Pi менен интернет көзөмөлдөгөн видео агымдык роботту түзүңүз
Arduino жана Raspberry Pi менен интернет көзөмөлдөгөн видео агымдык роботту түзүңүз
Arduino жана Raspberry Pi менен интернет көзөмөлдөгөн видео агымдык роботту түзүңүз
Arduino жана Raspberry Pi менен интернет көзөмөлдөгөн видео агымдык роботту түзүңүз
Arduino жана Raspberry Pi менен интернет көзөмөлдөгөн видео агымдык роботту түзүңүз

Мен @RedPhantom (aka LiquidCrystalDisplay / Itay), Израилден келген 14 жаштагы студент, Макс Шейн кенже орто мектебинде илим жана математика боюнча билим алып жатам. Мен бул долбоорду баарынан үйрөнүү жана бөлүшүү үчүн жасап жатам!

Сиз өзүңүз ойлонушуңуз мүмкүн: хмм … Мен геикмин … Ал эми менин балдарым алар менен долбоор түзүшүмдү каалашат … Ал робот жасоону каалаган. Ал аны кичинекей күчүккө окшош кийинтип алгысы келди. Бул дем алыш күндөрү жакшы долбоор!

Raspberry Pi ар бир колдонууга ылайыктуу: бүгүн биз бул микро-компьютердин робот жасоо жөндөмүн ачыктайбыз. Бул робот алат:

  • Айдап, LAN (WiFi) аркылуу Raspberry Pi сыяктуу WiFi тармагына туташкан каалаган компьютерди башкарыңыз.
  • Raspberry Pi камера модулу аркылуу видеону түз алып көрүңүз
  • Сенсордук маалыматтарды Arduino аркылуу жөнөтүү

Бул жакшы жарык долбоорго эмне керек экенин көрүү үчүн жөн гана кийинки кадамды (эскертүүлөрдү) окуп чыккыла, андан кийин Кааланган: Компоненттер кадамы.

Бул жерде GitHub репо: GITHUB РЕПО МЕНЕН

Бул жерде Долбоордун Сайты: PROJECT SITE BY

1 -кадам: Эскертүү: Этият болгула, муну үйдө сынап көргүлө

ЭСКЕРТҮҮ:

БУЛ КОНЦЕРТТИН АВТОРУ СИЗДИН ЭЛЕКТР ЭНЕРГИЯСЫ ЖАНА ЭЛЕКТР ЖАБДЫКТАРЫНЫН НЕГИЗГИ ИШИ ЖӨНҮНДӨ БИЛИМИҢИЗ БАР. ЭТИПТҮҮ ЭМЕС БОЛСОҢУЗ ЖАНА ЭРКИНДЕРДИ ЭРКИНГЕ ЭМЕС БОЛСОҢУЗ: ЭЛЕКТРОНДУК ЖАБДЫКТАРГА ЗЫЯН, ӨЗҮҢҮЗДҮ КҮРГҮЗҮҢҮЗ ЖАНА ОТТОН СЕБЕП КЫЛЫҢЫЗ. Эгерде сизде бул окуу куралы үчүн керектүү билим жок болсо (ширетүү, электрониканын негиздери), сураныч, муну жеке адам менен аткарыңыз. Рахмат.

БУЛ КӨРСӨТМӨДҮН АВТОРУ ӨЗҮНӨН ЖООПКЕРЧИЛИКТИ ЖЕ ЖОГОЛТУЛГАН МҮЛКҮНӨ ЖАНА ФИЗИКАЛЫК ЗЫЯНГА ЖАЗЫЛАТ. ЖАЛПЫ СЕНСИЗДИ КОЛДОНУУ

2 -кадам: Компоненттер

Байланыштар
Байланыштар
Байланыштар
Байланыштар
Байланыштар
Байланыштар
Байланыштар
Байланыштар

Биз ширетүүчү темирди ысытуудан мурун, эмнеге байланыштуу болушу керектигин карап чыгышыбыз керек. Мен бул жөнөкөй диаграмманы жасадым (MS Paint мени эч качан түшүрбөйт), ал роботтун ичинде кайсы бир бөлүгү кайда жайгашканын сүрөттөйт.

Сүрөт курулган, андыктан чоңойтуп, толук чечилишинде көрүп, текстти окуй аласыз.

6 -кадам: Пи үчүн дарек

Ардуино Пи менен план боюнча сүйлөшөт. Пи компьютер менен сүйлөшөт, мунун баары кантип иштейт?

Келгиле, Connection Initiation тизмегибизди карап көрөлү:

  1. Raspberry Pi башталат
  2. Arduino баштайт
  3. Raspberry Pi TCP кардарын баштайт. Бул LED аркылуу IP дарегин жок кылат.
  4. Raspberry Pi Serial Communication кызматын баштайт жана Arduino менен туташат

Ошондуктан биз кандайдыр бир байланышты түздүк:

Компьютер Raspberry Pi Arduino

Мен Arduino/Raspberry Pi протоколун жазуу үчүн Raspberry Pi жана Python менен сүйлөшкөн программаны жазуу үчүн Visual Basic. NETти (Microsoft Visual Studio 2013 Community) колдондум.

Сиздин Pi IP дарегиңизди билүү үчүн, аны HDMI экранына туташтыруу, Shellге кирүү жана буйрукту терүү керек:

хосттун аты -I.

7 -кадам: План

Азыр бизде Пинин IP дареги бар, биз ага SSH киргизебиз (SSH Secure Shell - биз Linux кабыгына алыстан туташабыз) жана Сервердин IP дарегин көрсөткөн файлды жазабыз. Пи, стартапта ошондой кылат жана угуп жаткан портун жазат. Бул жерде мен коддон бир нече мисал берем, бирок бул кадамдан жана мен түзгөн GitHub филиалынан жүктөп алууга болот. Бул тууралуу кийинчерээк толук маалымат.

Ал мындай иштейт:

  1. RPi иштей баштайт.
  2. RPi Tcp программасын өзүнүн жергиликтүү IP жана белгиленген портунда баштайт.
  3. RPI видео агымын баштайт
  4. RPI жабылат.

8 -кадам: Денеге баруу

Эми биз физикалык жактан бүт нерсени курууга даярбыз. Эгерде сиз 1 -кадамды (эскертүү тексти жана лицензия) окуй элек болсоңуз, улантуудан мурун муну кылыңыз. Мен келтирилген зыян үчүн жооптуу эмесмин. Жана шектенүү пайда болгон учурда, бул робот аскердик максаттарда колдонулбашы керек, эгерде бул зомби апокалипсиси болбосо. Анан да акыл -эсти колдон.

Окутуучуларды окуу тизмесинен угуу сунушталат.

Байланыш схемасын "Байланыштар" кадамынан жүктөп алыңыз.

MOTORS

Сиз сатып алган моторлор, сыягы, окшош болушу мүмкүн, эгерде алар туура эмес болсо: эгерде аларда эки гана зым болсо (көпчүлүк учурда кара жана кызыл), ал иштеши керек. Алардын иштөө чыңалуусун жана агымын көрүү үчүн онлайн маалымат барагын издеңиз. Комментарий бөлүмүндө суроолорду берүүдөн тартынбаңыз. Мен аларды дайыма окуйм.

H-BRIDGE

Мен буга чейин H-Bridge менен иштеген эмесмин. Мен бир аз googled жана HB принциптерин түшүндүрүүчү жакшы таптым. Сиз ал жакка да карап (Окуу тизмесинин кадамын караңыз) жана өзүңүздү да илип коюңуз. Мен көп түшүндүрбөйм. Сиз ал жерден окуй аласыз жана бул схема жөнүндө керектүү нерселердин бардыгын биле аласыз.

LED

Бул кичинекей шам чырак логикалык чыңалуудан иштей алат, анткени ал дээрлик токту талап кылбайт жана 3V-5V 4mA-18mA чыңалуусун талап кылат. Милдеттүү эмес.

ARDUINO

Arduino сигналдарды жана буйруктарды Raspberry Piден Serial туташуусу аркылуу алат. Биз Arduino моторлорубузду башкаруу үчүн колдонобуз, анткени Raspberry Pi аналогдук баалуулуктарды GPIO аркылуу чыгара албайт.

9 -кадам: Raspberry Pi'ни автоматтык түрдө баштоо

Raspberry Pi'ди иштеткен сайын, колдонуучу атын жана сырсөздү терүүгө туура келет. Биз муну кылгыбыз келбейт, анткени кээде биз клавиатураны Пи менен байланыштыра албайбыз, андыктан биз Пиди даярдаган программаны автоматтык түрдө баштоо үчүн бул окуу куралынан ушул кадамдарды аткарабыз. Эгерде ал укурукка илинип калса, биз аны үзгүлтүккө учуратуу үчүн Ctrl+C кошо алабыз.

  • sudo crontab -e
  • Анан биз бул файлды cron менеджерине автоматтык түрдө кошуу буйругун киргизебиз.

Биз pibot.sh файлын чакырабыз, ал роботту иштетүү үчүн ар кандай питон скрипттерин баштоого буйрук берет. Келгиле, муну карап көрөлү: (Биз программанын GPIOго кирүүсүнө уруксат берүү үчүн Python программалары менен sudo)

raspivid -o --t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv агымы: /// dev/stdin --sout '#rtp {sdp = rtsp: //: 8554}': demux = h264

Пи тарабындагы бардык иштерди аткарган код on_startup.sh деп аталат.

Бул бардыгын иштетүүчү жөнөкөй кабык скрипти.

10 -кадам: Хоестон, бизде көйгөй жаралды … DC Motors бирдей модель эмес

Мен H-Bridgeди мурунтан эле сынап көргөм, ал жакшы иштейт, бирок мен робот платформасынан алган моторлорду илгенде, мен онлайнда заказ кылдым, бул эки мотор ар кандай ылдамдыкта бурулуп, ар кандай үндөрдү чыгарышат. Мен дроссельди моторлордо 100% га алмаштырдым. Экөө тең максималдуу мүмкүнчүлүктөрү менен иштей алышкан жок.

Бул эки башка мотор окшойт. Биринде чоңураак момент бар, ал мындай робот үчүн эң сонун, бирок экинчиси роботту жылдырбайт. Ошентип, ал тегеректерге айланат.

Бул жерде, менде бар нерсе, Arduino сериялык программасы абдан жакшы иштейт, бирок компьютердеги Tcp сервери жана Piдеги Tcp кардары азырынча коддолгон эмес. Мен конкурска бул жазууну толтуруу керек. Мен эмне кылам?

  1. Биринчиден, мен моторлордун чыңалуусун үч эсе көбөйтөм. Маалымат барагында 3V, 6V аларды жылдырган эмес деп жазылган. Анда 9В болот. Мен тео батареяларды токту эки эсеге параллель туташтырдым жана чыңалуу ошол бойдон калууда.
  2. Менде платформадагы тоого туура келген башка моторлор барбы? Балким, эгер алар окшош моделдер болсо, мен көрө алам.
  3. Эгерде шоколад күйөрманга чындап тийсе, мен Servosко алмаштыра алам.

Мектеп башталды. Мен эмне кылышымды көрүшүм керек.

Эскертүү: Эмне үчүн мен бул жерде кездешкен көйгөйлөрдү жерде жазам? Ошентип, эгер сизде тажрыйбасы аз болсо жана сизде да ушундай көйгөйлөр болсо, эмне кылыш керек экенин билесиз.

Чечим:

Ошентип, мен дагы бир тест тапшырдым. Мен ылдамдыктын айырмасын Arduino кодуна ылайыкташтырдым.

ЭСКЕРТҮҮ: моторлор сиз үчүн ар кандай ылдамдыкта айланышы мүмкүн! Arduino эскизиндеги баалуулуктарды өзгөртүү.

11 -кадам: [TCP]: Эмне үчүн Tcp жана Shell Secure эмес? TCP деген эмне?

Менде PC үчүн SSH эмес, Tcpди колдонуунун эки түшүндүрмөсү бар. - Пи байланыш.

  1. Биринчиден, SSH (Secure Shell, түшүндүрмөлөрдү караңыз) алыскы компьютерден буйруктарды ишке киргизүү үчүн арналган. Пи -ге биз каалаган маалымат менен жооп берүү кыйыныраак, анткени маалыматты талдоонун бирден -бир варианты катаал жана түйшүктүү саптарды иштетүү аркылуу болот.
  2. Экинчиден, биз SSHди кантип колдонууну билебиз жана бул окуу куралында түзмөктөрдүн ортосундагы байланыштын көбүрөөк жолдорун үйрөнгүбүз келет.

TCP, же Transmission Control Protocol, Internet Protocol Suiteтин негизги протоколу. Бул Интернет протоколун (IP) толуктаган баштапкы тармактык ишке киришүүдөн келип чыккан. Ошондуктан, бүт пакет адатта TCP/IP деп аталат. TCP IP түйүнү аркылуу байланышкан хосттордо иштеген тиркемелердин ортосунда октеттер агымын ишенимдүү, буйрулган жана ката текшерилген жеткирүүнү камсыздайт.

(Википедиядан)

Ошентип, TCP Pros:

  • Коопсуз
  • Fast
  • Тармактын каалаган жеринде иштейт
  • Туура маалыматтарды берүүнү текшерүү ыкмаларын камсыз кылат
  • Flow Control: маалымат жөнөтүүчү кардарды каттоого жана иштетүүгө өтө тез жөнөтсө, коргоого ээ.

Ал эми терс жактары:

  • TCPде сиз (маалыматтарды тармактын бардык түзмөктөрүнө жөнөтө албайсыз) жана мультикастты (бирдей, бирок анча айырмаланбайт- ар бир түзмөккө сервер сыяктуу берүү мүмкүнчүлүгүн берет) тарата албайсыз.
  • Программаңыздагы жана иштетүү тутумунун китепканаларындагы мүчүлүштүктөр (TCP байланышын башкарган, роутериңиз эки [же андан көп] түзмөктү туташтыргандан башка эч нерсе кылбайт)

Эмне үчүн UDP колдонбойсуз, деп сурашыңыз мүмкүн? Ооба, TCPден айырмаланып, UDP сиздин кардарыңыз көбүрөөк маалыматты жөнөтүүдөн мурун маалыматты алаарына ынанбайт. Электрондук кат жөнөтүү жана кардар аны аларын билбөө сыяктуу. Мындан тышкары, UDP анча коопсуз эмес. Көбүрөөк маалымат алуу үчүн Stack Exchange Super Userден бул постту окуңуз

Бул макала жакшы жана сунушталат.

12 -кадам: [TCP]: Кардар кылалы

Серверден маалыматтарды алган кардар (биздин учурда Raspberry Pi) (биздин ЖК биздин учурда) Pi'ге жөнөтүү үчүн маалыматтарды алат (Arduinoдо аткарыла турган сериялык буйруктар) жана маалыматтарды кайра алуу (Sensor Readings) жана түздөн -түз Arduinoдон кайтарым байланыш. Тиркелген схема үчөөнүн ортосундагы байланышты көрсөтөт.

Python Wiki TcpCommunication макаласы камтылган розетка модулун колдонуп, бир нече сап код менен мындай байланышты түзүү абдан жөнөкөй экенин көрсөтөт. Бизде ПКде программа жана Пиде дагы бир программа болот.

Биз үзгүлтүктөр менен иштейбиз. Алар тууралуу түшүндүрмөлөр кадамында көбүрөөк билиңиз. Бул жерде буферлер жөнүндө да окуңуз. Эми бизде болгон маалыматтарды окуй алабыз data = s.recv (BUFFER_SIZE), бирок бош тамактар менен аныкталган канча символ болот. Биз үзгүлтүктөрдү колдоно алабызбы? Дагы бир суроо: буфер бош болобу же сервер көбүрөөк маалыматтарды жөнөтүшүн күтөбү, бул учурда сервер/кардар күтүү убактысын алып салат?

Келгиле, муну бирден чечели. Муну жасоодон мурун, мен TCP жана UDP портторун колдонгон Википедиядагы макаланы карап чыктым. Тез карап чыккандан кийин, мен бул долбоор 12298 портунда байланышат деп чечтим, анткени ал Операциондук система жана жергиликтүү кызматтар тарабынан колдонулбайт.

13 -кадам: Биздин Tcp билдирүүлөрүн колдонуп көрүңүз

Үзгүлтүктөрдү колдоно аларыбызды билүү үчүн, Python буйрук сабын колдонуп, жөнөкөй кардарды жана серверди түзүүгө мүмкүнчүлүк берели. Мен муну төмөнкү кадамдарда жасайм:

  1. Tcp аркылуу текстти көшөгө порту аркылуу цикл менен жөнөтүүчү программаны баштаңыз
  2. Башка программаны баштаңыз (параллелдүү), ал бардык текстти укурукта окуп, экранга басып чыгарат.

Программанын сегменттери гана көрсөтүлөт. Бардык программалар Python 3. менен иштейт. Бул программалардын баары компьютер колдонуучусунун клавиатурасынан сериялык буйрукту Pi аркылуу Arduinoго жөнөтүү.

  • SBcontrolPC.py - ЖКда иштетүү үчүн. Жергиликтүү даректе жана көрсөтүлгөн портто TCP байланышын баштайт (мен 12298 портун колдоном, эмне үчүн мурунку кадамды караңыз)
  • SBcontrolPi.py - Пи боюнча иштетүү үчүн. Анын буферин ар бир жарым секундда окуйт (0,5 секунд). Видео агымы сыяктуу нерселерди башкаруучу кабык скриптин баштайт.

Сунушталууда: