Inhoudsopgave:
- Stap 1: OVER DIT PROJECT
- Stap 2: Hardware vereist
- Stap 3: Circuit en verbindingen
- Stap 4: WERKEN
- Stap 5: CODE
- Stap 6: VIDEODEMONSTRATIE
Video: Servo besturen met MPU6050 tussen Arduino en ESP8266 met HC-12 - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
In dit project regelen we de positie van een servomotor met behulp van de mpu6050 en HC-12 voor communicatie tussen Arduino UNO en ESP8266 NodeMCU.
Stap 1: OVER DIT PROJECT
Het is een ander IoT-project gebaseerd op de HC-12 RF-module. Hier worden de imu (mpu6050) gegevens van arduino gebruikt om de servomotor te besturen (verbonden met Nodemcu). Hier wordt de datavisualisatie ook uitgevoerd aan de Arduino-kant, waar de mpu6050-pitchgegevens (rotatie rond de x-as) worden gevisualiseerd met een verwerkingsschets (later besproken). Eigenlijk is dit project slechts een kleine opwarmer voor het onthouden van verschillende aspecten van Imu & Servo-besturing met Arduino en ESP8266 nodemcu.
DOELSTELLING
Het doel van deze vrij duidelijk, we controleren de positie van de servomotor met behulp van de toonhoogte van IMU. En alles bij elkaar wordt deze toonhoogte en gesynchroniseerde motorpositie gevisualiseerd met Processing.
Stap 2: Hardware vereist
NodeMCU ESP8266 12E Wifi-module
Soldeerloze breadboard
Doorverbindingsdraad
MPU6050 accelo+gyro
HC-12 RF-modules (paar)
SG90 servomotor
Stap 3: Circuit en verbindingen
Verbindingen zijn rechttoe rechtaan. Je kunt de servo van stroom voorzien met 3,3V van je Nodemcu. Je kunt Vin ook gebruiken om de servo van stroom te voorzien als je nodemcu zoveel spanning op die pin heeft. Maar de meeste Lolin-boards hebben geen 5V bij Vin (afhankelijk van de fabrikant).
Deze schakelschema's zijn gemaakt met EasyADA.
Stap 4: WERKEN
Zodra de Arduino-schets is gestart, stuurt deze de pitch-hoek (die varieert van -45 tot 45) naar de hc12-ontvanger van Nodemcu die in kaart wordt gebracht met een servo-positie van 0 tot 180 graden. Hier hebben we de pitch-hoek van -45 tot +45 graden gebruikt, zodat we die gemakkelijk kunnen toewijzen aan de servo-positie.
Nu denk je waarom kunnen we de kaartmethode eenvoudig als volgt gebruiken: -
int pos = kaart(waarde, -45, 45, 0, 180);
Omdat de negatieve hoek die door de hc12-zender wordt verzonden, wordt ontvangen als:
1ste helft: (T)0 tot 45 => 0 tot 45(R)
2e helft: (T)-45 tot -1 => 255 tot 210(R)
Dus je moet het toewijzen aan 0 tot 180 als
if(val>=0 && val<=45) pos = (val*2)+90; anders pos = (val-210)*2;
Ik vermijd de kaartmethode vanwege een irrelevante fout. Je kunt dat proberen en commentaar geven dat het bij jou werkt
if(val>=0 && val<=45) pos = map(val, 0, 45, 90, 180); anders pos = kaart (val, 255, 210, 0, 90); // 4e argument kan 2 zijn (u kunt controleren)
MPU6050 Pitch Hoekberekening
Ik gebruik de MPU6050_tockn-bibliotheek die is gebaseerd op het verstrekken van onbewerkte gegevens van de IMU.
int pitchAngle = mpu6050.getAngleX()
Dit geeft ons de rotatiehoek om de x-as. Zoals je in de afbeelding kunt zien, is mijn imu verticaal op het breadboard geplaatst, dus verwar het niet met pitch and roll. Eigenlijk zou je altijd de assen op het breakout board moeten zien staan.
Via deze bibliotheek hoeft u zich geen zorgen te maken over de interne elektronica van het uitlezen van specifieke registers voor specifieke bewerkingen. je geeft alleen de klus op en je bent klaar!
Btw als je de hoek zelf wilt berekenen. Je kunt het eenvoudig als volgt doen:
#erbij betrekken
const int MPU6050_addr=0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; void setup(){ Wire.begin(); Wire.beginTransmission (MPU6050_addr); Draad.schrijven (0x6B); Draad.schrijven(0); Wire.endTransmission (waar); Serieel.begin(9600); } void loop(){ Wire.beginTransmission(MPU6050_addr); Draad.schrijven (0x3B); Wire.endTransmission (false); Wire.requestFrom (MPU6050_addr, 14, waar); 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 = kaart (AcX, min. waarde, max. waarde, -90, 90); int yAng = kaart (AcY, minVal, maxVal, -90, 90); int zAng = kaart (AcZ, min. waarde, max. waarde, -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="); // Toonhoogte Serial.println(x); Serial.print("AngleY="); //Roll Serial.println(y); Serial.print("AngleZ="); //Yaw Serial.println(z); }
Maar het is niet nodig dat u zoveel code schrijft om de hoek te krijgen. U zou de feiten achter de schermen moeten kennen, maar het gebruik van een bibliotheek van andere mensen is in veel projecten zeer effectief. Je kunt meer lezen over deze imu en andere benaderingen om meer gefilterde gegevens te krijgen via de volgende link: Explore-mpu6050.
Mijn Arduino-code aan de verzendende kant heeft slechts 30 regels met behulp van de MPU6050_tockn-bibliotheek, dus het gebruik van een bibliotheek is goed, tenzij je geen enkele kernwijzigingen nodig hebt in de functionaliteit van IMU. Een bibliotheek met de naam I2Cdev door Jeff Rowberg is erg handig als u wat gefilterde gegevens wilt met behulp van de DMP (Digital Motion Processor) van de IMU.
Integratie met verwerking
Hier wordt Processing gebruikt voor het visualiseren van de rotatiegegevens over de x-as van IMU, zoals berekend door de onbewerkte gegevens afkomstig van MPU6050. We ontvangen de binnenkomende onbewerkte gegevens in SerialEvent op de volgende manier:
void serialEvent (Serial myPort) {
inString = mijnPort.readString(); probeer { // Ontleed de gegevens // 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 (uitzondering e) { println("Gevangen uitzondering"); } }
Hier ziet u de visualisatie in de afbeelding die in deze stap is bijgevoegd. De positiegegevens die aan het nodemcu-uiteinde worden ontvangen, zijn ook te zien op de seriële monitor, zoals weergegeven in de afbeelding.
Stap 5: CODE
Ik heb de github-repository bijgevoegd. Je kunt het klonen & forken om in je projecten te gebruiken.
mijn_code
De repo bevat 2 arduino-schetsen voor zender (arduino + IMU) en ontvanger (Nodemcu + servo).
En een bewerkingsschets. Geef de repo een ster als dit helpt bij uw project.
In dit instructable, R-ontvanger & T-zender
Stap 6: VIDEODEMONSTRATIE
Ik zal de video morgen bijvoegen. Volg mij om op de hoogte te blijven.
Bedankt iedereen!
Aanbevolen:
RS485 tussen Arduino en Raspberry Pi: 7 stappen
RS485 Tussen Arduino en Raspberry Pi: Voor school moet ik een project maken. Ik kies ervoor om een slimme kascontroller te maken die volledig wordt bestuurd door een raspberry pi. De sensoren worden aangedreven door een arduino uno. In de maanden die volgen zal ik stap voor stap de making of van dit project posten
Modbus TCP-communicatie tussen Arduino en industriële apparaten: 3 stappen
Modbus TCP-communicatie tussen Arduino en industriële apparaten: een industriële manier om een Arduino-bord met industriële HMI te besturen en te koppelen aan een industrieel netwerk met een Modbus TCP-communicatie
Tot 68 punten besturen met Arduino Mega en ESP8266: 14 stappen
Tot 68 punten besturen met Arduino Mega en ESP8266: Door het gebruik van een elektrisch schema dat ik beschikbaar heb gemaakt in PDF-formaat, wordt in het project van vandaag een Arduino Mega aangesloten op de ESP8266 om WiFi te laten functioneren. De schakeling, voornamelijk voor woningautomatisering, werkt ook met Bluetooth en is
Vergelijking tussen Micro:bit en Arduino: 6 stappen
Vergelijking tussen Micro:bit en Arduino: wat is de laatste tijd het populairste ontwikkelbord onder makers? Het moet natuurlijk een micro:bit-bord zijn. Onder de medewerking van technische giganten zoals BBC, Microsoft, Samsung en NXP, krijgt micro:bit board een aureool van nobele klasse
Een NodeMCU ESP8266 1.0 12E besturen met Google Firebase: 4 stappen
Een NodeMCU ESP8266 1.0 12E besturen met Google Firebase: in deze cursus zullen we een Android-applicatie maken, een Firebase-database maken en NodeMCU ESP 8266 1.0 12E besturen met coördinatie van de eerder genoemde producten