Mundarija:
- 1 -qadam: BU LOYIHA HAQIDA
- 2 -qadam: Uskuna kerak
- 3 -qadam: O'chirish va ulanishlar
- 4 -qadam: Ishlash
- 5 -qadam: KOD
- 6 -qadam: VIDEO KO'RSATISH
Video: Arduino va ESP8266 o'rtasidagi MPU6050 yordamida HC-12: 6 bosqichli servolarni boshqarish
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:25
Ushbu loyihada biz Arduino UNO va ESP8266 NodeMCU o'rtasidagi aloqa uchun mpu6050 va HC-12 yordamida servo dvigatel holatini boshqaramiz.
1 -qadam: BU LOYIHA HAQIDA
Bu HC-12 RF-moduliga asoslangan boshqa IoT loyihasi. Bu erda arduino -dan imu (mpu6050) ma'lumotlari servo dvigatelni boshqarish uchun ishlatiladi (Nodemcu bilan bog'langan). Bu erda ma'lumotlarni vizualizatsiya qilish arduino tomonida ham amalga oshiriladi, u erda mpu6050 pitch ma'lumotlari (x o'qi atrofida aylanishi) ishlov berish eskizi bilan tasvirlanadi (keyinroq muhokama qilinadi). Asosan, bu loyiha Arduino va ESP8266 nodemcu bilan Imu va Servo boshqaruvining turli jihatlarini eslab qolish uchun bir oz isinishdir.
MAKSAD
Maqsad aniq, biz O'XH pitch qiymatidan foydalanib, Servo dvigatelining holatini boshqaramiz. Va bu qadam va sinxronlangan vosita pozitsiyasi "Processing" yordamida tasvirlanadi.
2 -qadam: Uskuna kerak
NodeMCU ESP8266 12E Wifi moduli
Lehimsiz non paneli
Jumper sim
MPU6050 accelo+gyro
HC-12 RF modullari (juftlik)
SG90 Servo dvigateli
3 -qadam: O'chirish va ulanishlar
Ulanishlar to'g'ridan -to'g'ri. Siz Nodemcu -ning 3,3V kuchlanishli servosini quvvatlantirishingiz mumkin. Agar siz nodemcu pimida shunchalik kuchlanishga ega bo'lsa, siz Vinni servo quvvat bilan ta'minlash uchun ham ishlatishingiz mumkin. Ammo ko'pchilik Lolin platalarida Vinda 5V yo'q (ishlab chiqaruvchiga bog'liq).
Ushbu sxemalar EasyADA yordamida tuzilgan.
4 -qadam: Ishlash
Arduino eskizi boshlanishi bilan u burchak burchagini (-45 dan 45 gacha) Nodemcu ning hc12 qabul qiluvchisiga yuboradi, u 0 dan 180 gradusli Servo pozitsiyasiga ega. Bu erda biz burchak burchagini -45 dan +45 darajagacha ishlatdik, shunda biz uni Servo pozitsiyasiga osongina joylashtiramiz.
Endi siz nima uchun xarita usulini quyidagicha ishlatishimiz mumkin deb o'ylayapsiz:-
int pos = xarita (val, -45, 45, 0, 180);
Chunki hc12 uzatuvchi tomonidan yuborilgan manfiy burchak quyidagicha qabul qilinadi:
Birinchi bo'lim: (T) 0 dan 45 => 0 dan 45 gacha (R)
Ikkinchi bo'lim: (T) -45 dan -1 => 255 dan 210 (R)
Shunday qilib, siz uni 0 dan 180 gacha xaritaga kiritishingiz kerak
agar (val> = 0 && val <= 45) pos = (val*2) +90; boshqa pos = (val-210)*2;
Men ahamiyatsiz xato tufayli xarita usulidan qochaman. Siz buni sinab ko'rishingiz va u siz bilan ishlashini izohlashingiz mumkin
if (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); else pos = xarita (val, 255, 210, 0, 90); // 4 -argument 2 bo'lishi mumkin (tekshirishingiz mumkin)
MPU6050 qadam burchagi hisobi
Men IMUdan xom ma'lumotlarni berishga asoslangan MPU6050_tockn kutubxonasidan foydalanayapman.
int pitchAngle = mpu6050.getAngleX ()
Bu bizga x o'qi atrofida aylanish burchagini beradi. Rasmda ko'rib turganingizdek, imu non taxtasiga vertikal ravishda joylashtirilgan, shuning uchun qadam va rulon bilan adashmang. Aslida siz har doim o'qning kesilgan taxtasida bosilganini ko'rishingiz kerak.
Ushbu kutubxona orqali siz ma'lum operatsiyalarni bajarish uchun maxsus registrlarni o'qishning ichki elektronikasi haqida qayg'urmasligingiz kerak. Siz faqat ishni aniqlaysiz va siz bajarasiz!
Btw, agar siz burchakni o'zingiz hisoblamoqchi bo'lsangiz. Siz buni quyidagicha osongina qilishingiz mumkin:
#qo'shing
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 (haqiqiy); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (noto'g'ri); Wire.requestFrom (MPU6050_addr, 14, to'g'ri); 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 = xarita (AcX, minVal, maxVal, -90, 90); int yAng = xarita (AcY, minVal, maxVal, -90, 90); int zAng = xarita (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); }
Biroq, burchakni olish uchun siz shuncha kodni yozishingiz shart emas. Siz sahna ortidagi faktlarni bilishingiz kerak, lekin boshqa odamlar kutubxonasidan foydalanish ko'plab loyihalarda juda samarali. Quyidagi havoladan ko'proq filtrlangan ma'lumotlarni olish uchun ushbu imu va boshqa tasdiqlar haqida o'qishingiz mumkin: Explore-mpu6050.
Mening arduino kodim uzatish uchida MPU6050_tockn kutubxonasi yordamida atigi 30 ta satrdan iborat, shuning uchun IMU funksiyasiga ba'zi asosiy o'zgarishlar kerak bo'lmasa kutubxonadan foydalanish yaxshi. Jeff Rowbergning I2Cdev nomli kutubxonasi, agar siz O'Ining DMP (Raqamli harakat protsessori) yordamida filtrlangan ma'lumotlarni olishni xohlasangiz, juda foydali bo'ladi.
Qayta ishlash bilan integratsiya
Bu erda ishlov berish MPU6050-dan olingan xom ma'lumotlarga ko'ra hisoblangan IMU x o'qi haqidagi aylanish ma'lumotlarini vizualizatsiya qilish uchun ishlatiladi. Biz kiruvchi xom ma'lumotlarni SerialEvent -ga quyidagi tarzda olamiz:
bekor serialEvent (Serial myPort) {
inString = myPort.readString (); harakat qilib ko'ring // // ma'lumotlarni tahlil qilish // println (inString); String dataStrings = split (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0]. teng ("RAW")) {uchun (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i+1]); }} boshqa {println (inString); }}} catch (Exception e) {println ("Exception Exception"); }}
Bu erda siz ushbu bosqichda biriktirilgan rasmda vizualizatsiyani ko'rishingiz mumkin. Nodemcu oxirida olingan pozitsiya ma'lumotlari rasmda ko'rsatilgandek ketma -ket monitorda ham ko'rinadi.
5 -qadam: KOD
Men github omborini biriktirdim. Siz uni loyihalaringizda ishlatish uchun klonlashingiz va ajratishingiz mumkin.
mening kodim
Repoda transmitter (arduino+IMU) va qabul qiluvchi (Nodemcu+Servo) uchun 2 ta arduino eskiz mavjud.
Va bitta ishlov berish eskizi. Agar bu sizning loyihangizga yordam bersa, repo -ni belgilang.
Bu ko'rsatmali, R- qabul qiluvchi va T- uzatuvchi
6 -qadam: VIDEO KO'RSATISH
Videoni ertaga qo'shaman. Xabar olish uchun meni kuzatib boring.
Hammaga rahmat!
Tavsiya:
Bosqichli motorli boshqariladigan lokomotiv modeli - Bosqichli motor aylanadigan kodlovchi sifatida: 11 qadam (rasmlar bilan)
Bosqichli motorli boshqariladigan lokomotiv modeli | Bosqichli dvigatel aylanuvchi kodlovchi sifatida: Oldingi ko'rsatmalarni birida biz step motorini aylanuvchi kodlovchi sifatida ishlatishni o'rgandik. Ushbu loyihada biz Arduino mikrokontrolleridan foydalanib, lokomotiv modelini boshqarish uchun aylanadigan aylanadigan enkoderdan foydalanamiz. Shunday qilib, fu holda
Bosqichli dvigatel bilan boshqariladigan step motor - Bosqichli motor aylanadigan kodlovchi sifatida: 11 qadam (rasmlar bilan)
Bosqichli dvigatel bilan boshqariladigan step motor | Bosqichli dvigatel aylanadigan kodlovchi sifatida: Bir nechta qadam dvigatellari yotib, biror narsa qilishni xohlayaptimi? Ushbu yo'riqnomada, Arduino mikrokontroller yordamida boshqa step motorining holatini nazorat qilish uchun qadamli motorni aylanuvchi kodlovchi sifatida ishlatamiz. Xo'sh, boshqa ko'p gapirmasdan, keling
Bosqichli motorni potentsiometr yordamida qanday boshqarish mumkin: 5 qadam
Bosqichli motorni potentsiometr yordamida qanday boshqarish kerak. Men sizga ko'rsataman, potentsiometr yordamida qadam dvigatelining holatini qanday boshqarishni. Shunday qilib, boshlaylik
Arduino yordamida ko'plab servolarni boshqaring!: 4 qadam (rasmlar bilan)
Arduino yordamida ko'plab servolarni boshqaring!: Avvaliga men bir narsani aytishim kerak. Menda chiroyli rasmlar yo'q edi. Shunday qilib, men bildr.blog saytidan rasmlar oldim, bilamizki, Arduino UNOda ko'p servolarni boshqarish uchun pwm pinlari ko'p emas. Shunday qilib, biz ko'pincha arduino tomonidan ko'proq servolarni boshqarish muammosiga duch kelamiz
Arduino va rok -guruh gitara yordamida servolarni boshqarish: 5 qadam
Arduino va Rock Band gitara yordamida Servo -ni boshqaring: bu men ko'rsatgan birinchi yomon ko'rsatuv