Оглавление:

Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi: 15 шагов (с изображениями)
Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi: 15 шагов (с изображениями)

Видео: Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi: 15 шагов (с изображениями)

Видео: Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi: 15 шагов (с изображениями)
Видео: ATI и Universa Hub Africa заключили стратегическое партнёрство для создания национального блокчейна 2024, Июль
Anonim
Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi

Я @RedPhantom (он же LiquidCrystalDisplay / Itay), 14-летний студент из Израиля, который учится в средней школе высших наук и математики им. Макса Шейна. Я делаю этот проект, чтобы все могли учиться и делиться!

Вы, наверное, подумали: хм… Я компьютерщик… И мои дети хотят, чтобы я сделал с ними проект… Он хотел построить робота. Она хотела нарядить его как маленького щенка. Хороший проект выходного дня!

Raspberry Pi идеально подходит для любого использования: сегодня мы продемонстрируем возможности этого микрокомпьютера по созданию робота. Этот робот может:

  • Путешествуйте и управляйте через локальную сеть (WiFi) с любого компьютера, подключенного к той же сети Wi-Fi, что и Raspberry Pi.
  • Потоковое видео в прямом эфире с помощью модуля камеры Raspberry Pi
  • Отправка данных датчика с помощью Arduino

Чтобы увидеть, что вам нужно для этого красивого светового проекта, просто прочтите следующий шаг (предупреждения), а затем шаг Wanted: Components.

Вот репо на GitHub: GITHUB REPO BY ME

Вот сайт проекта: САЙТ ПРОЕКТА МНОЙ

Шаг 1. Предупреждение: будьте осторожны, пытаясь выполнить это дома

ОСТОРОЖНОСТЬ:

АВТОР ДАННОГО РУКОВОДСТВА ПРИНИМАЕТ ВАС ДОСТАТОЧНЫЕ ЗНАНИЯ ОБ ЭЛЕКТРОЭНЕРГИИ И ОСНОВНЫХ ФУНКЦИЯХ ЭЛЕКТРИЧЕСКОГО ОБОРУДОВАНИЯ. ЕСЛИ ВЫ НЕ ОСТОРОЖНЫ И НЕ СЛЕДУЕТЕ ИНСТРУКЦИЯМ В ДАННОМ Учебном пособии, ВЫ МОЖЕТЕ: ПОВРЕДИТЬ ЭЛЕКТРОННОЕ ОБОРУДОВАНИЕ, СГОРАТЬ СЕБЯ ИЛИ ВЫЗВАТЬ ПОЖАР. Будьте осторожны и руководствуйтесь здравым смыслом. Если у вас нет знаний, необходимых для этого руководства (пайка, основы электроники), обратитесь к специалисту, у которого есть знания. Спасибо.

АВТОР ДАННОЙ ИНСТРУКЦИИ СНИМАЕТ С СЕБЯ ЛЮБУЮ ОТВЕТСТВЕННОСТЬ ЗА УЩЕРБ, ПРИЧИНЕННЫЙ ИЛИ УТЕРЮ ИМУЩЕСТВА ИЛИ ФИЗИЧЕСКИЙ ПОВРЕЖДЕНИЕ. ИСПОЛЬЗУЙ ЗДРАВЫЙ СМЫСЛ

Шаг 2: Компоненты

Подключения
Подключения
Подключения
Подключения
Подключения
Подключения
Подключения
Подключения

Перед тем, как разогреть паяльник, нужно разобраться, что к чему подключать. Я сделал эту простую диаграмму (MS Paint никогда меня не подводит), которая описывает, где определенные части находятся внутри робота.

Изображение построено так, что вы можете увеличивать масштаб, видеть его в полном разрешении и читать текст.

Шаг 6: адрес для Pi

Arduino разговаривает с Pi согласно плану. И Pi общается с компьютером, так как же все это работает?

Давайте посмотрим на нашу последовательность установления соединения:

  1. Raspberry Pi запускается
  2. Arduino запускается
  3. Raspberry Pi запускает TCP-клиент. Он выдает свой IP-адрес через светодиод.
  4. Raspberry Pi запускает службу последовательной связи и подключается к Arduino

Поэтому мы установили некую связь:

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

Я использовал Visual Basic. NET (сообщество Microsoft Visual Studio 2013), чтобы написать программу, которая взаимодействует с Raspberry Pi и Python для написания протокола Arduino / Raspberry Pi.

Все, что вам нужно сделать, чтобы узнать свой IP-адрес Pi, - это подключить его к экрану HDMI, войти в оболочку и ввести команду:

имя хоста -I

Шаг 7: План

Теперь, когда у нас есть IP-адрес Pi, мы подключимся к нему по SSH (SSH - это Secure Shell - мы подключаемся удаленно к оболочке Linux) и напишем файл, который отображает IP-адрес сервера. Pi при запуске сделает то же самое и запишет порт, который он слушает. Здесь я приведу только несколько примеров из кода, но его можно загрузить с этого шага и из созданной мной ветки GitHub. Подробности об этом позже.

Работает это так:

  1. RPi запускается.
  2. RPi запускает программу Tcp на своем локальном IP и назначенном порту.
  3. RPI начинает потоковую передачу видео
  4. RPI отключается.

Шаг 8: физическая подготовка

Теперь мы готовы начать физически строить все это. Если вы не прочитали шаг 1 (текст предупреждения и лицензирование), сделайте это, прежде чем продолжить. Я не несу ответственности за причиненный ущерб. И в случае сомнений, этот робот нельзя использовать в военных целях, если это не зомби-апокалипсис. И даже тогда руководствуйтесь здравым смыслом.

Предлагается прочитать инструкции и прослушать их в Списке для чтения.

Скачайте схему подключения с шага «Подключения».

МОТОРЫ

Моторы, которые вы купили, вероятно, выглядят так, и ничего страшного, если они этого не делают: если у них только два провода (в большинстве случаев черный и красный), он должен работать. Посмотрите их техническое описание в Интернете, чтобы узнать их рабочее напряжение и ток. Не стесняйтесь задавать вопросы в разделе комментариев. Я их всегда читаю.

Н-МОСТ

Я никогда раньше не работал с H-мостом. Я немного погуглил и нашел хорошее руководство, объясняющее принципы HB. Вы также можете посмотреть туда (см. Этап «Список для чтения») и зацепить свой тоже. Я не буду много объяснять. Вы можете прочитать там и узнать все, что вам нужно об этой схеме.

ВЕЛ

Эта маленькая лампочка может работать от логического напряжения только потому, что она почти не требует тока, а напряжение составляет 3–5 В, 4–18 мА. По желанию.

АРДУИНО

Arduino будет получать сигналы и команды через последовательное соединение от Raspberry Pi. Мы используем Arduino для управления нашими двигателями, потому что Raspberry Pi не может выводить аналоговые значения через GPIO.

Шаг 9: Автозапуск Raspberry Pi

Каждый раз, когда вы включаете Raspberry Pi, вам нужно будет вводить имя пользователя и пароль. Мы не хотим этого делать, потому что иногда мы просто не можем подключить клавиатуру к Pi, поэтому мы будем следовать этим шагам из этого руководства, чтобы автоматически запустить программу, которая готовит Pi. Если он застрянет в цикле, мы всегда можем прервать его с помощью Ctrl + C.

  • sudo crontab -e
  • Затем мы введем команду, которая добавляет этот файл в автозагрузку в диспетчере cron.

Мы назовем файл pibot.sh, который будет давать команды для запуска всех видов скриптов python для управления роботом. Давайте рассмотрим это: (Мы sudo с программами занавеса Python, чтобы позволить программе получить доступ к GPIO)

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

Код, выполняющий всю работу на стороне пи, будет называться Upon_startup.sh.

Это простой сценарий оболочки, который запускает все.

Шаг 10: Хуэстон, у нас возникла проблема… Двигатели постоянного тока - это не та же модель

Я уже тестировал H-мост, и он работает нормально, но когда я подключаю моторы, которые получил от платформы робота, я заказал онлайн, что эти два мотора вращаются с разной скоростью и издают разные шумы. Я поменял дроссельную заслонку на 100% на моторах. Оба они не могли работать на полную мощность.

Похоже, это два разных мотора. Один из них имеет больший крутящий момент, что отлично подходит для такого типа роботов, но другой просто не будет двигать робота. Так получается по кругу.

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

  1. Во-первых, я утроил напряжение для двигателей. В даташите сказано, что 3В, 6В их не двигали. Тогда это 9В. Я подключил батареи teo параллельно, чтобы удвоить ток, а напряжение осталось прежним.
  2. Есть ли у меня другие двигатели, которые подходят для крепления на платформе? Может быть, я увижу, похожи ли они на модели.
  3. Могу заменить на сервоприводы, если шоколад действительно понравится любителю.

Школа началась. Мне нужно посмотреть, что делать.

Примечание. С какой стати я пишу здесь о проблемах, с которыми сталкиваюсь? Так что, если у вас меньше опыта и у вас такие же проблемы, вы будете знать, что делать.

Решение:

Итак, я сделал еще один тест. Я адаптировал разницу в скорости в коде Arduino.

ВНИМАНИЕ: моторы могут вращаться с разной скоростью! Измените значения в скетче Arduino.

Шаг 11: [TCP]: Почему именно TCP и небезопасная оболочка? Что такое TCP?

У меня есть два объяснения, почему для ПК следует использовать протокол TCP, а не SSH. - Пи-связь.

  1. Во-первых, SSH (Secure Shell, см. Пояснения) предназначен для запуска команд с удаленного компьютера. Заставить Pi ответить с информацией, которую мы хотим, сложнее, потому что наш единственный способ проанализировать данные - это жесткая и утомительная обработка строк.
  2. Во-вторых, мы уже знаем, как использовать SSH, и хотим узнать больше о способах связи между устройствами в этом руководстве.

TCP, или протокол управления передачей, является основным протоколом Internet Protocol Suite. Он возник в начальной сетевой реализации, в которой он дополнял Интернет-протокол (IP). Поэтому весь пакет обычно называют TCP / IP. TCP обеспечивает надежную, упорядоченную и проверенную на ошибки доставку потока октетов между приложениями, работающими на хостах, обменивающихся данными по IP-сети.

(Из Википедии)

Итак, TCP Pro:

  • Безопасный
  • Быстро
  • Работает в любом месте сети
  • Предоставляет методы для проверки правильности передачи данных
  • Управление потоком: имеет защиту в случае, если отправитель данных отправляет данные слишком быстро, чтобы клиент мог их зарегистрировать и обработать.

А минусы такие:

  • В TCP вы не можете осуществлять широковещательную рассылку (отправлять данные на все устройства в сети) и многоадресную рассылку (то же самое, но немного отличаться - дает возможность каждому устройству транслировать как сервер).
  • Ошибки в вашей программе и библиотеках операционной системы (которые сами управляют TCP-связью, ваш маршрутизатор почти ничего не делает, кроме подключения двух [или более] устройств)

Почему бы не использовать UDP, спросите вы? Что ж, в отличие от TCP, UDP не гарантирует, что ваш клиент получит данные перед отправкой других. Например, отправив электронное письмо и не зная, получит ли его клиент. Кроме того, UDP менее безопасен. Для получения дополнительной информации прочитайте этот пост от суперпользователя Stack Exchange.

Эта статья хороша и рекомендуется.

Шаг 12: [TCP]: давайте создадим клиента

Клиент (в нашем случае Raspberry Pi), который получает данные с сервера (в нашем случае - наш компьютер), получит данные для отправки на Pi (последовательные команды, которые будут выполняться на Arduino) и получит данные обратно (показания датчиков. и обратная связь напрямую от Arduino. Приложенная схема показывает взаимосвязь между ними.

Статья Python Wiki TcpCommunication показывает, насколько просто осуществить такое взаимодействие с помощью нескольких строк кода, используя встроенный модуль сокета. У нас будет программа на ПК и еще одна программа на Pi.

Будем работать с прерываниями. Дополнительные сведения о них см. В разделе «Пояснения». Прочтите там и о буферах. Теперь мы можем читать данные, которые у нас есть, используя data = s.recv (BUFFER_SIZE), но это будет количество символов, которые мы определили с пустыми битами. Можем ли мы использовать прерывания? Другой вопрос: будет ли буфер пуст или он будет ждать, пока сервер отправит больше данных, и в этом случае сервер / клиент выдаст исключение тайм-аута?

Давайте займемся этим по очереди. Прежде чем мы это сделаем, я просмотрел эту статью в Википедии, в которой перечислены используемые порты TCP и UDP. После беглого просмотра я решил, что этот проект будет взаимодействовать через порт 12298, потому что он не используется операционной системой и локальными службами.

Шаг 13: попробуйте наши Tcp Comms

Чтобы увидеть, можем ли мы использовать прерывания, давайте создадим простой клиент и сервер с помощью командной строки Python. Я сделаю это следующим образом:

  1. Запустить программу, которая отправляет текст через Tcp в цикле через порт шторки
  2. Запустите другую программу (параллельно), которая считывает весь текст в цикле и выводит его на экран.

Будут показаны только сегменты программы. Все программы работают с Python 3. Все эти программы отправляют последовательную команду с клавиатуры пользователя ПК на Arduino через Pi.

  • SBcontrolPC.py - Для запуска на ПК. Запускает TCP-соединение по локальному адресу и указанному порту (я использую порт 12298, см. Предыдущий шаг, почему)
  • SBcontrolPi.py - для запуска на Pi. Читает свой буфер каждые полсекунды (0,5 секунды). Запускает сценарий оболочки, который управляет такими вещами, как потоковое видео и т. Д.

Рекомендуемые: