Создайте своего первого робота Arduino - лучшее руководство для начинающих!
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 3 | ||||
| × | 3 | ||||
| × | 8 | ||||
| × | 1 |
Необходимые инструменты и машины
| ||||
| ||||
|
Приложения и онлайн-сервисы
| ||||
| ||||
|
Об этом проекте
Если вы новичок в 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 (ВПЕРЕД); }}
Схема
Производственный процесс
- Лучшие аксессуары для Raspberry Pi
- Рекомендации по отслеживанию активов:как максимально использовать данные об активах, заработанных с трудом
- Как максимально эффективно использовать свою цепочку поставок прямо сейчас
- Робот для супер-крутой навигации внутри помещений
- Крепления двигателя 101:руководство по выбору лучшего материала крепления двигателя
- Ваш полный путеводитель по лучшим промышленным сельскохозяйственным продуктам
- Ваш путеводитель по лучшим брендам кранов
- Руководство по покупке лучшего 3D-принтера для вашего механического цеха
- Лучший способ создать свой прототип IoT
- CNC Wire EDM:ваш лучший друг в мастерской