Мазмұны:
- 1 -қадам: БҰЛ ЖОБА ТУРАЛЫ
- 2 -қадам: Жабдық қажет
- 3 -қадам: Тізбек және қосылыстар
- 4 -қадам: ЖҰМЫС
- 5 -қадам: КОД
- 6 -қадам: ВИДЕО КӨРСЕТУ
Бейне: HC-12 көмегімен Arduino мен ESP8266 арасындағы MPU6050 көмегімен сервисті басқару: 6 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:25
Бұл жобада біз Arduino UNO мен ESP8266 NodeMCU арасындағы байланыс үшін mpu6050 және HC-12 көмегімен сервоқозғалтқыштың орнын басқарамыз.
1 -қадам: БҰЛ ЖОБА ТУРАЛЫ
Бұл HC-12 RF-модуліне негізделген басқа IoT жобасы. Мұнда arduino -дан imu (mpu6050) деректері сервоприводты басқару үшін қолданылады (Nodemcu -мен байланысты). Мұнда деректерді визуализация mpu6050 қадамдық деректері (x осі бойынша айналу) өңделетін эскизбен бейнеленетін arduino жағында орындалады (кейінірек талқыланады). Негізінен бұл жоба Arduino және ESP8266 nodemcu көмегімен Imu & Servo басқарудың әр түрлі аспектілерін еске түсіру үшін аздап қыздырады.
МАҚСАТТЫ
Мұның айқын мақсаты - біз IMO қадамдық мәнін қолдана отырып, Servo қозғалтқышының жағдайын басқарамыз. Бұл қадам мен синхронды қозғалтқыштың позициясы бірге өңделеді.
2 -қадам: Жабдық қажет
NodeMCU ESP8266 12E Wifi модулі
Піспейтін нан тақтасы
Өткізгіш сым
MPU6050 accelo+гиро
HC-12 RF модульдері (жұп)
SG90 Servo қозғалтқышы
3 -қадам: Тізбек және қосылыстар
Қосылымдар тікелей. Сервоға Nodemcu 3,3 В кернеуін қосуға болады. Сондай -ақ, егер сіздің түйініңізде түйреуіштің кернеуі соншалықты көп болса, сіз сервоға қуат беру үшін Vin қолдана аласыз. Бірақ Lolin тақталарының көпшілігінде Винде 5В болмайды (өндірушіге байланысты).
Бұл схемалар EasyADA көмегімен жасалған.
4 -қадам: ЖҰМЫС
Ардуино эскизі бастала салысымен, ол бұрыштың бұрышын (-45 -тен 45 -ке дейін) Nodemcu -дің hc12 қабылдағышына жібереді, олар 0 -ден 180 градусқа дейін Servo позициясымен салыстырылады. Мұнда біз бұрыштың бұрышын -45 -тен +45 градусқа дейін қолдандық, осылайша оны сервистік позицияға оңай салыстыруға болады.
Енді сіз неге біз карта әдісін келесідей қолдана аламыз деп ойлайсыз:-
int pos = map (val, -45, 45, 0, 180);
Hc12 таратқышы жіберетін теріс бұрыш келесі түрде қабылданады:
1 -тайм: (T) 0 -ден 45 -ке дейін> 0 -ден 45 -ке дейін (R)
Екінші тайм: (T) -45 --1 => 255 -210 (R)
Сондықтан сіз оны 0 -ден 180 -ге дейін салыстыруыңыз керек
if (val> = 0 && val <= 45) pos = (val*2) +90; else pos = (val-210)*2;
Мен қателікке байланысты карта әдісінен аулақпын. Сіз мұны көре аласыз және ол сізбен жұмыс істейтініне түсініктеме бере аласыз
if (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); else pos = map (val, 255, 210, 0, 90); // 4 -аргумент 2 болуы мүмкін (тексере аласыз)
MPU6050 қадамының бұрышын есептеу
Мен MPU6050_tockn кітапханасын қолданамын, ол IMU -дан шикі деректерді беруге негізделген.
int pitchAngle = mpu6050.getAngleX ()
Бұл бізге x осінің айналу бұрышын береді. Сіз суретте көріп тұрғандай, менің иму нан тақтасында тігінен орналасқан, сондықтан қадам мен роллмен шатастырмаңыз. Іс жүзінде сіз әрқашан осьтің үзіліс тақтасында басылғанын көруіңіз керек.
Бұл кітапхана арқылы сізге белгілі бір жұмыс үшін арнайы регистрлерді оқудың ішкі электроникасы туралы алаңдаудың қажеті жоқ. сіз тек жұмысты көрсетесіз және сіз аяқталды!
Егер сіз бұрышты өзіңіз есептегіңіз келсе, btw. Сіз мұны келесідей оңай жасай аласыз:
#қосу
const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; void setup () {Wire.begin (); Wire.beginTransmission (MPU6050_addr); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (шын); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (жалған); Wire.requestFrom (MPU6050_addr, 14, шын); AcX = Wire.read () << 8 | Wire.read (); AcY = Wire.read () << 8 | Wire.read (); AcZ = Wire.read () << 8 | Wire.read (); Temp = Wire.read () << 8 | Wire.read (); GyroX = Wire.read () << 8 | Wire.read (); GyroY = Wire.read () << 8 | Wire.read (); GyroZ = Wire.read () << 8 | Wire.read ();
int xAng = карта (AcX, minVal, maxVal, -90, 90); int yAng = карта (AcY, minVal, maxVal, -90, 90); int zAng = карта (AcZ, minVal, maxVal, -90, 90); x = RAD_TO_DEG * (atan2 (-yAng, -zAng)+PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng)+PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng)+PI); Serial.print («AngleX =»); // Pitch Serial.println (x); Serial.print («AngleY =»); // Roll Serial.println (y); Serial.print («AngleZ =»); // Yaw Serial.println (z); }
Бұрышты алу үшін сізге көп кодты жазудың қажеті жоқ. Сіз сахнадағы фактілерді білуіңіз керек, бірақ басқа адамдардың кітапханасын пайдалану көптеген жобаларда өте тиімді. Сіз келесі сілтеме бойынша сүзілген деректерді алу үшін осы imu және басқа келісімдер туралы оқи аласыз: Explore-mpu6050.
Менің arduino коды MPU6050_tockn кітапханасының көмегімен тек 30 жолдан тұрады, сондықтан IMU функционалдығына маңызды өзгерістер қажет болмаса, кітапхананы пайдалану жақсы. Джефф Роугбергтің I2Cdev атты кітапханасы, егер сіз IMU DMP (цифрлық қозғалыс процессоры) көмегімен кейбір сүзгіленген деректерді алғыңыз келсе, өте пайдалы болады.
Өңдеумен интеграция
Мұнда Өңдеу MPU6050-ден келетін шикізат деректері бойынша есептелген IMU х осі туралы айналмалы деректерді визуализациялау үшін қолданылады. Біз SerialEvent ішіндегі кіріс деректерді келесі түрде аламыз:
жарамсыз serialEvent (Serial myPort) {
inString = myPort.readString (); көріңіз {// Деректерді талдау // println (inString); Жол dataStrings = бөліну (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0]. teng («RAW»)) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i+1]); }} басқа {println (inString); }}} catch (Ерекше д) {println («Ұсталған ерекшелік»); }}
Мұнда сіз осы қадамда бекітілген суретте визуализацияны көре аласыз. Nodemcu соңында алынған позиция деректері суретте көрсетілгендей сериялық мониторда да көрінеді.
5 -қадам: КОД
Мен github репозиторийін тіркедім. Сіз оны жобаларыңызда пайдалану үшін клондап, айыра аласыз.
my_code
Репода таратқышқа (arduino+IMU) және қабылдағышқа (Nodemcu+Servo) арналған 2 arduino эскизі бар.
Және бір өңдеу нобайы. Егер бұл сіздің жобаңызға көмектессе, репоға жұлдызша қойыңыз.
Бұл нұсқаулықта, R- қабылдағыш және Т- таратқыш
6 -қадам: ВИДЕО КӨРСЕТУ
Видеоны ертең тіркеймін. Хабарлама алу үшін мені қадағалаңыз.
Баршаңызға рахмет!
Ұсынылған:
DC MOTOR қолмен қимылды басқару жылдамдығы мен бағытын Arduino көмегімен басқару: 8 қадам
DC MOTOR қолмен қимылдарды басқару жылдамдығы мен бағытын Arduino көмегімен басқару: Бұл оқулықта біз arduino мен Visuino көмегімен қолмен ыммен тұрақты ток қозғалтқышты басқаруды үйренеміз. Бейнені қараңыз
RS485 Arduino мен Raspberry Pi арасындағы: 7 қадам
RS485 Arduino мен Raspberry Pi арасында: Мектеп үшін маған жоба жасау керек. Мен таңқурай пи арқылы басқарылатын жылыжайдың ақылды контроллерін жасауды шештім. Сенсорлар arduino uno арқылы жұмыс істейтін болады. Келесі айларда мен бұл жобаның орындалуын жариялаймын
555 таймер IC көмегімен сервисті басқару: 3 қадам
555 Таймер IC көмегімен сервисті басқару: Менің бірінші нұсқаулықым «Аналогтық джойстикті қолдану арқылы сервистерді басқару» болды. Содан бері мен бірнеше сервисті қажет ететін жобалармен бөлістім, мысалы: роботтық қол және бет іздеуші. Біз әрқашан серверлерді басқару үшін микроконтроллерді қолдандық. Бірақ
Arduino мен өнеркәсіптік құрылғылар арасындағы Modbus TCP байланысы: 3 қадам
Arduino мен өндірістік құрылғылар арасындағы Modbus TCP байланысы: өнеркәсіптік HMI бар Arduino тақтасын басқарудың және оны Modbus TCP байланысымен өнеркәсіптік желіге қосудың индустриялық әдісі
WiFi мен IR қашықтан басқару пульті мен Android қосымшасын қолданатын NodeMCU мен IR қабылдағышымен 8 релелік басқару: 5 қадам (суреттермен)
WiFi мен IR қашықтан басқару пульті мен Android қосымшасын пайдаланатын NodeMCU мен IR қабылдағышымен 8 релелік басқару: wifi мен қашықтан және андроид қосымшасы арқылы nodemcu мен IR қабылдағышты қолданатын 8 релелік қосқышты басқару. Қашықтан басқару құралы wifi қосылымына тәуелсіз жұмыс істейді. МҰНДА