Obsah:
- Krok 1: O TOMTO PROJEKTE
- Krok 2: Vyžaduje sa hardvér
- Krok 3: Obvod a pripojenia
- Krok 4: PRÁCA
- Krok 5: KÓD
- Krok 6: Demonštrácia videa
Video: Ovládanie serva pomocou MPU6050 medzi Arduino a ESP8266 pomocou HC-12: 6 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:58
V tomto projekte riadime polohu servomotora pomocou mpu6050 a HC-12 na komunikáciu medzi Arduino UNO a ESP8266 NodeMCU.
Krok 1: O TOMTO PROJEKTE
Je to ďalší projekt internetu vecí založený na RF-module HC-12. Tu sa údaje imu (mpu6050) z arduina používajú na ovládanie servomotora (prepojeného s Nodemcu). Tu sa vizualizácia údajov vykonáva aj na strane arduina, kde sú údaje o rozstupe mpu6050 (rotácia okolo osi x) vizualizované pomocou skici spracovania (diskutované neskôr). Tento projekt je v podstate len malou rozcvičkou na zapamätanie si rôznych aspektov ovládania Imu & Servo pomocou Arduino a ESP8266 nodemcu.
CIEĽ
Cieľ tohto celkom jasného je, Riadime polohu servomotora pomocou hodnoty tónu IMU. A všetky tieto výšky a synchronizovaná poloha motora sú vizualizované pomocou Processing.
Krok 2: Vyžaduje sa hardvér
NodeMCU ESP8266 12E Wifi modul
Nepájkovateľné nepájivé pole
Prepojovací drôt
MPU6050 accelo+gyro
RF moduly HC-12 (pár)
Servomotor SG90
Krok 3: Obvod a pripojenia
Pripojenia sú priame. Servo môžete napájať 3,3 V vášho Nodemcu. Môžete tiež použiť Vin na napájanie serva, ak má váš nodemcu na tomto kolíku toľko napätia. Väčšina dosiek Lolin však nemá na Vin 5 V (závisí od výrobcu).
Tieto schémy zapojenia sú vyrobené pomocou EasyADA.
Krok 4: PRÁCA
Hneď ako začne arduino skica, pošle uhol sklonu (v rozsahu od -45 do 45) do prijímača hc12 Nodemcu, ktorý sa zmapuje s polohou serva 0 až 180 stupňov. Tu sme použili uhol rozstupu od -45 do +45 stupňov, aby sme to mohli ľahko zmapovať do polohy servo.
Teraz premýšľate, prečo môžeme jednoducho použiť metódu mapy takto:-
int pos = mapa (val, -45, 45, 0, 180);
Pretože negatívny uhol odoslaný vysielačom hc12 je prijatý ako:
1. polčas: (T) 0 až 45 => 0 až 45 (R)
2. polovica: (T) -45 až -1 => 255 až 210 (R)
Musíte ho teda namapovať na 0 až 180 ako
ak (val> = 0 && val <= 45) pos = (val*2) +90; else pos = (val-210)*2;
Vyhýbam sa mapovej metóde kvôli nejakej irelevantnej chybe. Môžete to skúsiť a napísať, že to s vami funguje
if (val> = 0 && val <= 45) pos = mapa (val, 0, 45, 90, 180); else pos = mapa (val, 255, 210, 0, 90); // 4. argument môže byť 2 (môžete skontrolovať)
Výpočet uhla rozstupu MPU6050
Používam knižnicu MPU6050_tockn, ktorá je založená na poskytovaní nespracovaných údajov z IMU.
int pitchAngle = mpu6050.getAngleX ()
Tým získame uhol natočenia okolo osi x. Ako ste videli na obrázku, moja imu je vertikálne umiestnená na doske, takže si to nezamieňajte s výškou a rolkou. V skutočnosti by ste mali vždy vidieť osu vytlačenú na oddeľovacej doske.
Prostredníctvom tejto knižnice sa nemusíte starať o vnútornú elektroniku čítania konkrétnych registrov pre konkrétnu operáciu. zadáte iba prácu a ste hotoví!
Btw, ak chcete vypočítať uhol sami. Môžete to ľahko urobiť nasledovne:
#zahrnúť
const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; neplatné nastavenie () {Wire.begin (); Wire.beginTransmission (MPU6050_addr); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (true); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (false); Wire.requestFrom (MPU6050_addr, 14, true); AcX = Wire.read () << 8 | Wire.read (); AcY = Wire.read () << 8 | Wire.read (); AcZ = Wire.read () << 8 | Wire.read (); Teplota = 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 = mapa (AcX, minVal, maxVal, -90, 90); int yAng = mapa (AcY, minVal, maxVal, -90, 90); int zAng = mapa (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 ="); // Rozstup Serial.println (x); Serial.print ("AngleY ="); // Roll Serial.println (y); Serial.print ("AngleZ ="); // Yaw Serial.println (z); }
Na získanie uhla však nie je potrebné, aby ste napísali toľko kódu. Mali by ste vedieť fakty zo zákulisia, ale používanie knižnice iných ľudí je v mnohých projektoch veľmi účinné. O tomto imu a ďalších prístupoch k získaniu viac filtrovaných údajov si môžete prečítať z nasledujúceho odkazu: Explore-mpu6050.
Môj arduino kód na vysielacom konci má iba 30 riadkov pomocou knižnice MPU6050_tockn, takže používanie knižnice je dobré, pokiaľ nepotrebujete základné zmeny funkčnosti IMU. Knižnica s názvom I2Cdev od Jeffa Rowberga je veľmi užitočná, ak chcete filtrovať údaje pomocou DMP (digitálneho pohybového procesora) IMU.
Integrácia so spracovaním
Tu sa spracovanie používa na vizualizáciu rotačných údajov okolo osi x IMU vypočítaných z nespracovaných údajov pochádzajúcich z MPU6050. Prichádzajúce nespracované údaje v SerialEvent prijímame nasledujúcim spôsobom:
void serialEvent (Serial myPort) {
inString = myPort.readString (); skúste {// analyzovať údaje // println (inString); String dataStrings = split (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0].equals ("RAW")) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dátové reťazce [i+1]); }} else {println (inString); }}} catch (Exception e) {println ("Caught Exception"); }}
Tu môžete vidieť vizualizáciu na obrázku priloženom v tomto kroku. Údaje o polohe prijaté na konci nodemcu sú tiež zobrazené na sériovom monitore, ako je znázornené na obrázku.
Krok 5: KÓD
Pripojil som úložisko github. Môžete ho klonovať a vidlicovo používať vo svojich projektoch.
môj_kód
Repo obsahuje 2 náčrty arduino pre vysielač (arduino+IMU) a prijímač (Nodemcu+servo).
A jedna skica spracovania. Označte hviezdičkou repo, ak to pomôže vo vašom projekte.
V tomto pokyne
R- prijímač a T- vysielač
Krok 6: Demonštrácia videa
Zajtra prikladám video. Nasledujte ma a dostávajte upozornenia.
Ďakujem vám všetkým!
Odporúča:
Ovládanie 2 serva pomocou analógového joysticku: 5 krokov (s obrázkami)
Ovládanie 2 serva pomocou analógového joysticku.: Ahoj, toto je môj prvý návod a v tomto príspevku zdieľam, ako používať analógový joystick na ovládanie serva pomocou Arduino UNO. Pokúsim sa to vysvetliť čo najjednoduchšie, dúfam, že sa vám to páči. to
Ovládanie serva Hexapod Arduino Pololu Maestro: 11 krokov
Hexapod Arduino Pololu Maestro Servo Controll: Nach dem mein erster Versuch mit einem Hexapod, daran gescheitert war das die servos zu schwach waren jetzt ein neuer Versuch mit mit 10Kg Servos aus HK. Ausserdem habe ich mich für ein neuen Sevocontroller von Pololu entschieden
Ovládanie jasu Ovládanie LED na báze PWM pomocou tlačidiel, Raspberry Pi a Scratch: 8 krokov (s obrázkami)
Ovládanie jasu Ovládanie LED na základe PWM pomocou tlačidiel, Raspberry Pi a Scratch: Snažil som sa nájsť spôsob, ako vysvetliť, ako PWM funguje u mojich študentov, a tak som si dal za úlohu pokúsiť sa ovládať jas LED pomocou dvoch tlačidiel. - jedno tlačidlo zvyšuje jas LED diódy a druhé ju stmieva. Programovať
ESP8266 RGB LED STRIP WIFI ovládanie - NODEMCU Ako IR diaľkové ovládanie pre LED pás ovládané cez Wifi - Ovládanie smartfónu RGB LED STRIP: 4 kroky
ESP8266 RGB LED STRIP WIFI ovládanie | NODEMCU Ako IR diaľkové ovládanie pre LED pás ovládané cez Wifi | Ovládanie smartfónu RGB LED STRIP: Ahoj, v tomto návode sa naučíme, ako používať nodemcu alebo esp8266 ako IR diaľkové ovládanie na ovládanie RGB LED pásu a Nodemcu budete ovládať smartfónom cez wifi. V zásade teda môžete RGB LED STRIP ovládať pomocou svojho smartfónu
Bezdrôtové ovládanie serva: 6 krokov
Bezdrôtové ovládanie serva: Tento projekt riadi otáčanie serva bezdrôtovo pomocou potenciometra (gombíka). Rotácia je obmedzená na 180 stupňov