Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Бот для захвата удаленного управления

Компоненты и расходные материалы

Шасси Runt Rover Half-pint
× 1
Arduino UNO
× 1
V5 Shield
× 1
Провода перемычки "мама" / "мама"
× 1
L9110S
× 1
Одноугловой кронштейн канала 90 ° (585424)
× 1
Облегченный сервопривод, Futaba
× 1
Стандартный комплект захвата A (637094)
× 1
MG995
× 1
Стандартная сервоприводная пластина
× 1
Одноугловой кронштейн канала 90 °
× 1
держатель AA с 5 слотами
× 1
аккумуляторные батареи AA
× 5
.750 "нейлоновые прокладки 8-32
× 2
.500 "винты 6-32 с гайками
× 8
.3125 "винты 6–32
× 8

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Несколько месяцев назад мой сын попросил меня сделать ему бота с дистанционным управлением. Он дал мне список того, что он хотел, и мы сузили его до управляемого списка :) Это то, что я в итоге построил для него ...

  • Возьмите экран датчика UNO и V5 и защелкните их вместе.
  • Поместите соединенную плату UNO / Sensor в зажим внутри центра бота.
  • Возьмите двусторонний скотч и поместите привод двигателя на левую внутреннюю стену, а адаптер Bluetooth - на правую стену.

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

Шаг 1. Необходимое программное обеспечение

Что вам нужно будет скачать:

  • IDE Arduino
  • Python 2.7 (полная установка с tkinter)
  • Библиотека pySerial
  • Библиотека контроллера мотора L9110S прикреплена .zip (см. файлы на этом этапе).
  • Код робота ниже или прикрепленный .zip (см. файлы на этом этапе).
  • Приложение удаленного управления Python (см. файлы на этом этапе).

Шаг 2. Спецификация оборудования

Вам понадобятся следующие детали:

  • Шасси Runt Rover Half-pint или подходящая закрытая замена 4wd.
  • Arduino Uno или аналогичная плата с USB-кабелем.
  • Щиток датчика V5
  • Драйвер двигателя L9110S (купите пару, так как они дешевые)
  • Сервопривод MG995 или другая подходящая замена x2
  • Адаптер Bluetooth HC-05 или HC-06 x1
  • Стандартная сервопластина B x1
  • Кронштейн 90 градусов x1
  • Одинарная скобка x2
  • Облегченная серво ступица (525125 для Futaba) x1
  • Стандартный комплект захвата A x1
  • Перемычки "мама-мама".
  • 5 аккумуляторных батарей AA (NiMH) и зарядное устройство.
  • Двусторонняя липкая лента и небольшие застежки-молнии.
  • Батарейный блок «AA» на 5 слотов (если вы выбираете вариант с перезаряжаемой батареей AA)
  • NiMH аккумулятор 6 В или литий-ионный 7,4 В и зарядное устройство.
  • 1,250 дюйма, 6–32 винта, 2 шт.
  • .750 "8-32 нейлоновые прокладки, 2 шт.
  • Винты 6-32 размером 0,500 дюйма с гайками 8 шт.
  • .3125 дюймов, 6-32 винта, 8 шт.

Вы можете получить многие запчасти напрямую на eBay или у других поставщиков, таких как Sparkfun, Adafruit и ServoCity.

После того, как вы приобрели, собрали и загрузили все, вы готовы приступить к сборке.

Шаг 3. Сборка - шасси

Сначала соберите шасси, следуя инструкциям, прилагаемым к шасси или видео. После завершения у вас должно получиться что-то вроде изображения. Когда вы кладете пластину, на которой крепится контроллер, на бота, убедитесь, что вы поместили ее в средние отверстия. Это позволит оставить пространство спереди и сзади бота.

ПРИМЕЧАНИЕ. Прежде чем продолжить, пожалуйста, снимите все 4 колеса, чтобы не повредить моторы при установке других компонентов бота.

Шаг 4:Сборка захвата

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

Шаг 5:Установка захвата - Шаг 1

Для этого шага возьмите 90-градусный кронштейн, легкую серво-ступицу и четыре (4) винта 0,3125 дюйма:

Возьмите сервоцентр и поместите ее на одну сторону кронштейна, закрепите их вместе винтами 0,2125 дюйма, как показано на рисунке, и отложите в сторону. Поместите гайки на два более коротких винта и затяните их. Теперь расскажите о двух одинарных кронштейнах, 1.250. Винты и два винта 0,500 дюйма с гайками, 2 нейлоновые прокладки и сервопластина B. Возьмите один единственный кронштейн и поместите его внутри полупинтового бота и закрутите 2 винта 1,259 дюйма в левых отверстиях (начиная с внутри) и 2 .500-дюймовые винты с правой стороны. Все головки винтов будут на внутренней стороне бота, как показано на рисунке. Теперь поместите вторую одиночную скобу на винты на внешней стороне бота. Затем возьмите нейлоновые прокладки и поместите их на более длинный (1,250 дюйма) выступ, а затем прикрутите сервопластину к длинным винтам. Затяните винты, идущие к сервопластине, с помощью шестигранного ключа подходящего размера или отвертки, если вы использовали обычные винты.

При необходимости используйте изображения для справки.

Шаг 6:Установка захвата - Шаг 2

  • Затем возьмите оставшийся сервопривод, который у вас есть, и поместите его в кронштейн сервопривода стержнем вверх. Закрепите его 4 винтами 0,3125 дюйма.
  • Затем возьмите 90-градусный кронштейн с серво-ступицей и закрепите на нем захват с помощью 4 болтов 0,500 дюйма, используя 2 гайки 8-32 в качестве прокладок между кронштейном и захватом, как показано на рисунке. Закрепите другой гайкой наверху захвата (под кронштейном, если вы поворачиваете винты в другую сторону)
  • Теперь возьмите узел захвата и поместите его на сервопривод и используйте винт сервопривода (из пакета сервопривода), чтобы удерживать его на месте, надежно закрепляя.

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

См. Изображения для получения более подробной информации и ссылок.

Шаг 7:Монтаж электроники

  • Возьмите экран датчика UNO и V5 и защелкните их вместе.
  • Поместите соединенную плату UNO / Sensor в зажим внутри центра бота.
  • Возьмите двусторонний скотч и поместите привод двигателя на левую внутреннюю стену, а адаптер Bluetooth - на правую стену.

Шаг 8:Электромонтаж - двигатели

  • Контакт A-1A на драйвере двигателя к контакту 5 на экране датчика.
  • Контакт A-1B на драйвере двигателя к контакту 6 на экране датчика.
  • Контакт B-1A на драйвере двигателя к контакту 3 на экране датчика.
  • Контакт B-1B на драйвере двигателя к контакту 11 на экране датчика.

Теперь, когда передняя часть робота обращена ОТ вас, возьмите провода с ЛЕВОЙ стороны и -

  • Подключите два ЧЕРНЫХ провода слева к первой выходной винтовой клемме двигателя A
  • Подключите два КРАСНЫХ провода слева ко второй выходной винтовой клемме двигателя A

Возьмите провода с ПРАВОЙ стороны и -

  • Подключите два ЧЕРНЫХ провода слева к первой выходной винтовой клемме двигателя B
  • Подключите два КРАСНЫХ провода слева ко второй выходной винтовой клемме двигателя B

Сервоприводы:

  • Теперь подключите провод сервопривода Y к штыревой линии 2 на экране датчика. Белый или оранжевый провод всегда является сигнальным.
  • Теперь подключите провод сервопривода X (захват) к штыревой линии 7 на экране датчика. Белый или оранжевый провод всегда является сигнальным проводом.

Шаг 9. Подключение модуля Bluetooth

  • Адаптер Bluetooth Tx -> контакт экрана датчика 0
  • Адаптер Bluetooth Rx -> контакт экрана датчика 1

Шаг 10:добавление мощности

Подключите провода питания от аккумуляторной батареи 5 'AA' (или другого блока 6 В) к винтовой клемме питания экрана датчика:

  • Красный для Vcc
  • Черный к земле
  • Затем убедитесь, что перемычка на экране датчика V5 находится на месте на контактах перемычки.
  • Подключите контакт GND на драйвере L9110s к контакту GND на экране датчика.
  • Подключите положительный провод от батареи 6 В или 7,2 В или другой батареи, выбранной для двигателей, к контакту Vcc на драйвере двигателя L9110S.
  • Подключите отрицательный провод (GND) от аккумуляторной батареи двигателя к контакту GND на щите двигателя.

Шаг 11. Настройка модуля Bluetooth HC05 / HC06

Теперь вам нужно будет зайти в настройки устройства Bluetooth на вашем ПК из панели «Управление» или «Системы» ОС или воспользоваться помощью Google.

Возможная информация о настройке Bluetooth в ОС:

  • Windows
  • Linux (я использую blueman в Linux Mint, но дополнительную информацию см. в вашем дистрибутиве)
  • Mac

Вам нужно будет записать имя устройства последовательного порта или присвоенный ему номер.

Шаг 12. Загрузка кода

С проверкой проводки и перепроверкой , Пора загрузить код. Следуйте инструкциям на сайте Arduino по установке Arduino IDE.

После установки IDE вы можете установить библиотеку драйвера двигателя L9110. Для этого загрузите включенный в ШАГ 1 zip-файл с именем L9110Driver.zip и распакуйте его в папку с библиотеками Arduino или следуя этим инструкциям по добавлению библиотеки.

Теперь, когда IDE и библиотека драйверов двигателя установлены, загрузите код робота в IDE Arduino из zip-файла с именем blue_t_slave.zip, найденного на ШАГЕ 1. Эти файлы также включены в этот шаг.

Подключите компьютер к Arduino с помощью USB-кабеля. Теперь выберите плату из меню Инструменты-> Плата в среде IDE, Uno для этого проекта (выберите плату, которая у вас есть, если она отличается от Uno). Теперь в меню Инструменты-> Порт выберите свой com-порт. После этого нажмите кнопку загрузки. Если все прошло хорошо, код был загружен, если нет, см. Здесь для справки по IDE и связанным вопросам.

Шаг 13:Запуск управляющего приложения Python

Чтобы запустить приложение удаленного управления Python, загрузите zip-файл с этого шага и извлеките его в то место, откуда вы хотите его запустить. Затем откройте командную оболочку (например, терминал, cmd.exe и т. Д.) И перейдите в каталог, в который вы извлекли файл. Теперь введите: python rover.py . из командной строки, и должно появиться окно, похожее на то, что показано на картинке. Если нет, поищите любые ошибки Python и исправьте их (например, отсутствующие библиотеки и т. Д.). Сайт Python может при необходимости помочь.

После запуска приложения вы должны быть готовы к работе.

Теперь включите бота. Затем введите порт связи вашего адаптера и нажмите кнопку «Подключить». Через несколько секунд вы должны увидеть, что другие элементы управления включены, а кнопка подключения отключена. Это означает, что вы подключены к роботу. Если вы не можете подключиться к адаптеру bluetooth, вам придется использовать магию Google, чтобы помочь вам!

Управляющее приложение простое в использовании и позволяет управлять мышью или клавиатурой.

Клавиатурные элементы управления:

  • Стрелки - вперед, назад, повернуть налево на 90 градусов, повернуть направо на 90 градусов.
  • a - повернуть налево на 45 градусов
  • s - повернуть направо на 45 градусов
  • h - остановка (стоп)
  • y - установить ось Y захвата.
  • u - установить захват / закрыть
  • c - главная часть захвата

Команды «Вперед» и «Назад» являются постоянными, т. Е. Они заставляют бота двигаться после выполнения до тех пор, пока не будет отправлено новое направление или команда «Остановить».

Повороты на 90 и 45 градусов являются временными, т.е. после некоторой задержки они останавливают движение бота.

Ползунки захвата не устанавливают захват автоматически на боте. Вы должны нажать соответствующую кнопку или клавишу «Установить», чтобы выполнить набор.

Значения ползунка варьируются от 0 до 180.

  • Ось Y захвата:0 - полностью вверх, а 180 - полностью вниз.
  • Открытие / закрытие захвата:0 - полностью закрыт, а 180 - полностью открыт.

Используйте кнопку «Отключить», чтобы прекратить использование программы. При этом будут отправлены команды для остановки бота и установки захвата.


Код

  • Графический интерфейс драйвера Python
  • Код ровера
Графический интерфейс драйвера Python Python
 #! / usr / bin / env python ## Для Linux, BSD или Mac OSX вы можете использовать chmod + x в этом скрипте, чтобы сделать исполняемый файл ############# Приложение управления ровером ## Написано Скоттом Бисли - 2015 # Можно использовать и изменять бесплатно. Наслаждайтесь. ############ import sysimport serialimport timefrom Tkinter import * import tkFontimport tkMessageBox # Создайте окно для класса приложения App (Frame):# Сделайте окно def createWidgets (self):self.connected =False self.message =StringVar () # Сделайте небольшой шрифт для кнопок набора захватов. helv6 =tkFont.Font (family ='Helvetica', size =6, weight ='normal') self.frame =Frame (self.master) self.frame.pack () self.f1 =Frame (self.frame) self .l1 =Метка (self.f1, text ="Comm Port:") self.l1.pack (side =LEFT) self.comm_entry =Entry (self.f1, bd =5, name ="comm_entry") self.comm_entry .pack (side =LEFT) self.connectButton =Button (self.f1, text ="Connect", command =self.SerialConnect, name ="b_connect") self.connectButton.pack (side =LEFT) self.disconnectButton =Button (self.f1, text ="Disconnect", command =self.SerialDisconnect, name ="b_disconnect") self.disconnectButton.pack (side =RIGHT) self.f1.grid (row =0, column =0) self.f2 =LabelFrame (self.frame, bd =3, Relief ="groove", text ="Ground Control") self.g_vert_fm =Frame (self.f2) self.grip_vert =Scale (self.g_vert_fm, from_ =0, to =180) self.grip_vert.grid (row =0, column =0, rowspan =4, sticky =W) self.grip_vert_set =Button (self.g_vert_fm, text ="Set", command =self.GripperY, name ="b_grip_vert_set", width =1, height =2, font =helv6) self.grip_vert_set.grid (row =5, column =0, sticky =W) self.master.bind ("", self.GripperY) self. g_vert_fm.grid (row =0, column =0, rowspan =4, sticky =W) self.leftforwardButton =Button (self.f2, text ="\\", command =self.TurnLeft45, name ="b_left_forward") self .leftforwardButton.grid (row =0, column =1) self.master.bind ("", self.TurnLeft45) self.leftButton =Button (self.f2, text ="<", command =self.TurnLeft, name ="b_left") self.leftButton.grid (row =1, column =1) self.master.bind ("
 ", self.TurnLeft ) self.rightforwardButton =Button (self.f2, text ="/", command =self.TurnRight45, name ="b_right_forward") self.rightforwardButton.grid (row =0, column =3) self.master.bind (" 
  ", self.TurnRight45) self.haltButton =Button (self.f2, text =" Halt! ", command =self.Halt, name =" b_halt ") self.haltButton .grid (строка =1, столбец =2) self.master.bind ("  ", self.Halt) self.rightButton =Button (self.f2, text ="> ", command =self.TurnRight, name =" b_right ") self.rightButton.grid ( row =1, column =3) self.master.bind ("
 ", self.TurnRight) self.upButton =Button (self.f2, text ="^", command =self.Forward, name ="b_forward") self.upButton.grid (row =0, column =2) self.master.bind ("
 ", self.Forward) self.leftdownButton =Button (self.f2, text ="/", command =self.TurnRight45, name ="b_left_down") self.leftdownButton.grid (row =2, column =1) self.downButton =Button (self. f2, text ="V", command =self.Reverse, name ="b_reverse") self.downButton.grid (row =2, column =2) self.master.bind ("
 ", self.Reverse) self.f2.grid (row =1, column =0, pady =25) self.rightdownButton =Button (self.f2, text ="\\", command =self.TurnLeft45, name ="b_right_down") self.rightdownButton.grid (row =2, column =3) self.g_horz_fm =Frame (self.f2) self.grip_horz =Scale (s elf.g_horz_fm, from_ =0, to =180, orient =HORIZONTAL) self.grip_horz.grid (row =0, column =0, columnspan =7, sticky =E) self.grip_horz_set =Button (self.g_horz_fm, text ="Set", command =self.GripperX, name ="b_grip_horz_set", width =1, height =2, font =helv6) self.grip_horz_set.grid (row =0, column =8) self.master.bind (" ", self.GripperX) self.g_horz_fm.grid (row =4, column =0, columnspan =7, sticky =E) self.master.bind ("  
  ", self.GripperHome) self.f3 =Frame (self.frame) self.l2 =Label (self.f3, text ="Последнее действие:") self.l2.pack (side =LEFT) self.l3 =Label (self.f3, text ="", textvariable =self.message) self.l3.pack (side =RIGHT) self.f3.grid (row =3, column =0, pady =8) # Установите состояние кнопок управления ботом. Включено при подключении, # В противном случае отключено. def CtrlButtonsState (self, bstate):self.leftforwardButton.config (state =bstate) self.leftButton.config (state =bstate) self.rightforwardButton.config (state =bstate) self.rightButton.config (state =bstate) self. upButton.config (state =bstate) self.leftdownButton.config (state =bstate) self.downButton.config (state =bstate) self.rightdownButton.config (state =bstate) self.haltButton.config (state =bstate) self. disconnectButton.config (state =bstate) self.grip_horz.config (state =bstate) self.grip_vert.config (state =bstate) self.grip_horz_set.config (state =bstate) self.grip_vert_set.config (state =bstate) # Установить состояние входа порта связи. Включить, когда не подключен, # Отключен, когда бот подключен. def ConnCtrlsState (self, bstate):self.connectButton.config (state =bstate) self.comm_entry.config (state =bstate) # Подключиться к порту связи, указанному в поле ввода связи. def SerialConnect (self):try:# Измените здесь скорость передачи, если отличается, то 9600 self.ser =serial.Serial (self.comm_entry.get (), 9600) except IOError:tkMessageBox.showerror ("Invalid comm port", " Порт связи не найден. ") Return self.ConnCtrlsState (DISABLED) self.CtrlButtonsState (NORMAL) self.message.set (" SerialConnect ") self.connected =True time.sleep (3) # Подождите немного, чтобы соединение произошло # Отключиться от бота (закрыть комм-порт). def SerialDisconnect (self):try:# Отправить команду Halt на случай, если бот все еще движется. self.send_cmd ('h', «Halt!») time.sleep (1) self.ser.close () except IOError:print «Не удалось закрыть порт ...» self.message.set («SerialDisconnect») self .ConnCtrlsState (NORMAL) self.CtrlButtonsState (DISABLED) self.connected =False time.sleep (2) # Подождите немного, чтобы произошло отключение # Отправьте команду на открытый коммуникационный порт def send_cmd (self, action, msg):if self.connected ==True:for val in action:self.ser.write (val) self.ser.flush () self.message.set (msg) # Отправьте боту команду поворота налево. def TurnLeft (self, event =None):self.send_cmd ('a', "Left") # Отправить боту команду поворота влево вверх. def TurnLeft45 (self, event =None):self.send_cmd ('q', "Left45") # Отправьте боту команду поворота направо. def TurnRight (self, event =None):self.send_cmd ('s', "Right") # Отправить боту команду поворота вправо. def TurnRight45 (self, event =None):self.send_cmd ('e', "Right45") # Отправить боту команду "Вперед". def Forward (self, event =None):self.send_cmd ('w', "Up") # Отправить боту команду Reverse. def Reverse (self, event =None):self.send_cmd ('z', "Down") # Отправить боту команду Halt. def Halt (self, event =None):self.send_cmd ('h', "Halt!") # Установите захват (X). def GripperX (self, event =None):# Прочитать ползунок и отправить значение контроллеру бота # Примечание:0 полностью закрыт, а 180 полностью открыт grp_change =('>', chr (self. grip_horz.get ()), chr (255)) self.send_cmd (grp_change, "Gripper X") # Установите захват Y. def GripperY (self, event =None):# Прочтите ползунок и отправьте значение в контроллер бота # Примечание:0 полностью вверх, а 180 полностью вниз grp_change =('^', chr (self.grip_vert.get ()), chr (255)) self.send_cmd (grp_change, "Gripper Y ") # Установите захват в" исходное "положение. def GripperHome (self, event =None):self.send_cmd (('c', chr (255)), "Gripper Home") def __init__ (self, master =None):Frame .__ init__ (self, master) self. pack () self.createWidgets () self.CtrlButtonsState (DISABLED) # Выключите графический интерфейс (Tk), затем измените размер и название приложения windowdef main ():root =Tk () root.geometry ("450x350") root.wm_title ( "Центр управления ровером (RCC)") app =App (master =root) app.mainloop () if __name__ =='__main__':main () 
Код ровера Arduino
 / * Bluetooth-ровер. Цель в жизни ... Выполняет ваши приказы, посланные волшебным образом в воздухе! Или с USB :) Автор Скотт Бизли - 2015 Бесплатное использование или изменение. Наслаждайтесь. * // * Использует библиотеку L9110S. Работает с h-мостом L9110S. Загрузите с https://github.com/jscottb/L9110Driver или клонируйте zip с https://github.com, чтобы удалить '-master' из имени файла архива и добавить библиотеку * / # include  #include  #define SERVO_Y 2 // Сервопривод Y захвата штифта # define SERVO_CLAW 7 // Сервопривод захвата штифта # define pinAIN1 5 // определить интерфейс I1 # определить pinAIN2 6 // определить интерфейс I2 # определить pinBIN1 3 / / define I3 interface #define pinBIN2 11 // определение интерфейса I4 // Скорость определяет # define MAXFORWARDSPEED 225 // Максимальная скорость, которую мы хотим двигать вперед # define MAXBACKWARDSPEED 225 // Максимальная скорость назад # define TOPSPEED 255 // Используется для лучшего включения ковровые покрытия и более грубые поверхности .// Различные задержки, используемые для вождения и сервопривода. # define TURNDELAY 475 # define TURNDELAY45 235 # define BACKUPDELAY 400 #define SERVOMOVEDELAY 200 # define SERVOSEARCHDELAY 85 / * Глобальная область. * /// Создание двигателя, сервообъектов для взаимодействия с L9110_Motor motor_left (pinAIN1, pinAIN2); // Создание объекта левого двигателя L9110_Motor motor_right (pinBIN1, pinBIN2); // Создание правого моторного объекта Servo grip_y_servo; // Создание сервообъекта для захвата Y axisServo grip_servo; // Создание сервообъекта для захвата clawvoid setup () {// Измените здесь скорость передачи, если она отличается от 9600 Serial.begin (9600); grip_y_servo.attach (SERVO_Y); // Присоединяем сервопривод SERVO_LR grip_y_servo.write (90); grip_servo.attach (SERVO_CLAW); // Присоединяем сервопривод SERVO_LR grip_servo.write (90); задержка (500);} void loop () {byte command =0, val =0; if (Serial.available ()> 0) {// читать входящую команду byte command =Serial.read (); } переключатель (команда) {case 'w':go_forward (); //Serial.println ("Двигаясь вперед"); ломать; case 'z':go_backward (); //Serial.println ("Назад"); ломать; case 'a':go_left (); задержка (вторник); остановка (); //Serial.println ("Поворачивая налево"); ломать; case 's':go_right (); задержка (вторник); остановка (); //Serial.println ("Поворачивая направо"); ломать; case 'q':go_left (); задержка (TURNDELAY45); остановка (); //Serial.println ("Поворачивая налево"); ломать; case 'e':go_right (); задержка (TURNDELAY45); остановка (); //Serial.println ("Поворачивая направо"); ломать; case 'h':halt (); (); //Serial.println ("Остановка"); ломать; case '>':// Движение захвата по X отправляет установленное значение сервопривода val =Serial.read (); // Мы ограничиваем значение реальными пределами движения настройки grip_servo.write (constrain (val, 64, 179)); //Serial.println ("GripperX"); ломать; case '^':// Движение захвата по оси Y отправляет установленное значение сервопривода val =Serial.read (); // Мы ограничиваем значение реальными пределами движения настройки grip_y_servo.write (constrain (val, 53, 179)); //Serial.println ("GripperY"); ломать; case 'c':// Мы ограничиваем значение реальными пределами движения настройки grip_y_servo.write (90); grip_servo.write (90); //Serial.println ("GripperHome"); ломать; case 255:// Отправляется после всех команд захвата Serial.flush (); ломать; } Serial.flush (); delay (125);} void go_forward () {//Serial.println ("Идем вперед ..."); // Увеличьте скорость двигателей. // Помощь при раскручивании на некоторых поверхностях, посуде и таре на рампе GM ramp_it (MAXFORWARDSPEED, FORWARD, FORWARD); // Устанавливаем на всю заданную скорость только на тот случай, если последняя ванна рампы не была полностью // ей. motor_left.setSpeed ​​(MAXFORWARDSPEED); motor_right.setSpeed ​​(MAXFORWARDSPEED); motor_left.run (FORWARD | RELEASE); motor_right.run (FORWARD | RELEASE);} void go_backward () {//Serial.println ("Назад ..."); // Увеличьте скорость двигателей. // Помощь при раскручивании на некоторых поверхностях и посуде и тарировании на GM ramp_it (MAXBACKWARDSPEED, BACKWARD, BACKWARD); // Устанавливаем на всю заданную скорость только на тот случай, если последняя ванна рампы не была полностью // ей. motor_left.setSpeed ​​(MAXBACKWARDSPEED); motor_right.setSpeed ​​(MAXBACKWARDSPEED); motor_left.run (НАЗАД | РЕЛИЗ); motor_right.run (BACKWARD | RELEASE);} void go_left () {//Serial.println ("Идем налево ..."); // Увеличьте скорость двигателей. // Помощь при раскручивании на некоторых поверхностях и посуде и таре на GM ramp_it (TOPSPEED, BACKWARD, FORWARD); // Устанавливаем на всю заданную скорость только на тот случай, если последняя ванна рампы не была полностью // ей. motor_left.setSpeed ​​(TOPSPEED); motor_right.setSpeed ​​(TOPSPEED); motor_left.run (НАЗАД | РЕЛИЗ); motor_right.run (FORWARD | RELEASE);} void go_right () {//Serial.println ("Идем направо ..."); // Увеличьте скорость двигателей. // Помощь при раскручивании на некоторых поверхностях и посуде и таре на GM ramp_it (TOPSPEED, FORWARD, BACKWARD); // Устанавливаем на всю заданную скорость только на тот случай, если последняя ванна рампы не была полностью // ей. motor_left.setSpeed ​​(TOPSPEED); motor_right.setSpeed ​​(TOPSPEED); motor_left.run (FORWARD | RELEASE); motor_right.run (BACKWARD | RELEASE);} void halt () {//Serial.println ("Остановить!"); // ramp_it (0, ТОРМОЗ, ТОРМОЗ); motor_left.setSpeed ​​(0); motor_right.setSpeed ​​(0); motor_left.run (ТОРМОЗ); motor_right.run (BRAKE);} void ramp_it (uint8_t speed, uint8_t lf_dir, uint8_t rt_dir) {uint8_t ramp_val =0, step_val =0; step_val =abs (скорость / 4); если (! скорость) step_val =-step_val; для (uint8_t i =0; i <4; i ++) {ramp_val + =step_val; motor_left.setSpeed ​​(ramp_val); motor_right.setSpeed ​​(ramp_val); motor_left.run (lf_dir | РЕЛИЗ); motor_right.run (rt_dir | РЕЛИЗ); задержка (25); }} 
Драйвер L9110
Драйвер двигателя L9110 для Arduino https://github.com/jscottb/L9110Driver

Изготовленные на заказ детали и корпуса

4wdgripperbt2.fzz

Схема

4wdgripperbt2.fzz

Производственный процесс

  1. Многотемпературный датчик
  2. Управление паяльником DIY для 862D +
  3. MotionSense
  4. Пожарная безопасность 3D-принтера
  5. Отталкивающая электромагнитная левитация Arduino
  6. Регистратор данных с погодными шарами на базе Arduino
  7. ArduFarmBot - Часть 2:Удаленная станция и реализация Интернета вещей
  8. CoroFence - Тепловой детектор🖖
  9. Облачный мониторинг, система удаленного управления
  10. 5 преимуществ дистанционного управления производством