Съдържание:

Усъвършенстван следен робот: 22 стъпки (със снимки)
Усъвършенстван следен робот: 22 стъпки (със снимки)

Видео: Усъвършенстван следен робот: 22 стъпки (със снимки)

Видео: Усъвършенстван следен робот: 22 стъпки (със снимки)
Видео: Камера-ЛАМПА с проследяване и идентификация на човек. 2024, Юли
Anonim
Image
Image
Прототипиране - Perfboard
Прототипиране - Perfboard

Това е усъвършенстван робот, базиран на линейния сензор Teensy 3.6 и QTRX, който изградих и върху който работя от доста време. Има някои значителни подобрения в дизайна и производителността от моя по -ранен робот след линия. Скоростта и реакцията на робота са се подобрили. Цялостната структура е компактна и лека. Компонентите са разположени близо до оста на колелото, така че да се сведе до минимум ъгловият импулс. Високомощните микрометални редукторни двигатели осигуряват адекватен въртящ момент, а силиконовите колела от алуминиева главина предлагат така необходимото сцепление при високи скорости. Екраниращи щитове и колела позволяват на робота да определи неговата позиция и ориентация. С Teensyview, монтиран на борда, цялата съответна информация може да бъде визуализирана и важните параметри на програмата могат да бъдат актуализирани с бутони.

За да започнете изграждането на този робот, ще ви трябват следните консумативи (и много време и търпение на ваше разположение).

Консумативи

Електроника

  • Съвет за развитие на Teensy 3.6
  • Подпорен щит със сензори за движение
  • Sparkfun TeensyView
  • Масив от сензори за отражение на Pololu QTRX-MD-16A
  • 15x20cm двустранен прототип на печатна платка
  • Пололу регулатор на напрежението S9V11F3S5
  • Pololu Регулируем регулатор на напрежение 4-5-20V U3V70A
  • MP12 6V 1580 об / мин микроредуктор с енкодер (x2)
  • DRV8833 Двумоторен носач на драйвер (x2)
  • 3.7V, 750mAh Li-Po батерия
  • Превключвател ON/OFF
  • Електролитен кондензатор 470uF
  • Електролитен кондензатор 1000uF (x2)
  • Керамичен кондензатор 0.1uF (x5)
  • Бутони (x3)
  • 10 мм зелен светодиод (x2)

Хардуер

  • Силиконово колело Atom 37x34mm (x2)
  • Колело за топка Pololu с метална топка 3/8”
  • N20 монтиране на двигателя (x2)
  • Болт и гайки

Кабели и конектори

  • Гъвкави проводници 24AWG
  • 24 -пинов FFC към DIP пробив и FFC кабел (тип А, дължина 150 мм)
  • Кръгла женска щифтова заглавка
  • Кръгла женска щифтова заглавка дълга клема
  • Двойна женска заглавка с десен ъгъл
  • Дворедна мъжка заглавка с десен ъгъл
  • Заглавие за мъжки щифт
  • Заглавие за мъжки щифт

Инструменти

  • Мултиметър
  • Поялник
  • Спойка тел
  • Машина за сваляне на тел
  • Резачка за тел

Стъпка 1: Преглед на системите

Както при моя по-ранен дизайн на самобалансиращ се робот, този робот е съвкупност от пробивни дъски, монтирани на перфорирана дъска, която също служи за целта на конструкцията.

Основните системи на робота са описани по -долу.

Микроконтролер: Платка за разработка Teensy 3.6 с 32-битов 180MHz ARM Cortex-M4 процесор.

Линеен сензор: Polotra QTRX-MD-16A 16-канален аналогов изходен сензорен масив в средна плътност (8 мм стъпка на сензора).

Задвижване: 6V, 1580rpm, високоефективни микрометални редукторни двигатели с магнитен енкодер и силиконови колела, монтирани на алуминиеви главини.

Одометрия: Магнитни двойки енкодери на колела за оценка на координатите и изминатото разстояние.

Ориентационен сензор: Подпорен щит със сензори за движение за оценка на позицията и посоката на робота.

Захранване: 3.7V, 750mAh lipo батерия като източник на захранване. 3.3V стъпаловиден регулатор захранва микроконтролер, сензори и дисплейно устройство. Регулируемият усилващ регулатор захранва двата двигателя.

Потребителски интерфейс: Teensyview за показване на информация. Пробив с три бутона за приемане на потребителски данни. Два броя зелени светодиоди с диаметър 10 мм за индикация на състоянието по време на работа.

Стъпка 2: Нека започнем с прототипирането

Image
Image

Ще внедряваме горната схема на перфборда. Първо трябва да поддържаме нашите пробивни дъски готови, като запояваме заглавки върху тях. Видеото ще даде представа за това кои заглавки трябва да бъдат запоени върху кои пробивни дъски.

След запояване на хедери върху пробивни дъски, подредете Teensyview и пробива с бутони върху Teensy.

Стъпка 3: Прототипиране - Perfboard

Прототипиране - Perfboard
Прототипиране - Perfboard

Вземете 15x20cm двустранен прототип на перфорирана дъска и маркирайте границата с постоянен маркер, както е показано на снимката. Пробийте отвори с размер М2 за монтиране на сензорната решетка, колелото и двигателите с микрометални зъбни колела на места, маркирани с бял кръг. По -късно ще изрежем перфборда по границата след запояване и тестване на всички компоненти.

Ще започнем прототипирането си със запояване на щифтовете и гнездата на заглавната част на перфорираната дъска. Разбиващите дъски ще бъдат вмъкнати по -късно в тези заглавки. Внимателно обърнете внимание на позицията на заглавките на перфорираната дъска. Ще свързваме всички проводници въз основа на това оформление на заглавките.

Стъпка 4: Прототипиране - Prop Shield

Прототипиране - Prop Shield
Прототипиране - Prop Shield
Прототипиране - Prop Shield
Прототипиране - Prop Shield
Прототипиране - Prop Shield
Прототипиране - Prop Shield
Прототипиране - Prop Shield
Прототипиране - Prop Shield

Първо ще запояваме връзките към подпорния щит. Тъй като използваме само сензори за движение на подпорния щит, трябва да свържем само SCL, SDA и IRQ щифтове освен 3V и заземяващите щифтове на щита за подпиране.

След като връзката приключи, поставете Teensy и подпорен щит и калибрирайте сензорите за движение, като следвате стъпките, споменати тук.

Стъпка 5: Прототипиране - Захранване и заземяване

Прототипиране - мощност и земя
Прототипиране - мощност и земя

Запоявайте всички захранващи и земни връзки, отнасящи се до снимката. Поставете всички пробивни дъски на място и осигурете непрекъснатост с помощта на мултицет. Проверете различните нива на напрежение на борда.

  • Изходно напрежение Li-po (обикновено между 3V и 4.2V)
  • Изходно напрежение на регулатора за повишаване/намаляване (3.3V)
  • Регулируемо изходно напрежение на регулиращия регулатор (зададено на 6V)

Стъпка 6: Прототипиране - превозвач на шофьор на мотор

Прототипиране - превозвач на шофьор на мотор
Прототипиране - превозвач на шофьор на мотор
Прототипиране - превозвач на шофьор на мотор
Прототипиране - превозвач на шофьор на мотор
Прототипиране - превозвач на шофьор на мотор
Прототипиране - превозвач на шофьор на мотор

DRV8833 носещата платка с двоен двигател може да достави 1.2A непрекъснати и 2A пикови токове на канал. Ще свържем двата канала паралелно, за да задвижваме един мотор. Запоявайте връзките, като следвате стъпките по -долу.

  • Паралелно двата входа и двата изхода на носача на драйвера на двигателя, както е показано на снимката.
  • Свържете проводниците за входен контрол към драйвера на двигателя.
  • Свържете 1000uF електролитен кондензатор и керамичен кондензатор 0.1uF през клемите Vin и Gnd на двете носещи платки.
  • Свържете 0.1uF керамичен кондензатор към изходните клеми на драйвера на двигателя.

Стъпка 7: Прототипиране - Заглавка на масив от сензор за линия

Прототипиране - Заглавка на масив от сензори за линии
Прототипиране - Заглавка на масив от сензори за линии
Прототипиране - Заглавка на масив от сензори за линии
Прототипиране - Заглавка на масив от сензори за линии
Прототипиране - Заглавка на масив от сензори за линии
Прототипиране - Заглавка на масив от сензори за линии
Прототипиране - Заглавка на масив от сензори за линии
Прототипиране - Заглавка на масив от сензори за линии

Teensy 3.6 има два ADC - ADC0 и ADC1, които са мултиплексирани до 25 достъпни пина. Имаме достъп до всякакви два пина от двата ADC едновременно. Ще свържем осем линейни сензора всеки към ADC0 и ADC1. Сензорите за четни числа ще бъдат свързани към ADC1, а сензорите за нечетни числа към ADC0. Запоявайте връзките, като следвате стъпките по -долу. По -късно ще свържем линейния сензор, използвайки FFC към DIP адаптер и кабел.

  • Свържете всички четни сензорни щифтове (16, 14, 12, 10, 8, 6, 4, 2), както е показано на снимката. Прокарайте проводника за свързване на сензорен щифт 12 през обратната страна на перфборда.
  • Свържете контролния щифт на излъчвателя (ДАЖЕ) към щифт 30 на Teensy.
  • Свържете всички нечетни сензорни щифтове (15, 13, 11, 9, 7, 5, 3, 1), както е показано на снимката.
  • Свържете 470uF електролитен кондензатор през Vcc и Gnd.

Ако внимателно наблюдавате щифтовете на линейния сензор и съответните им щифтове на заглавката на борда, ще забележите, че горният ред на линейния сензор се съпоставя с долния ред на заглавката на борда и обратно. Това е така, защото когато свържем линейния сензор към перфборда, използвайки двуредови правоъгълни заглавки, редовете ще се подравнят правилно. Отне ми доста време, за да разбера това и да коригирам присвояването на щифтове в програмата.

Стъпка 8: Прототипиране - Micro Gear двигател и енкодер

Прототипиране - мотор и енкодер на Micro Gear
Прототипиране - мотор и енкодер на Micro Gear
  • Фиксирайте микро -металния мотор -редуктор с енкодер с помощта на опори за мотор N20.
  • Свържете проводниците на двигателя и енкодера, както е показано на снимката.
  • Ляв енкодер - Teensy щифтове 4 & 0
  • Десен енкодер - Teensy щифтове 9 и 27

Стъпка 9: Прототипиране - светодиоди

Прототипиране - светодиоди
Прототипиране - светодиоди
Прототипиране - светодиоди
Прототипиране - светодиоди

Двата светодиода показват дали роботът е открил завой или не. Използвах резистор от 470 ома за свързване на светодиодите към Teensy.

  • Ляв LED анод към щифт 6 на Teensy
  • Десен LED анод към Teensy pin 8

Стъпка 10: Прототипиране - Пробиви

Image
Image
Прототипиране - Пробиви
Прототипиране - Пробиви

Сега, когато завършихме цялото си запояване върху перфорирана дъска, можем внимателно да изрежем по границата, маркирана върху перфорираната плоскост, и да премахнем допълнителните битове от перфборда. Също така, прикрепете двете колела и колелото.

Поставете всички пробивни дъски в съответните им гнезда. За вмъкване на FFC-DIP пробив и за фиксиране на линейния сензор QTRX-MD-16A, вижте видеото.

Стъпка 11: Преглед на софтуерните библиотеки

Преглед на софтуерните библиотеки
Преглед на софтуерните библиотеки

Ще програмираме Teensy в Arduino IDE. Ще имаме нужда от някои библиотеки, преди да започнем. Библиотеките, които ще използваме са:

  • Енкодер
  • Teensyview
  • EEPROM
  • ADC
  • NXPMotionSense

И някои, които са написани специално за този робот,

  • Натисни бутона
  • LineSensor
  • TeensyviewMenu
  • Двигатели

Библиотеките, специфични за този робот, са обсъдени подробно и са достъпни за изтегляне в следващите стъпки.

Стъпка 12: Обяснени библиотеки - PushButton

Тази библиотека е за свързване на платката за пробиване на бутоните с Teensy. Използваните функции са

PushButton (int leftButtonPin, int centreButtonPin, int rightButtonPin);

Извикването на този конструктор чрез създаване на обект конфигурира щифтовете на бутоните в режим INPUT_PULLUP.

int8_t waitForButtonPress (void);

Тази функция изчаква, докато бутонът бъде натиснат и освободен, и връща кода на ключа.

int8_t getSingleButtonPress (void);

Тази функция проверява дали бутонът е натиснат и освободен. Ако да, връща кода на ключа иначе връща нула.

Стъпка 13: Обяснени библиотеки - линеен сензор

LineSensor е библиотеката за свързване на масив от сензори на линии с Teensy. По -долу са използваните функции.

LineSensor (невалиден);

Извикването на този конструктор чрез създаване на обект инициализира ADC0 и ADC1, отчита праговите, минималните и максималните стойности от EEPROM и конфигурира щифтовете на сензора във входен режим и контролния щифт на излъчвателя в изходен режим.

празно калибриране (uint8_t calibrationMode);

Тази функция калибрира линейните сензори. Режимът на калибриране може да бъде или MIN_MAX, или MEDIAN_FILTER. Тази функция е обяснена подробно в по -късна стъпка.

void getSensorsAnalog (uint16_t *sensorValue, режим uint8_t);

Чете сензорния масив във всеки от трите режима, предадени като аргумент. Режимът е състоянието на излъчвателите и може да бъде ON, OFF или TOGGLE. Режимът TOGGLE компенсира показанията на отразяването на сензора поради околната светлина. Сензорите, свързани към ADC0 и ADC1, се отчитат синхронно.

int getLinePosition (uint16_t *sensorValue);

Изчислява позицията на сензорния масив над линията по среднопретегления метод.

uint16_t getSensorsBinary (uint16_t *sensorValue);

Връща 16-битово представяне на състоянието на сензорите. Двоичен показва, че сензорът е над линията, а двоична нула показва, че сензорът е извън линията.

uint8_t countBinary (uint16_t binaryValue);

Предаването на 16-битовото представяне на стойностите на сензорите към тази функция връща броя на сензорите, които са над линията.

void getSensorsNormalized (uint16_t *sensorValue, режим uint8_t);

Чете стойностите на сензора и ограничава стойността на всеки сензор до съответните му минимални и максимални стойности. След това стойностите на сензора се нанасят от съответния им мин. До макс. Диапазон от 0 до 1000.

Стъпка 14: Обяснени библиотеки - TeensyviewMenu

TeensyviewMenu е библиотеката, където могат да бъдат достъпни функциите на менюто за показване. По -долу са използваните функции.

TeensyViewMenu (невалидно);

Извикването на този конструктор създава обект от клас LineSensor, PushButton и TeensyView.

void intro (void);

Това е за навигация в менюто.

тест за пустота (невалидност);

Това се извиква вътрешно в менюто, когато стойностите на линейния сензор трябва да се показват на Teensyview за тестване.

Стъпка 15: Обяснени библиотеки - двигатели

Motors е библиотеката, използвана за задвижване на двата двигателя. По -долу са използваните функции.

Двигатели (празни);

Извикването на този конструктор чрез създаване на обект конфигурира контрола на посоката на двигателя и PWM контролните щифтове към изходен режим.

void setSpeed (int leftMotorSpeed, int rightMotorSpeed);

Извикването на тази функция задвижва двата двигателя със скорости, предадени като аргументи. Стойността на скоростта може да варира от -255 до +255 с отрицателен знак, показващ, че посоката на въртене е обърната.

Стъпка 16: Тестване - Одометрия на енкодера

Ще тестваме енкодерите на магнитните колела и ще покажем позицията и разстоянието, изминато от робота.

Качете DualEncoderTeensyview.ino. Програмата показва отметките на енкодера в Teensyview. Енкодерът отбелязва увеличение, ако преместите робота напред, и намаляване, ако го преместите назад.

Сега качете EncoderOdometry.ino. Тази програма показва позицията на робота по x-y координати, показва общото изминато разстояние в сантиметър и ъгъла, обърнат в градуси.

Препоръчал съм внедряването на мъртви изчисления чрез одометрия на робот с R/C серво диференциално задвижване от Сиатълското дружество по роботика за определяне на позиция от отметки на енкодера.

Стъпка 17: Тестване - Сензори за движение на Prop Shield

Уверете се, че сте калибрирали сензорите за движение, като следвате стъпките, споменати тук.

Сега качете PropShieldTeensyView.ino. Трябва да можете да видите стойностите на акселерометъра, жироскопа и магнитометъра и на трите оси на Teensyview.

Стъпка 18: Преглед на програмата

Програмата за усъвършенствания последовател на линия е написана на Arduino IDE. Програмата работи в следната последователност, обяснена по -долу.

  • Стойностите, съхранени в EEPROM, се четат и се показва менюто.
  • При натискане на LAUNCH програмата влиза в цикъла.
  • Нормализираните стойности на сензора на линията се отчитат.
  • Двоичната стойност на позицията на линията се получава с помощта на нормализирани стойности на сензора.
  • Броят на сензорите, които са над линията, се изчислява от двоичната стойност на позицията на линията.
  • Отметките на енкодера се актуализират и общото изминато разстояние, x-y координатите и ъгълът се актуализират.
  • За различни стойности на двоичен брой, вариращи от 0 до 16, се изпълнява набор от инструкции. Ако двоичният брой е в диапазона от 1 до 5 и ако сензорите, които са над линията, са съседни един на друг, се извиква PID рутина. Ротацията се извършва в други комбинации от двоична стойност и двоичен брой.
  • В PID рутината (която е PD), двигателите се задвижват със скорости, изчислени въз основа на грешка, промяна в грешката, Kp и Kd стойности.

Програмата понастоящем не измерва стойностите на ориентация от щита за поддръжка. Това е незавършена работа и се актуализира.

Качете TestRun20.ino. Ще видим как да навигирате в менюто, да регулирате настройките и как да калибрирате линейните сензори в следващите стъпки, след които ще тестваме нашия робот.

Стъпка 19: Придвижване в менюто и настройките

Менюто има следните настройки, които могат да се навигират с помощта на левия и десния бутон и да се избират с помощта на централния бутон. Настройките и техните функции са описани по -долу.

  1. КАЛИБРИРАНЕ: За калибриране на линейни сензори.
  2. TEST: За показване на стойностите на линейния сензор.
  3. LAUNCH: За да започнете следния ред.
  4. MAX SPEED: За да зададете горната граница на скоростта на робота.
  5. СКОРОСТ НА РОТАЦИЯ: За да зададете горната граница на скоростта на робота, когато той извършва завой, т.е. когато и двете колела се въртят с еднакви скорости в противоположни посоки.
  6. КП: Пропорционална константа.
  7. KD: Производна константа.
  8. RUN MODE: За да изберете между два режима на работа - NORMAL и ACCL. В НОРМАЛЕН режим роботът работи с предварително определени скорости, съответстващи на стойностите на позицията на линията. В режим ACCL, MAX SPEED на робота се заменя с ACCL SPEED на предварително определени етапи на пистата. Това може да се използва за ускоряване на робота в прави участъци от пистата. Следните настройки са достъпни само ако RUN MODE е зададен като ACCL.
  9. LAP DISTANCE: За да зададете общата дължина на състезателната писта.
  10. ACCL SPEED: За да настроите скоростта на ускорение на робота. Тази скорост замества MAX SPEED на различни етапи на пистата, както е определено по -долу.
  11. НЕ. НА ЕТАПИ: За да зададете броя етапи, в които се използва ACCL SPEED.
  12. ЕТАП 1: За да зададете началните и крайните разстояния на етапа, в който MAX SPEED е заменен с ACCL SPEED. За всеки етап началното и крайното разстояние могат да бъдат зададени отделно.

Стъпка 20: Калибриране на линейния сензор

Image
Image

Калибрирането на линейния сензор е процесът, чрез който се определя праговата стойност на всеки от 16 -те сензора. Тази прагова стойност се използва, за да се реши дали даден сензор е над линията или не. За да определим праговите стойности на 16 сензора, използваме един от двата метода.

СРЕДЕН ФИЛТЪР: При този метод линейните сензори се поставят над бялата повърхност и се вземат предварително определен брой показания на сензора за всичките 16 сензора. Определят се средните стойности на всичките 16 сензора. Същият процес се повтаря след поставянето на линейните сензори върху черната повърхност. Праговата стойност е средната стойност на средните стойности на черно -бели повърхности.

MIN MAX: При този метод стойностите на сензора се четат многократно, докато потребителят поиска да спре. Съхраняват се максималните и минималните стойности, открити от всеки сензор. Праговата стойност е средната стойност на минималните и максималните стойности.

Така получените прагови стойности се нанасят в диапазон от 0 до 1000.

Калибрирането на линейни сензори по метода MIN MAX е показано във видеото. След калибриране на линейните сензори данните могат да се визуализират, както е показано на снимката. Показва се следната информация.

  • 16-битово двоично представяне на позицията на линията с двоичен 1, показващ, че съответният линеен сензор е над линията, и двоичен 0, показващ, че линейният сензор е извън линията.
  • Брой от общия брой сензори, които са над линията.
  • Минимални, максимални и сензорни стойности (необработени и нормализирани) на 16 -те сензора, един сензор наведнъж.
  • Позиция на линията в диапазона от -7500 до +7500.

След това минималните и максималните стойности на линейния сензор се съхраняват в EEPROM.

Стъпка 21: Тестово изпълнение

Image
Image

Видеоклипът е от тестово бягане, при което роботът е програмиран да спре, след като измине една обиколка.

Стъпка 22: Заключителни мисли и подобрения

Състезание за роботи
Състезание за роботи

Хардуерът, който е сглобен за изграждането на този робот, не се използва напълно от програмата, която го изпълнява. Могат да се направят много подобрения в частта от програмата. Сензорите за движение на подпората не се използват в момента за определяне на позиция и ориентация. Данните за одометрията от енкодерите могат да се комбинират с данните за ориентация от щита за поддръжка, за да се определи точно позицията и посоката на робота. След това тези данни могат да бъдат използвани за програмиране на робота за изучаване на пистата в множество обиколки. Насърчавам ви да експериментирате в тази част и да споделите резултатите си.

Късмет.

Състезание за роботи
Състезание за роботи

Втора награда в конкурса за роботи

Препоръчано: