Satura rādītājs:
- 1. darbība: PAR ŠO PROJEKTU
- 2. darbība. Nepieciešama aparatūra
- 3. darbība: ķēde un savienojumi
- 4. solis: DARBĪBA
- 5. darbība: KODĒT
- 6. darbība: VIDEO DEMONSTRĀCIJA
Video: Servo vadīšana, izmantojot MPU6050 starp Arduino un ESP8266 ar HC-12: 6 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
Šajā projektā mēs kontrolējam servomotora stāvokli, izmantojot mpu6050 un HC-12, lai sazinātos starp Arduino UNO un ESP8266 NodeMCU.
1. darbība: PAR ŠO PROJEKTU
Tas ir vēl viens IoT projekts, kura pamatā ir RF-12 RF modulis. Šeit servu motora (savienots ar Nodemcu) vadīšanai tiek izmantoti imu (mpu6050) dati no arduino. Šeit datu vizualizācija tiek veikta arī arduino pusē, kur mpu6050 piķa dati (rotācija ap x asi) tiek vizualizēti ar apstrādes skici (aplūkota vēlāk). Būtībā šis projekts ir tikai nedaudz iesildīšanās, lai atcerētos dažādus Imu & Servo vadības aspektus ar Arduino un ESP8266 nodemcu.
MĒRĶIS
Šī diezgan skaidrā mērķis ir kontrolēt Servo motora stāvokli, izmantojot IMU piķa vērtību. Un kopā šis piķis un sinhronizētā motora pozīcija tiek vizualizēta, izmantojot apstrādi.
2. darbība. Nepieciešama aparatūra
NodeMCU ESP8266 12E Wifi modulis
Maizes dēlis bez lodēšanas
Džempera vads
MPU6050 accelo+žiroskops
HC-12 RF moduļi (pāri)
Servomotors SG90
3. darbība: ķēde un savienojumi
Savienojumi ir taisni uz priekšu. Jūs varat darbināt servo ar 3,3 V Nodemcu. Jūs varat arī izmantot Vin, lai darbinātu servo, ja jūsu nodemcu ir tik daudz sprieguma šajā tapā. Bet lielākajai daļai Lolin dēļu nav 5V pie Vin (atkarīgs no ražotāja).
Šīs shēmas ir izgatavotas, izmantojot EasyADA.
4. solis: DARBĪBA
Tiklīdz arduino skice ir sākusies, tā nosūta slīpuma leņķi (diapazonā no -45 līdz 45) uz Nodemcu hc12 uztvērēju, kas tiek kartēts ar 0 līdz 180 grādu servo pozīciju. Šeit mēs izmantojām slīpuma leņķi no -45 līdz +45 grādiem, lai to varētu viegli kartēt servo pozīcijā.
Tagad jūs domājat, kāpēc mēs varam vienkārši izmantot kartes metodi šādi:-
int pos = karte (val, -45, 45, 0, 180);
Tā kā raidītāja hc12 sūtītais negatīvais leņķis tiek uztverts kā:
1. puse: (T) 0 līdz 45 => 0 līdz 45 (R)
2. puse: (T) -45 līdz -1 => 255 līdz 210 (R)
Tātad jums tas ir jākartē līdz 0 līdz 180
ja (val> = 0 && val <= 45) pos = (val*2) +90; cits pos = (val-210)*2;
Es izvairos no kartes metodes kādas neatbilstošas kļūdas dēļ. Jūs varat to izmēģināt un komentēt, ka tas jums palīdz
ja (val> = 0 && val <= 45) pos = karte (val, 0, 45, 90, 180); else pos = karte (val, 255, 210, 0, 90); // 4. arguments var būt 2 (varat pārbaudīt)
MPU6050 soļa leņķa aprēķins
Es izmantoju MPU6050_tockn bibliotēku, kuras pamatā ir izejas datu sniegšana no IMU.
int pitchAngle = mpu6050.getAngleX ()
Tādējādi mēs iegūsim rotācijas leņķi ap x asi. Kā redzat attēlā, mans imu ir vertikāli novietots uz maizes dēļa, tāpēc nejaucieties ar piķi un rullīti. Patiesībā ass vienmēr ir jāredz uz sadalīšanas paneļa.
Izmantojot šo bibliotēku, jums nav jāuztraucas par iekšējo elektroniku, lasot īpašus reģistrus konkrētai darbībai. jūs norādāt tikai darbu un esat pabeidzis!
Btw, ja vēlaties pats aprēķināt leņķi. To var viegli izdarīt šādi:
#iekļaut
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 (true); Sērijas sākums (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (nepatiesa); Wire.requestFrom (MPU6050_addr, 14, true); 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 = karte (AcX, minVal, maxVal, -90, 90); int yAng = karte (AcY, minVal, maxVal, -90, 90); int zAng = karte (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); }
Bet, lai iegūtu leņķi, nav nepieciešams rakstīt tik daudz koda. Jums jāzina fakti aiz ainas, taču citu cilvēku bibliotēkas izmantošana ir ļoti efektīva daudzos projektos. Par šo imu un citām metodēm varat lasīt, lai iegūtu vairāk filtrētu datu, izmantojot šo saiti: Explore-mpu6050.
Manam arduino kodam pārraides galā ir tikai 30 rindas, izmantojot MPU6050_tockn bibliotēku, tāpēc bibliotēkas izmantošana ir laba, ja vien jums nav nepieciešamas dažas galvenās izmaiņas IMU funkcionalitātē. Bibliotēka ar nosaukumu Jeff Rowberg ar nosaukumu I2Cdev ir ļoti noderīga, ja vēlaties filtrēt datus, izmantojot IMU DMP (Digital Motion Processor).
Integrācija ar apstrādi
Šeit apstrādi izmanto, lai vizualizētu rotācijas datus par IMU x asi, kas aprēķināta pēc neapstrādātiem datiem, kas iegūti no MPU6050. Ienākošos neapstrādātos datus SerialEvent saņemam šādā veidā:
void serialEvent (Serial myPort) {
inString = myPort.readString (); try {// Parsēt datus // println (inString); String dataStrings = split (inString, ':'); ja (dataStrings.length == 2) {ja (dataStrings [0].equals ("RAW")) {par (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i+1]); }} else {println (inString); }}} catch (Izņēmums e) {println ("Noķertais izņēmums"); }}
Šeit jūs varat redzēt vizualizāciju šajā solī pievienotajā attēlā. Nodemcu galā saņemtie pozīcijas dati ir redzami arī sērijas monitorā, kā parādīts attēlā.
5. darbība: KODĒT
Esmu pievienojis github krātuvi. Varat to klonēt un izmantot, lai to izmantotu savos projektos.
my_code
Repo ietver 2 arduino skices raidītājam (arduino+IMU) un uztvērējam (Nodemcu+Servo).
Un viena apstrādes skice. Atzīmējiet repo ar zvaigznīti, ja tas palīdz jūsu projektā.
Šajā pamācībā, R- uztvērējs un T-raidītājs
6. darbība: VIDEO DEMONSTRĀCIJA
Rīt pievienošu video. Sekojiet man, lai saņemtu paziņojumu.
Paldies jums visiem!
Ieteicams:
2 servo vadīšana, izmantojot analogo kursorsviru: 5 soļi (ar attēliem)
2 servo vadīšana, izmantojot analogo kursorsviru.: Sveiki, puiši, šī ir mana pirmā pamācība, un šajā amatā es dalīšos, kā izmantot analogo kursorsviru, lai kontrolētu servos, izmantojot Arduino UNO. Es centīšos to izskaidrot pēc iespējas vienkāršāk, ceru, ka jums patīk to
7 segmentu LED displeja vadīšana, izmantojot tīmekļa serveri ESP8266: 8 soļi (ar attēliem)
7 segmentu LED displeja vadīšana, izmantojot ESP8266 tīmekļa serveri: manam projektam ir Nodemcu ESP8266, kas kontrolē 7 segmentu displeju, izmantojot http serveri, izmantojot html formu
RC servo vadīšana bez vadiem, izmantojot UDP: 3 soļi
RC servo vadīšana bezvadu režīmā, izmantojot UDP: Šajā projektā es vēlos izmantot savu iPhone, lai kontrolētu RC servos. Es izmantošu akselerometru, lai kontrolētu divus servos, izmantojot UDP savienojumu. Šis ir koncepcijas pierādījuma projekts, lai pārbaudītu, vai savienojums starp iPhone un perifēriju var sasniegt augstu
NodeMCU ESP8266 1.0 12E vadīšana, izmantojot Google Firebase: 4 soļi
NodeMCU ESP8266 1.0 12E vadīšana, izmantojot Google Firebase: Šajā kursā mēs izveidosim Android lietojumprogrammu, izveidosim Firebase datu bāzi un kontrolēsim NodeMCU ESP 8266 1.0 12E ar iepriekš minēto produktu koordinēšanu
Piekļuves punkts - stacijas sakari starp diviem ESP8266 MCU: 3 soļi
Piekļuves punkts - stacijas sakari starp diviem ESP8266 MCU: Sveiki, veidotāji! Iepriekšējā instrukcijā es izveidoju WiFi komunikāciju starp diviem ESP8266 MCU, izmantojot mājas WiFi maršrutētāju. Kā redzēju no komentāriem, ir veidotāji, kuri vēlētos izmantot ESP8266 MCU tālu no maršrutētāja diapazona. Tātad šeit ir bārs