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

Создайте своего первого робота Arduino - лучшее руководство для начинающих!

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

Arduino UNO
× 1
Adafruit L293D Motor Shield
Это недорогое устройство и простое в использовании. Это общедоступный моторный щит, не требующий каких-либо предварительных навыков. Его также можно легко запрограммировать с помощью библиотеки Adafruit.
× 1
Ультразвуковой датчик HC-SR4
× 1
Модуль Bluetooth HC-05
× 1
Мотор-редуктор
× 2
Колесо
× 2
Колесо заклинателя
× 2
Батарея 9 В (стандартная)
× 3
Зажим для батареи 9 В
× 3
Провода перемычки "мама" / "мама"
× 8
Пластиковый ящик
× 1

Необходимые инструменты и машины

Паяльник (универсальный)
Пистолет для горячего клея (общий)
Отвертка

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

Bluetooth Electronics
IDE Arduino
Adafruit-Motor-Shield-library

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

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

В этом уроке я покажу, как создать робота Arduino с разными функциями. Мы можем научиться использовать разные программы для разных функций, в основном робота, управляемого смартфоном, с функцией избегания препятствий, слежением за стеной и решателем лабиринта. Или вы также можете сделать это только для одной функции.

Материалы и инструменты

Шаг 2. Изготовление шасси

Просверлите два отверстия под мотор:

Подключите два двигателя:

Сделайте три отверстия для колесика:

Подключите колесико:

Сделайте два отверстия с обеих сторон коробки для подключения двигателей и три отверстия в нижней части для подключения роликового колеса после измерения и маркировки правильного диаметра. Затем установите двигатели и ролик.

Батареи

Подключение аккумуляторов.

Схема подключения.

Приклейте батарейки внутрь коробки.

Установите две 9-вольтовые батареи в коробку над роликом. Затем подключите их параллельно и подключите переключатель, как показано на схеме выше.

Подключение Arduino и Motor Shield

Прикрепите моторный щит над Arduino.

Подключите провода аккумулятора к PWR . клеммы моторного щита.

Подключите моторы к моторному щиту.

Снимите перемычку с этого порта.

Подключите моторный щит над Arduino и поместите его над батареей. Затем подключите провода от моторов и АКБ к моторному щиту. Перед подключением ознакомьтесь со схемой подключения, так как это очень важно.

Инструкции по подключению:

  • Подключите левый мотор к "M1" моторного щита.
  • Подключите правый двигатель к "M3" моторного щита.
  • Подключите провод от аккумулятора к "ext pwr" моторного щита.

Сделайте два отверстия и включите Arduino

Отметьте место, чтобы проделать отверстия.

Сделайте отверстия.

Подключите зажим аккумулятора к штекерному разъему постоянного тока на батарее 9 В.

Поместите эту 9-вольтовую батарею в коробку.

Сделайте два отверстия для доступа к USB-порту и входному порту постоянного тока Arduino. Возьмите еще 9-вольтовую батарею и подключите зажим к переходнику штекерного разъема постоянного тока, затем подключите штекер постоянного тока к входному порту постоянного тока Arduino для питания Arduino. Затем поместите батарею между двигателями и Arduino внутри коробки.

Подключение модуля Bluetooth и коммутатора

Подключите модуль Bluetooth к Arduino, как показано на схеме подключения, и поместите его в коробку. Затем проделайте отверстие для установки переключателя на задней стороне коробки и подсоедините переключатель (здесь я поменял переключатель, который использовался ранее из-за некоторых проблем с пайкой).

Инструкция по подключению модуля Bluetooth:

  • «TX» модуля Bluetooth переходит в «RX» Arduino.
  • «RX» модуля Bluetooth переходит в «TX» Arduino.
  • «VCC» модуля Bluetooth переходит в «5 В» Arduino.
  • «GND» модуля Bluetooth переходит в «GND» Arduino.
  • Контакты состояния и ключа модулей BT не используются.

Общая принципиальная схема

Ультразвуковой монтаж датчика

Возьмите ультразвуковой датчик, приклейте к нему небольшой пластиковый кусок L-образной формы и приклейте его поверх пластиковой коробки (или, если у вас нет клеевого стержня, используйте двусторонний скотч). Затем подключите перемычки, как показано на схеме выше.

Инструкция по подключению ультразвукового датчика:

  • «VCC» ультразвукового датчика переходит в «+5» Arduino.
  • «GND» ультразвукового датчика переходит в «GND» Arduino.
  • Контакт «Триггер» ультразвукового датчика подключается к «Аналоговому контакту 1» Arduino.
  • Вывод «Echo» ультразвукового датчика подключается к «аналоговому выводу 0» Arduino.

Теперь мы закончили все подключения, и пришло время программировать.

Последний шаг - коды Arduino и редактирование приложения Bluetooth

Загрузите " Окончательный эскиз "в разделе кода. Если вы столкнетесь с какой-либо ошибкой, убедитесь, что вы установили библиотеку AFmotor.

Теперь мы узнали, как легко программировать Arduino. Я показал здесь несколько программ, позволяющих использовать этого робота в качестве робота, избегающего препятствий, слежения за стеной и управления через Bluetooth. и, наконец, я объединил эти три функции вместе. Посмотрите видео для получения более подробной информации

Начало работы с приложением Bluetooth

Развлекайтесь с помощью функции "Следование за стеной" и "Избегание препятствий"

Посетите мой блог здесь - robotechmaker.com

Если у вас есть вопросы или предложения, оставьте комментарий ниже.

Код

  • Схема Bluetooth (управляемого робота)
  • Окончательный набросок (Окончательный код)
  • Набросок избегающего препятствий
  • Эскиз опоры стены
Bluetooth (управляемый робот), эскиз Arduino
 / * Автор:Марсело Мораес Этот проект содержит общедоступный код. Изменение допускается без предварительного уведомления. * /// Библиотеки # include  // Объекты AF_DCMotor motorRight (1, MOTOR12_64KHZ); // создаем двигатель №1, 64 кГц pwmAF_DCMotor motorLeft (3, MOTOR12_64KHZ); // создание двигателя №3, 64 кГц pwm // Константы и переменные char dataIn ='S'; char определитель; char det; int vel =0; // Настройка Bluetooth Stuffvoid () {Serial.begin (9600); // настраиваем последовательную библиотеку на 9600 бит / с // Сообщения инициализации Serial.println ("ArduinoBymyself - ROVERBot"); Serial.println («Тест мотора AF!»); // выключить моторы motorRight.setSpeed ​​(0); motorLeft.setSpeed ​​(0); motorRight.run (ВЫПУСК); motorLeft.run (ВЫПУСК); } void loop () {det =check (); // вызов субротинии check () для получения последовательного кода // анализ последовательного кода switch (det) {case 'F':// F, двигаться вперед motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel); motorRight.run (ВПЕРЕД); motorLeft.run (ВПЕРЕД); det =проверка (); ломать; case 'B':// B, переместиться назад motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel); motorRight.run (НАЗАД); motorLeft.run (НАЗАД); det =проверка (); ломать; case 'L':// L, перемещаем колеса влево motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel / 4); motorRight.run (ВПЕРЕД); motorLeft.run (ВПЕРЕД); det =проверка (); ломать; case 'R':// R, перемещаем колеса вправо motorRight.setSpeed ​​(vel / 4); motorLeft.setSpeed ​​(vel); motorRight.run (ВПЕРЕД); motorLeft.run (ВПЕРЕД); det =проверка (); ломать; case 'I':// I, повернуть направо вперед motorRight.setSpeed ​​(vel / 2); motorLeft.setSpeed ​​(vel); motorRight.run (ВПЕРЕД); motorLeft.run (ВПЕРЕД); det =проверка (); ломать; case 'J':// J, повернуть направо назад motorRight.setSpeed ​​(vel / 2); motorLeft.setSpeed ​​(vel); motorRight.run (НАЗАД); motorLeft.run (НАЗАД); det =проверка (); ломать; case 'G':// G, повернуть налево вперед motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel / 2); motorRight.run (ВПЕРЕД); motorLeft.run (ВПЕРЕД); det =проверка (); ломать; case 'H':// H, повернуть налево назад motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel / 2); motorRight.run (НАЗАД); motorLeft.run (НАЗАД); det =проверка (); ломать; case 'S':// S, остановка motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel); motorRight.run (ВЫПУСК); motorLeft.run (ВЫПУСК); det =проверка (); ломать; }} // получаем код bluetooth, полученный из последовательного порта int check () {if (Serial.available ()> 0) {// если в последовательном порту есть действительные данные dataIn =Serial.read (); // сохраняет данные в a varialbe // проверяем код if (dataIn =='F') {// Прямой определитель ='F'; } else if (dataIn =='B') {// Обратный определитель ='B'; } else if (dataIn =='L') {// Левый определитель ='L'; } else if (dataIn =='R') {// Правый определитель ='R'; } else if (dataIn =='I') {// Определитель отклонения вправо ='I'; } else if (dataIn =='J') {// Определитель назад вправо ='J'; } else if (dataIn =='G') {// Детерминант вперед влево ='G'; } else if (dataIn =='H') {// Детерминант назад влево ='H'; } else if (dataIn =='S') {// Остановить определитель ='S'; } else if (dataIn =='0') {// Скорость 0 vel =0; } else if (dataIn =='1') {// Скорость 25 vel =25; } else if (dataIn =='2') {// Скорость 50 vel =50; } else if (dataIn =='3') {// Скорость 75 vel =75; } else if (dataIn =='4') {// Скорость 100 vel =100; } else if (dataIn =='5') {// Скорость 125 vel =125; } else if (dataIn =='6') {// Скорость 150 vel =150; } else if (dataIn =='7') {// Скорость 175 vel =175; } else if (dataIn =='8') {// Скорость 200 vel =200; } else if (dataIn =='9') {// Скорость 225 vel =225; } else if (dataIn =='q') {// Скорость 255 vel =255; } else if (dataIn =='U') {// Детерминант включения подсветки ='U'; } else if (dataIn =='u') {// Определитель выключения подсветки ='u'; } else if (dataIn =='W') {// Детерминант включения переднего света ='W'; } else if (dataIn =='w') {// Определитель выключения переднего света ='w'; } else if (dataIn =='V') {// Определитель сирены ='V'; } else if (dataIn =='v') {// Определитель сирены ='v'; } else if (dataIn =='X') {// Детерминант Extra On ='X'; } else if (dataIn =='x') {// Определитель Extra Off ='x'; }} определитель возврата;} 
Окончательный набросок (Окончательный код) Arduino
 / * Автор:Мухаммед Азхарвизит - robotechmaker.com * / # include  #define trigPin 14 // определение контактов вашего датчика # define echoPin 15 // ObjectsAF_DCMotor motorRight (1, MOTOR12_64KHZ); // создаем двигатель №1, 64 кГц pwmAF_DCMotor motorLeft (3, MOTOR12_64KHZ); // создание двигателя № 3, 64 кГц pwm // Константы и переменные char dataIn ='S'; char определитель; char det; int vel =255; // Настройка Bluetooth Stuffvoid () {Serial.begin (9600); // настраиваем последовательную библиотеку на 9600 бит / с pinMode (trigPin, OUTPUT); // устанавливаем вывод триггера на вывод (отправляем звуковые волны) pinMode (echoPin, INPUT); // устанавливаем вывод эха на ввод (прием звуковых волн) / / Сообщения инициализации Serial.println («Мистер робот»); Serial.println («Редай для работы!»); // выключить моторы motorRight.setSpeed ​​(0); motorLeft.setSpeed ​​(0); motorRight.run (ВЫПУСК); motorLeft.run (RELEASE);} недействительный цикл () {det =check (); // вызов субротинии check () для получения последовательного кода // анализ последовательного кода switch (det) {case 'F':// F, двигаться вперед motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel); motorRight.run (ВПЕРЕД); motorLeft.run (ВПЕРЕД); det =проверка (); ломать; case 'B':// B, переместиться назад motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel); motorRight.run (НАЗАД); motorLeft.run (НАЗАД); det =проверка (); ломать; case 'L':// L, перемещаем колеса влево motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel / 4); motorRight.run (ВПЕРЕД); motorLeft.run (ВПЕРЕД); det =проверка (); ломать; case 'R':// R, перемещаем колеса вправо motorRight.setSpeed ​​(vel / 4); motorLeft.setSpeed ​​(vel); motorRight.run (ВПЕРЕД); motorLeft.run (ВПЕРЕД); det =проверка (); ломать; case 'I':// I, повернуть направо вперед motorRight.setSpeed ​​(vel / 2); motorLeft.setSpeed ​​(vel); motorRight.run (ВПЕРЕД); motorLeft.run (ВПЕРЕД); det =проверка (); ломать; case 'J':// J, повернуть направо назад motorRight.setSpeed ​​(vel / 2); motorLeft.setSpeed ​​(vel); motorRight.run (НАЗАД); motorLeft.run (НАЗАД); det =проверка (); ломать; case 'G':// G, повернуть налево вперед motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel / 2); motorRight.run (ВПЕРЕД); motorLeft.run (ВПЕРЕД); det =проверка (); ломать; case 'H':// H, повернуть налево назад motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel / 2); motorRight.run (НАЗАД); motorLeft.run (НАЗАД); det =проверка (); ломать; case 'S':// S, остановка motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel); motorRight.run (ВЫПУСК); motorLeft.run (ВЫПУСК); det =проверка (); ломать; case 'm':// для робота-следящего за стеной. motorRight.setSpeed ​​(vel); // установить скорость двигателей в диапазоне 0-255 motorLeft.setSpeed ​​(vel); большая продолжительность, дистанция; // запускаем сканирование digitalWrite (trigPin, LOW); delayMicroseconds (2); // задержки необходимы для успешной работы датчика. digitalWrite (trigPin, HIGH); delayMicroseconds (10); // эта задержка тоже необходима! digitalWrite (trigPin, LOW); duration =pulseIn (echoPin, HIGH); distance =(duration / 2) / 29.1; // конвертируем расстояние в сантиметры. if (distance <30) / * Расстояние, которое необходимо соблюдать до стены * / {Serial.println («Стена построена!»); Serial.println («Начат после стены»); Serial.println (" Превращение !"); motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(0); motorRight.run (ВПЕРЕД); motorLeft.run (ВЫПУСК); задержка (500); // ждем секунду} else {Serial.println ("Стена не обнаружена. поворот"); задержка (15); motorRight.setSpeed ​​(0); motorLeft.setSpeed ​​(vel); motorRight.run (ВЫПУСК); motorLeft.run (ВПЕРЕД); } ломать; case 'b':// робот, избегающий препятствий motorRight.setSpeed ​​(vel); // установить скорость двигателей в диапазоне 0-255 motorLeft.setSpeed ​​(vel); длительная выдержка, продвижение; // запускаем сканирование digitalWrite (trigPin, LOW); delayMicroseconds (2); // задержки необходимы для успешной работы датчика. digitalWrite (trigPin, HIGH); delayMicroseconds (10); // эта задержка тоже необходима! digitalWrite (trigPin, LOW); Aduration =pulseIn (echoPin, HIGH); Adistance =(Aduration / 2) / 29.1; // конвертируем расстояние в сантиметры. if (Расстояние <25) / * если впереди находится препятствие в 25 сантиметрах, выполните следующие действия:* / {Serial.println («Обнаружено близкое препятствие!»); Serial.println («Сведения о препятствии:»); Serial.print ("Расстояние от робота равно"); Serial.print (Adistance); Serial.print ("CM!"); // распечатать расстояние в сантиметрах.Serial.println ("Препятствие объявлено угрозой из-за близкого расстояния . "); Serial.println (" Вращение! "); motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel); motorLeft.run (НАЗАД); // Поворачиваем, пока впереди есть препятствие. motorRight.run (FORWARD);} else {Serial.println («Препятствия не обнаружены. Идем вперед»); задержка (15); motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel); motorRight.run (ВПЕРЕД); // если впереди нет препятствий, вперед! motorLeft.run (ВПЕРЕД); } ломать; }} // получаем код bluetooth, полученный из последовательного порта int check () {if (Serial.available ()> 0) {// если в последовательном порту есть действительные данные dataIn =Serial.read (); // сохраняет данные в a varialbe // проверяем код if (dataIn =='F') {// Прямой определитель ='F'; } else if (dataIn =='B') {// Обратный определитель ='B'; } else if (dataIn =='L') {// Левый определитель ='L'; } else if (dataIn =='R') {// Правый определитель ='R'; } else if (dataIn =='I') {// Определитель отклонения вправо ='I'; } else if (dataIn =='J') {// Определитель назад вправо ='J'; } else if (dataIn =='G') {// Детерминант вперед влево ='G'; } else if (dataIn =='H') {// Детерминант назад влево ='H'; } else if (dataIn =='S') {// Остановить определитель ='S'; } else if (dataIn =='0') {// Скорость 0 vel =0; } else if (dataIn =='1') {// Скорость 25 vel =25; } else if (dataIn =='2') {// Скорость 50 vel =50; } else if (dataIn =='3') {// Скорость 75 vel =75; } else if (dataIn =='4') {// Скорость 100 vel =100; } else if (dataIn =='5') {// Скорость 125 vel =125; } else if (dataIn =='6') {// Скорость 150 vel =150; } else if (dataIn =='7') {// Скорость 175 vel =175; } else if (dataIn =='8') {// Скорость 200 vel =200; } else if (dataIn =='9') {// Скорость 225 vel =225; } else if (dataIn =='b') {// Дополнительный детерминант ='b'; } else if (dataIn =='m') {// Дополнительный детерминант ='m'; }} определитель возврата;} 
Набросок избегания препятствий Arduino
 / * Автор:Мухаммед Азхарвизит - robotechmaker.com * / # include  #define trigPin 14 // определение контактов вашего датчика # define echoPin 15 int vel =255; // Скорость робота // ObjectsAF_DCMotor motorRight (1, MOTOR12_64KHZ); // создаем двигатель №1, 64 кГц pwmAF_DCMotor motorLeft (3, MOTOR12_64KHZ); // создаем двигатель №3, 64 кГц pwmvoid setup () {Serial.begin (9600); // настраиваем последовательную библиотеку на 9600 бит / с pinMode (trigPin, OUTPUT); // устанавливаем вывод триггера на вывод (отправляем звуковые волны) pinMode (echoPin, INPUT); // устанавливаем вывод эха на ввод (прием звуковых волн) / / Сообщения инициализации Serial.println («Мистер робот»); Serial.println («Редай для работы!»); // выключить моторы motorRight.setSpeed ​​(0); motorLeft.setSpeed ​​(0); motorRight.run (ВЫПУСК); motorLeft.run (RELEASE);} void loop () {// робот, избегающий препятствий motorRight.setSpeed ​​(vel); // установить скорость двигателей в диапазоне 0-255 motorLeft.setSpeed ​​(vel); большая продолжительность, дистанция; // запускаем сканирование digitalWrite (trigPin, LOW); delayMicroseconds (2); // задержки необходимы для успешной работы датчика. digitalWrite (trigPin, HIGH); delayMicroseconds (10); // эта задержка тоже необходима! digitalWrite (trigPin, LOW); duration =pulseIn (echoPin, HIGH); distance =(duration / 2) / 29.1; // конвертируем расстояние в сантиметры. if (distance <25) / * если впереди есть препятствие в 25 сантиметрах, выполните следующие действия:* / {Serial.println ("Обнаружено близкое препятствие!"); Serial.println ("Сведения о препятствии:"); Serial.print ("Расстояние от робота равно"); Serial.print (distance); Serial.print ("CM!"); // распечатать расстояние в сантиметрах.Serial.println ("Препятствие объявлено угрозой из-за близкого расстояния . "); Serial.println (" Вращение! "); motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel); motorLeft.run (НАЗАД); // Поворачиваем, пока впереди есть препятствие. motorRight.run (FORWARD);} else {Serial.println («Препятствия не обнаружены. Идем вперед»); задержка (15); motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(vel); motorRight.run (ВПЕРЕД); // если впереди нет препятствий, вперед! motorLeft.run (ВПЕРЕД); }} 
Эскиз настенного опоры Arduino
 / * Автор:Мухаммед Азхарвизит - robotechmaker.com * / # include  #define trigPin 14 // определение контактов вашего датчика # define echoPin 15 int vel =255; // Скорость робота // ObjectsAF_DCMotor motorRight (1, MOTOR12_64KHZ); // создаем двигатель №1, 64 кГц pwmAF_DCMotor motorLeft (3, MOTOR12_64KHZ); // создаем двигатель №3, 64 кГц pwmvoid setup () {Serial.begin (9600); // настраиваем последовательную библиотеку на 9600 бит / с pinMode (trigPin, OUTPUT); // устанавливаем вывод триггера на вывод (отправляем звуковые волны) pinMode (echoPin, INPUT); // устанавливаем вывод эха на ввод (прием звуковых волн) / / Сообщения инициализации Serial.println («Мистер робот»); Serial.println («Редай для работы!»); // выключить моторы motorRight.setSpeed ​​(0); motorLeft.setSpeed ​​(0); motorRight.run (ВЫПУСК); motorLeft.run (RELEASE);} void loop () {// для робота-следящего за стеной. motorRight.setSpeed ​​(vel); // установить скорость двигателей в диапазоне 0-255 motorLeft.setSpeed ​​(vel); большая продолжительность, дистанция; // запускаем сканирование digitalWrite (trigPin, LOW); delayMicroseconds (2); // задержки необходимы для успешной работы датчика. digitalWrite (trigPin, HIGH); delayMicroseconds (10); // эта задержка тоже необходима! digitalWrite (trigPin, LOW); duration =pulseIn (echoPin, HIGH); distance =(duration / 2) / 29.1; // конвертируем расстояние в сантиметры. if (distance <30) / * Расстояние, которое необходимо соблюдать до стены * / {Serial.println ("Стена определена!"); Serial.println («Начали по стене»); Serial.println («Токарная!»); motorRight.setSpeed ​​(vel); motorLeft.setSpeed ​​(0); motorRight.run (ВПЕРЕД); motorLeft.run (ВЫПУСК); задержка (500); // ждем секунду} else {Serial.println ("Стена не обнаружена. поворот"); задержка (15); motorRight.setSpeed ​​(0); motorLeft.setSpeed ​​(vel); motorRight.run (ВЫПУСК); motorLeft.run (ВПЕРЕД); }} 

Схема


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

  1. Лучшие аксессуары для Raspberry Pi
  2. Рекомендации по отслеживанию активов:как максимально использовать данные об активах, заработанных с трудом
  3. Как максимально эффективно использовать свою цепочку поставок прямо сейчас
  4. Робот для супер-крутой навигации внутри помещений
  5. Крепления двигателя 101:руководство по выбору лучшего материала крепления двигателя
  6. Ваш полный путеводитель по лучшим промышленным сельскохозяйственным продуктам
  7. Ваш путеводитель по лучшим брендам кранов
  8. Руководство по покупке лучшего 3D-принтера для вашего механического цеха
  9. Лучший способ создать свой прототип IoT
  10. CNC Wire EDM:ваш лучший друг в мастерской