Tartalomjegyzék:
- 1. lépés: A PROJEKTRŐL
- 2. lépés: Hardver szükséges
- 3. lépés: Áramkör és csatlakozások
- 4. lépés: MUNKA
- 5. lépés: KÓDOLÁS
- 6. lépés: VIDEÓ DEMONSTRÁCIÓ
Videó: Szervó vezérlése MPU6050 használatával Arduino és ESP8266 között HC-12: 6 lépéssel
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
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
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
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:
2 szervó vezérlése analóg joystick segítségével: 5 lépés (képekkel)
2 szervó vezérlése analóg joystick segítségével: Helló srácok, ez az első utasítható, és ebben a bejegyzésben megosztom, hogyan használhatom az analóg joystickot a szervók vezérléséhez az Arduino UNO segítségével. Megpróbálom a lehető legegyszerűbben elmagyarázni, remélem tetszik azt
Szervo vezérlése 555 időzítő IC használatával: 3 lépés
Szervo vezérlése 555 időzítő IC használatával: A legelső utasításom a "Szervók vezérlése analóg joystick segítségével" volt. Azóta megosztottam néhány projektet, amelyekhez szervóra volt szükség, például: Robotkar és Arckövető. A szervók vezérléséhez mindig mikrokontrollert használtunk. De ahhoz, hogy
Szervo motor vezérlése a számítógépről GUI -val: 5 lépés
Hogyan lehet vezérelni egy szervo motort a számítógépről GUI-val: अपनी szervomotor को pc से grafikus felhasználói felület (GUI) control vezérlésen keresztül करने के लिए में पहली ruct Instructable Share हूँर रहा हूँ myblog-www.mechanic37.com पर आप ऐसे बहुत से projekt देख सकते है इस utasítható olvasmány करें जिसके द्वारा आप अपने PC -k
Interfész Több LCD és Arduino Uno között a közös adatvonal használatával: 5 lépés
Interfész több LCD -ről Arduino Uno -ra a Common Data Line használatával: Ma ebben az oktatóanyagban megmutatom, hogyan lehet több 16x2 -es LCD -modult illeszteni egy arduino uno kártyával közös adatvonal használatával. A legérdekesebb ebben a projektben az, hogy közös adatvonalat használ, és különböző adatokat jelenít meg az e
Szervo vezérlése Arduino és Rock Band gitár használatával: 5 lépés
A szervo vezérlése az Arduino és a Rock Band gitár használatával: ez az első utasítható, csúnya megjegyzésem, hogyan készítettem programot