- MPU6050 Жироскопичен и акселерометър сензор
- Flex сензор
- Подготовка за 3D отпечатаната роботизирана ARM:
- Необходими компоненти:
- Електрическа схема:
- Монтиране на MPU6050 и Flex Sensor към ръкавици
- Програмиране на Arduino Nano за роботизирана ръка
- Работа с контролирана с жестове роботизирана ръка с помощта на Arduino
Роботизираното оръжие е едно от завладяващите инженерни творения и винаги е очарователно да наблюдаваш как тези неща се накланят и придвижват, за да се правят сложни неща, точно както човешката ръка. Тези роботизирани оръжия често могат да бъдат намерени в индустриите на поточната линия, извършващи интензивна механична работа като заваряване, пробиване, боядисване и т.н. По-рано 3D отпечатахме роботизирана ръка и изградихме роботизирана ръка за избор и поставяне с помощта на микроконтролера ARM7. Отново ще използваме същата 3D отпечатана роботизирана ръка, за да направим роботизирана ARM с ръчен контрол, използвайки Arduino Nano, жироскоп MPU6050 и гъвкав сензор.
Тази 3D отпечатана роботизирана позиция на ръката се контролира чрез ръчна ръкавица, която е прикрепена с MPU6050 Жироскоп и гъвкав сензор. Сензорът Flex се използва за управление на серво серво на Robotic Arm, а MPU6050 се използва за движение на роботи по оста X и Y. Ако нямате принтер, можете също да изградите ръката си с обикновен картон, както създадохме за нашия проект за роботизирана ръка Arduino. За вдъхновение можете да се обърнете и към Record and Play Robotic Arm, който създадохме по-рано с помощта на Arduino.
Преди да влезем в подробности, първо, нека да научим за сензора MPU6050 и сензора за гъвкавост.
MPU6050 Жироскопичен и акселерометър сензор
MPU6050 се основава на технологията Micro-Mechanical Systems (MEMS). Този сензор има 3-осен акселерометър, 3-осен жироскоп и вграден температурен сензор. Може да се използва за измерване на параметри като ускорение, скорост, ориентация, изместване и др. Преди това сме свързвали MPU6050 с Arduino и Raspberry pi и също така сме изградили няколко проекта като него - Самобалансиращ се робот, Arduino Digital Protractor и Arduino Inclinometer.
Характеристики на сензор MPU6050:
- Комуникация: I2C протокол с конфигурируем I2C адрес
- Входно захранване: 3-5V
- Вграденият 16-битов ADC осигурява висока точност
- Вграденият DMP осигурява висока изчислителна мощност
- Може да се използва за взаимодействие с други I2C устройства като магнитометър
- Вграден температурен сензор
Подробности за извеждане на MPU6050:
ПИН | Употреба |
Vcc | Осигурява мощност за модула, може да бъде от + 3V до + 5V. Обикновено се използва + 5V |
Земя | Свързан със земята на системата |
Сериен часовник (SCL) | Използва се за осигуряване на тактов импулс за I2C комуникация |
Серийни данни (SDA) | Използва се за прехвърляне на данни чрез I2C комуникация |
Спомагателни серийни данни (XDA) | Може да се използва за свързване на други I2C модули с MPU6050 |
Спомагателен сериен часовник (XCL) | Може да се използва за свързване на други I2C модули с MPU6050 |
AD0 | Ако за един MCU се използват повече от един MPU6050, тогава този щифт може да се използва за промяна на адреса |
Прекъсване (INT) | Прекъснете щифта, за да покажете, че данните са достъпни за четене от MCU |
Flex сензор
Flex сензорите не са нищо друго освен променлив резистор. Съпротивлението на гъвкавия сензор се променя, когато сензорът е огънат. Те обикновено се предлагат в два размера 2,2 инча и 4,5 инча.
Защо използваме гъвкави сензори в нашия проект?
В този робот, управляван с жестове, се използва гъвкав сензор за управление на грайфера на роботизираното рамо. Когато гъвкавият сензор на ръчната ръкавица е огънат, сервомоторът, прикрепен към грайфера, се върти и грайферът се отваря.
Flex сензорите могат да бъдат полезни в много приложения и сме изградили няколко проекта, използващи Flex сензор като игрови контролер, генератор на тонове и т.н.
Подготовка за 3D отпечатаната роботизирана ARM:
3D отпечатаната роботизирана ръка, използвана в този урок, е направена, следвайки дизайна, даден от EEZYbotARM, който се предлага в Thingiverse. Пълната процедура за изработване на 3D отпечатано роботизирано рамо и детайла за сглобяване с видео е представена в Thingiverse link, който е споделен по-горе.
По-горе е изображението на моята 3D отпечатана роботизирана ръка след сглобяване с 4 серво мотора.
Необходими компоненти:
- Arduino Nano
- Flex сензор
- 10k резистор
- MPU6050
- Ръкавици за ръце
- Свързване на проводници
- Макет
Електрическа схема:
Следващото изображение показва верижните връзки за роботизирана ръка, базирана на Arduino .
Верижна връзка между MPU6050 и Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Верижна връзка между сервомотори и Arduino Nano:
Arduino Nano |
СЕРВО ДВИГАТЕЛ |
Захранващ адаптер |
D2 |
Серво 1 оранжев (ШИМ щифт) |
- |
D3 |
Серво 2 портокал (PWM щифт) |
- |
D4 |
Серво 3 портокал (PWM щифт) |
- |
D5 |
Servo 4 Orange (PWM щифт) |
- |
GND |
Серво 1,2,3,4 кафяв (GND щифт) |
GND |
- |
Серво 1,2,3,4 червено (+ 5V щифт) |
+ 5V |
А шнур сензор съдържа две игли. Не съдържа поляризирани клеми. Така че щифтът един P1 е свързан към аналоговия щифт A0 на Arduino Nano с издърпващ резистор от 10k и щифтът два P2 е заземен към Arduino.
Монтиране на MPU6050 и Flex Sensor към ръкавици
Монтирахме MPU6050 и Flex Sensor върху ръчна ръкавица. Тук се използва жична връзка за свързване на ръкавица и роботизирана ръка, но тя може да бъде направена безжична чрез RF връзка или Bluetooth връзка.
След всяка връзка финалната настройка за контролирана с жестове роботизирана ръка изглежда като изображението по-долу:
Програмиране на Arduino Nano за роботизирана ръка
Както обикновено, пълен код заедно с работещо видео е даден в края на този урок. Тук са обяснени няколко важни реда код.
1. Първо, включете необходимите библиотечни файлове. Библиотеката Wire.h се използва за I2C комуникация между Arduino Nano и MPU6050 и servo.h за управление на серво мотора.
#include
2. След това се декларират обектите за серво на класа. Тъй като използваме четири серво мотора, се създават четири обекта като servo_1, servo_2, servo_3, servo_4.
Серво серво_1; Серво серво_2; Серво серво_3; Серво серво_4;
3. След това се декларира I2C адресът на MPU6050 и променливите, които ще се използват.
const int MPU_addr = 0x68; // MPU6050 I2C Адрес int16_t axis_X, axis_Y, axis_Z; int minVal = 265; int maxVal = 402; двойно х; двойно у; двойно Z;
4. След това в настройката за празнота се задава скорост на предаване от 9600 за последователна комуникация.
Serial.begin (9600);
И I2C комуникацията между Arduino Nano и MPU6050 е установена:
Wire.begin (); // Инициализиране на I2C Communication Wire.beginTransmission (MPU_addr); // Започнете комуникация с MPU6050 Wire.write (0x6B); // Пише за регистрация 6B Wire.write (0); // Записва 0 в 6B Регистър за нулиране Wire.endTransmission (вярно); // Приключва предаването на I2C
Също така, четири PWM щифта са дефинирани за връзки на серво мотора.
servo_1.attach (2); // Напред / назад_мотор servo_2.attach (3); // Up / Down_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Ляв / Десен_Мотор
5. След това във функцията void loop отново установете I2C връзка между MPU6050 и Arduino Nano и след това започнете да четете данните X, Y, Z-Axis от регистъра на MPU6050 и ги съхранявайте в съответните променливи.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Започваме с regsiter 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, вярно); // Четене на 14 регистъра axis_X = Wire.read () << 8-Wire.read (); ос_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
След това картографирайте минималната и максималната стойност на данните за оста от сензора MPU6050 в диапазона от -90 до 90.
int xAng = карта (ос_Х, minVal, maxVal, -90,90); int yAng = карта (ос_Y, minVal, maxVal, -90,90); int zAng = карта (ос_Z, minVal, maxVal, -90,90);
След това използвайте следната формула, за да изчислите стойностите x, y, z от 0 до 360.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng) + PI);
След това прочетете аналоговите изходни данни на сензора за гъвкавост на щифта A0 на Arduino Nano и според цифровата стойност на гъвкавия сензор задайте серво ъгъла на захвата Така че, ако данните на гъвкавия сензор са по-големи от 750, ъгълът на сервомотора на грайфера е 0 градуса, а ако е по-малък от 750, това е 180 градуса.
int грайфер; int flex_sensorip = analogRead (A0); ако (flex_sensorip> 750) { захват = 0; } else { захват = 180; } servo_3.write (грайфер);
След това движението на MPU6050 по оста X от 0 до 60 се картографира по отношение на 0 до 90 градуса за движението напред / назад на сервомотора на роботизираното рамо.
if (x> = 0 && x <= 60) { int mov1 = map (x, 0,60,0,90); Serial.print ("Движение във F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
И движението на MPU6050 по оста X от 250 до 360 е картографирано по отношение на 0 до 90 градуса за роботизираното рамо на серво мотора НАГОРЕ / НАДОЛУ.
иначе ако (x> = 300 && x <= 360) { int mov2 = map (x, 360,250,0,90); Serial.print ("Движение нагоре / надолу ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
Движението на MPU6050 по оста Y от 0 до 60 е картографирано по отношение на 90 до 180 градуса за лявото движение на сервомотора на роботизираното рамо.
if (y> = 0 && y <= 60) { int mov3 = map (y, 0,60,90,180); Serial.print ("Движение вляво ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Движението на MPU6050 в оста Y от 300 до 360 е картографирано по отношение на 0 до 90 градуса за дясното движение на сервомотора на роботизираното рамо.
иначе ако (y> = 300 && y <= 360) { int mov3 = map (y, 360 300,90,0); Serial.print ("Движение вдясно ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Работа с контролирана с жестове роботизирана ръка с помощта на Arduino
Накрая качете кода в Arduino Nano и носете ръчната ръкавица, монтирана с MPU6050 & Flex Sensor.
1. Сега преместете ръката надолу, за да преместите роботизираното рамо напред и се придвижете нагоре, за да преместите роботизираното рамо нагоре.
2. След това наклонете ръката наляво или надясно, за да завъртите роботизираната ръка наляво или надясно.
3. Огънете гъвкавия кабел, прикрепен с пръста на ръчната ръкавица, за да отворите грайфера и след това го освободете, за да го затворите.
Цялостната работа е демонстрирана във видеото, дадено по-долу.