Tartalomjegyzék:

Szervó vezérlése MPU6050 használatával Arduino és ESP8266 között HC-12: 6 lépéssel
Szervó vezérlése MPU6050 használatával Arduino és ESP8266 között HC-12: 6 lépéssel

Videó: Szervó vezérlése MPU6050 használatával Arduino és ESP8266 között HC-12: 6 lépéssel

Videó: Szervó vezérlése MPU6050 használatával Arduino és ESP8266 között HC-12: 6 lépéssel
Videó: #62 - Az MQTT protokoll 2024, Július
Anonim
Szervó vezérlése MPU6050 használatával Arduino és ESP8266 között HC-12-vel
Szervó vezérlése MPU6050 használatával Arduino és ESP8266 között HC-12-vel

Ebben a projektben egy szervomotor helyzetét irányítjuk az mpu6050 és a HC-12 segítségével az Arduino UNO és az ESP8266 NodeMCU közötti kommunikációhoz.

1. lépés: A PROJEKTRŐL

Ez egy másik IoT projekt, amely a HC-12 RF modulon alapul. Itt az arduino imu (mpu6050) adatai szolgálnak a szervomotor (Nodemcu -hoz csatlakoztatva) vezérlésére. Itt az adatok vizualizációját az arduino oldalon is végrehajtják, ahol az mpu6050 hangmagasság-adatokat (x tengely körüli elforgatás) egy feldolgozási vázlattal vizualizálják (később tárgyaljuk). Alapvetően ez a projekt csak egy kis bemelegítés, hogy emlékezzen az Imu & Servo vezérlés különböző aspektusaira az Arduino és az ESP8266 nodemcu segítségével.

CÉLKITŰZÉS

Ennek célja nagyon világos: a szervomotor helyzetét az IMU hangmagasságának segítségével szabályozjuk. És ez a pálya és a szinkron motor helyzet együtt látható a Processing segítségével.

2. lépés: Hardver szükséges

NodeMCU ESP8266 12E Wifi modul

Forrasztás nélküli kenyeretábla

Jumper huzal

MPU6050 accelo+giroszkóp

HC-12 RF modulok (pár)

SG90 szervomotor

3. lépés: Áramkör és csatlakozások

Áramkör és csatlakozások
Áramkör és csatlakozások
Áramkör és csatlakozások
Áramkör és csatlakozások

A kapcsolatok egyenesen előre haladnak. A szervót 3,3 V -os Nodemcu -ról táplálhatja. Akkor is használhatja a Vin -t a szervó áramellátására, ha a nodemcu -nak annyi feszültsége van a csapon. De a legtöbb Lolin tábla nem rendelkezik 5 V feszültséggel a Vin -nél (a gyártótól függően).

Ezek a kapcsolási rajzok az EasyADA segítségével készültek.

4. lépés: MUNKA

DOLGOZÓ
DOLGOZÓ

Amint az arduino vázlat elkezdődött, elküldi a dőlésszöget (-45 és 45 között) a Nodemcu hc12 vevőegységéhez, amely 0 és 180 fokos szervo pozícióval van leképezve. Itt a dőlésszöget -45 és +45 fok között használtuk, hogy könnyen leképezhessük a szervo helyzetbe.

Most azon gondolkodik, miért használhatjuk egyszerűen a térképi módszert az alábbiak szerint:-

int pos = térkép (val, -45, 45, 0, 180);

Mivel a hc12 adó által küldött negatív szög a következőképpen érkezik:

1. félidő: (T) 0 - 45 => 0 - 45 (R)

2. félidő: (T) -45 --1 => 255 -210 (R)

Tehát 0 és 180 között kell leképeznie

ha (val> = 0 && val <= 45) pos = (val*2) +90; else pos = (val-210)*2;

Elkerülöm a térképi módszert valamilyen irreleváns hiba miatt. Megpróbálhatod, és megjegyezheted, hogy működik veled

if (val> = 0 && val <= 45) pos = térkép (val, 0, 45, 90, 180); else pos = térkép (val, 255, 210, 0, 90); // A negyedik argumentum lehet 2 (ellenőrizheti)

MPU6050 Pitch Angle Calculation

Az MPU6050_tockn könyvtárat használom, amely az IMU nyers adatainak kiadásán alapul.

int pitchAngle = mpu6050.getAngleX ()

Ezzel megkapjuk az x tengely körüli forgásszöget. Amint az ábrán látható, az imu függőlegesen van elhelyezve a kenyértáblán, ezért ne keverje össze a pályával és a tekercseléssel. Valójában mindig látni kell a tengelyt a kitörési táblán.

Ezen a könyvtáron keresztül nem kell aggódnia az egyes regiszterek olvasásának belső elektronikája miatt. csak a munkát határozza meg, és kész!

Btw, ha saját maga szeretné kiszámítani a szöget. Könnyen megteheti az alábbiak szerint:

#befoglalni

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); Vezeték.írás (0); Wire.endTransmission (igaz); Sorozat.kezdet (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (false); Wire.requestFrom (MPU6050_addr, 14, igaz); AcX = Huzal.olvasás () << 8 | Vezeték.olvasás (); AcY = huzal.olvasás () << 8 | huzal.olvasás (); AcZ = Drót.olvasás () << 8 | Drót.olvasás (); Hőmérséklet = huzal.olvasás () << 8 | huzal.olvasás (); GyroX = Drót.olvasás () << 8 | Vezeték.olvasás (); GyroY = Drót.olvasás () << 8 | Drót.olvasás (); GyroZ = Drót.olvasás () << 8 | Drót.olvasás ();

int xAng = térkép (AcX, minVal, maxVal, -90, 90); int yAng = térkép (AcY, minVal, maxVal, -90, 90); int zAng = térkép (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); }

De nem szükséges, hogy ennyi kódot írjon, hogy megkapja a szöget. Tudnia kell a tényeket a színfalak mögött, de más emberek könyvtárának használata nagyon hatékony számos projektben. Erről az imu-ról és más megközelítésekről a következő linkről olvashat további szűrett adatokat: Explore-mpu6050.

Az arduino kódom az átviteli végén csak 30 sorból áll az MPU6050_tockn könyvtár segítségével, így a könyvtár használata jó, hacsak nincs szükség néhány alapvető változtatásra az IMU funkcióiban. Jeff Rowberg I2Cdev nevű könyvtára nagyon hasznos, ha szűrni szeretne adatokat az IMU DMP (Digital Motion Processor) használatával.

Integráció a feldolgozással

Itt a Processing az IMU x tengelye körüli forgási adatok megjelenítésére szolgál, az MPU6050-ből származó nyers adatok alapján. A beérkező nyers adatokat a SerialEvent -ben a következő módon fogadjuk:

void serialEvent (Soros myPort) {

inString = myPort.readString (); try {// Az adatok elemzése // 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 (dataStrings [i+1]); }} else {println (inString); }}} catch (Kivétel e) {println ("Elfogott kivétel"); }}

Itt láthatja a vizualizációt az ebben a lépésben csatolt képen. A nodemcu végén kapott pozícióadatok a képen látható soros monitoron is láthatók.

5. lépés: KÓDOLÁS

Csatoltam a github adattárat. Klónozhatja és elágazhatja, hogy felhasználhassa projektjeiben.

my_code

A repó 2 arduino vázlatot tartalmaz az adó (arduino+IMU) és a vevő (Nodemcu+Servo) számára.

És egy feldolgozási vázlat. Csillagozza a repót, ha ez segít a projektben.

Ebben az oktatható, R- vevő és T- adó

6. lépés: VIDEÓ DEMONSTRÁCIÓ

Holnap csatolom a videót. Kövess engem, hogy értesítést kapjak.

Köszönök mindent!

Ajánlott: