diff --git a/README.md b/README.md index 7db227f..8a42c77 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,9 @@ code tmp/server После чего необходимо дождатся завершения проверки правильности записанных данных на флеш карту. -![raspb3]pic/(raspb/rasp3.png) +![raspb3](pic/raspb/rasp3.png) + + ![raspb4](pic/raspb/rasp4.png) 4. Для того, чтобы избавиться от необходимости работать с Raspberry Pi, подключая к ней монитор, клавиатуру и мышку, мы будем использовать подключение с удаленного компьютера по ssh. Для этого нам нужно будет прописать некоторые настройки Wi-Fi. @@ -251,74 +253,139 @@ import bsp ``` Рассмотрим все компоненты робота и то, как ими можно управлять, какие данные с них можно получить. -1. Управление моторами. Управление моторами осуществляется с помощью четырех пинов GPIO, которые задают напрвление вращения 2х моторов и 2 PWM которые задают скорость вращения. +### Управление моторами + +Рассмотрим управление моторами в роботе. Для этого на плате-шасси установлен двухканальный мостовой драйвер моторов TB6612FNG. На изображении ниже вы видите часть принципиальной схемы платы-шасси, отвечающей за управление моторами: + +![motor](pic/bsp/motor.png) + +Рассмотрим назначение выходов микросхемы: + +* PWMA\PWMB - вход для управления скоростью вращения мотора, для канала A и В (соответственно, для первого и второго мотора) с помощью ШИМ (*англ. PWM*); +* AIN1\AIN2 - входы полумостов канала A; +* BIN1\BIN2 - входы полумостов канала B; +* А01\А02 - выходы полумостов канала А; +* В01\В02 - выходы полумостов канала В; +* STBY - включение микросхемы; +* VM - вход питания силовой части микросхемы, двигателей; +* VCC - вход питания логической части микросхемы; +* GND - земля. + +--- + +***Н-мост*** + +Н-мост (англ. H-bridge) - это схема, позволяющая приложить напряжение к нагрузке в разных направлениях. + +![H-bridge](pic/bsp/H-bridge.png) + +H-мост состоит из четырех переключателей, котороми могут быть, наппример, транзисторы или реле. Когда ключи S1 и S4 замкнуты, а S2 и S3 разомкнуты, мотор крутится в одну сторону, если же замкнуть S2 и S3, а S4 и S1 разомкнуть - мотор будет крутиться в другую сторону. + +--- -![изображение-1.png](./изображение-1.png) +--- +***ШИМ*** -В библиотеке bsp.py уже сделанна обвязка так что вам останется только аказать мотор, скорость и направление вращения для взаимодействия. +ШИМ (широтно-импульсная модуляция, англ. PWM) - способ управления мощностью на нагрузке с помощью изменения скважности импульсов при постоянной амплитуде и частоте импульсов. -## Что-то про мою BSP.py +![pwm](pic/bsp/pwm.png) -### Мотор: +Основные параметры ШИМ-сигнала: + +* Ui - мплитуда импульсов; +* Ton - время, когда сигнал включен; +* Toff - время, когда сигнал отключен; +* Tpwm - время периода ШИМ; + +Мощность на нагрузке пропорциональна времени включенного и отключенного сигнала. + +--- + + +Вернемся к части принципиальной схемы, отвечающей за управление моторам. Видно, что оно осуществляется с помощью четырех пинов GPIO, которые задают напрвление вращения двух моторов (AIN1\AIN2, BIN1\BIN2) и двух пинов с функцией ШИМ (PWMA\PWMB), которые задают скорость вращения. + +В библиотеке bsp.py реализован функционал, который позволит вам просто объявить объект-мотор, задать скорость и направление вращения: ```python m = motor() -speed = 10 # Скорость, по сути напряджение на моторе (0 .. 100) +speed = 10 # Скорость, по сути напрядение на моторе (0 .. 100) m.forward(speed) # Ехать вперед со скоростью speed m.backward(speed) # Ехать назад со скоростью speed -m.left(speed) # Крутится вправо со скоростью speed -m.right(speed) # Крутится вдево со скоростью speed -m.stop() # Остановится +m.left(speed) # Крутиться вправо со скоростью speed +m.right(speed) # Крутиться влево со скоростью speed +m.stop() # Остановиться m.setMotor(10, 20) # Выставить скорость (ШИМ) 10 на левом колесе, и 20 на правом. # Скорость может быть от -100 до 100, знак определяет направление ``` -### Бипер: +### Взаимодействие с пьезодинамиком (buzzer): + +Пьезодинамик (англ. buzzer) - устройство на основе обратного пьезоэлектрического эффекта, который заключается в механической деформации пьезоэлектрика под воздействием электрического поля. Простыми словами - при подаче напряжения на пьезодинамик, устройство переводит его в колебание мембраны динамика. + +![buzzer](pic/bsp/buzzer.jpg) + +![buzzer_shem](pic/bsp/buzzer.png) + +Взаимодествие с пьезодинамиком с помощью библиотеки bsp.py реализовано следующим образом: ```python -b = beep() +b = beep() b.on() # Включить пищалку b.off() # Выключить пищалку, пищит до тех пор пока не выключите ``` ### Джойстик: +На верхней плате-адаптере робота распположен джойстик. На изображении он обведен в красный кружок. Джойстик может возвращать информацию об отклонении его влево, вправо, вперед и вназад, а так же о центральном расположении. + +![joystick1](pic/bsp/joystick1.png) + +![joystick](pic/bsp/joystick.png) + +Средствами bsp.py вы можете взаимодействовать с джойстиком следующим образом: + ```python j = joystick() -j.check_ctr() # Вернет еденицу если нажата Крестовина +j.check_ctr() # Вернет еденицу если нажата крестовина j.check_a() # == нажата A j.check_b() # == нажата B j.check_c() # == нажата C j.check_d() # == нажата D ``` -Один из вариантов использования это: +Рассмотрим пример взаимодействия с джойстиком с помощью bsp.py: ```python j = joystick() b = beep() while True: # В бесконечном цикле проверяем нажата ли кнопка if j.check_ctr(): - b.on() # Если нажата то включаем бипер и печатаем слово + b.on() # Если нажата, то включаем пьезодинамик и печатаем слово print("center") while j.check_ctr(): time.sleep(0.01) # Ждем когда кнопку отпустят else: - b.off() # Когда кнопку откустили выключим бипер + b.off() # Когда кнопку отпустили выключим пьезодинамик ``` -Можно сюда добавить фотку платы с подписями. - ### Управление с пульта +На плате-адаптере расположен инфракрасный датчик, с помощью которого можно осуществлять управление роботом с помощью пульта дистанционного управления + +![ir](pic/bsp/ir.png) + +![ir_remote](pic/bsp/ir_remote.jpg) + +Средствами bsp.py вы можете взаимодействовать с пультом следующим образом: + ```python IR = IR_controll() -key = IR.getkey() # Присваеваем переменной key номер нажаной кнопки на пульте -# Метод вернет None если не одна кнопка не нажата, код кнопки если ее нажали в данный момент и repeat до тех пор пока кнопку не отпустят +key = IR.getkey() # Присваеваем переменной key номер нажатой кнопки на пульте +# Метод вернет None если не одна кнопка не нажата, или вернет код кнопки если ее нажали в данный момент, и repeat до тех пор пока кнопку не отпустят ``` -Пример использования: программа которая выводит код нажатой кнпки: +Пример использования - программа которая выводит код нажатой кнпки: ```python ir = ir_controll() @@ -328,17 +395,25 @@ while True: print(hex(key)) ``` -### Инфракрасный бампер +### Инфракрасные датчики для обнаружения препятствий + +На плате-шасси робота расположены два инфракрасных датчика, которые предназначены для обнаружения препятствий роботом. + +![ir_obtacle](pic/bsp/ir_obstacle.png) + +*Нужно понимать, что с помощью такого датчика вы можете получить информацию о факте наличия препятствия, но не о том, как, например, оно далеко от вас. Такому типу датчиков могут помешать засветы, например от солнца.* + +Средствами bsp.py вы можете взаимодействовать с инфракрасными датчиками следующим образом: ```python b = ir_bumper() -l = b.check_l() # Вернет 1 если препятствие зафиксированно левым бампером -r = b.check_r() # Вернет 1 если препятствие зафиксированно правым бампером +l = b.check_l() # Вернет 1 если препятствие зафиксированно левым датчиком +r = b.check_r() # Вернет 1 если препятствие зафиксированно правым датчиком ``` -Пример кода, на консоль выводятся сенсоры которые фиксируют обьект. +Пример кода для работы с инфракрасными датчиками. В консоль выводится информация о сенсорах, которые фиксируют обьект: -```pythin +```python b = ir_bumper() while True: if b.check_l(): @@ -351,14 +426,33 @@ while True: ### Ультрозвуковой дальномер +Для обнаружения препятствий и определения расстояний до них можно воспользоваться ультразвуковым дальномером. + +![ultrasonic1](pic/bsp/ultrasonic.png) + +![ultrasonic2](pic/bsp/ultrasonic.jpg) + +Ультразвуковой датчик в формате модуля установлен в специальный разъем на плате-шасси робота. + +--- +***Ультразвуковой дальномер*** + +Ультразвуковой дальномер генерирует звуковые импульсы и слушает эхо. Замеряя время, за которое отраженная звуковая волна вернется обратно можно определить расстояние до объекта. + +В отличие от инфракрасных датчиков, рассмотренных выше, мы можем получить информацию о расстоянии до объекта, так же такому сенсору будут нестрашны засветы от солнца, но он может плохо работать с очень тонкими и пушистыми предметами. + +--- + +Средствами bsp.py вы можете взаимодействовать с ультразвуковыми датчиками следующим образом: + ```python u = us_sensor() -k = u.dist() # Вернет расстояние до обьекта считанное сенсором +k = u.dist() # Вернет расстояние до обьекта, считанное сенсором ``` -Пример кода который будет выводить расстояние до обьекта до тех пор пока не будет надата ```Ctrl+C```: +Пример кода который будет выводить расстояние до обьекта до тех пор, пока не будет нажато сочетание клавиш ```Ctrl+C```: -```pythin +```python u = us_sensor() try: while True: diff --git a/pic/bsp/H-bridge.png b/pic/bsp/H-bridge.png new file mode 100644 index 0000000..7b6d8a0 Binary files /dev/null and b/pic/bsp/H-bridge.png differ diff --git a/pic/bsp/buzzer.jpg b/pic/bsp/buzzer.jpg new file mode 100644 index 0000000..c09781b Binary files /dev/null and b/pic/bsp/buzzer.jpg differ diff --git a/pic/bsp/buzzer.png b/pic/bsp/buzzer.png new file mode 100644 index 0000000..7518eff Binary files /dev/null and b/pic/bsp/buzzer.png differ diff --git a/pic/bsp/ir.png b/pic/bsp/ir.png new file mode 100644 index 0000000..1585b25 Binary files /dev/null and b/pic/bsp/ir.png differ diff --git a/pic/bsp/ir_obstacle.png b/pic/bsp/ir_obstacle.png new file mode 100644 index 0000000..dcb3517 Binary files /dev/null and b/pic/bsp/ir_obstacle.png differ diff --git a/pic/bsp/ir_remote.jpg b/pic/bsp/ir_remote.jpg new file mode 100644 index 0000000..6bca28c Binary files /dev/null and b/pic/bsp/ir_remote.jpg differ diff --git a/pic/bsp/joystick.png b/pic/bsp/joystick.png new file mode 100644 index 0000000..8477e21 Binary files /dev/null and b/pic/bsp/joystick.png differ diff --git a/pic/bsp/joystick1.png b/pic/bsp/joystick1.png new file mode 100644 index 0000000..9ff7d81 Binary files /dev/null and b/pic/bsp/joystick1.png differ diff --git a/pic/bsp/motor.png b/pic/bsp/motor.png new file mode 100644 index 0000000..132a55c Binary files /dev/null and b/pic/bsp/motor.png differ diff --git a/pic/bsp/pwm.png b/pic/bsp/pwm.png new file mode 100644 index 0000000..13e84ab Binary files /dev/null and b/pic/bsp/pwm.png differ diff --git a/pic/bsp/ultrasonic.jpg b/pic/bsp/ultrasonic.jpg new file mode 100644 index 0000000..2913126 Binary files /dev/null and b/pic/bsp/ultrasonic.jpg differ diff --git a/pic/bsp/ultrasonic.png b/pic/bsp/ultrasonic.png new file mode 100644 index 0000000..fd8b317 Binary files /dev/null and b/pic/bsp/ultrasonic.png differ