Innehållsförteckning:
- Steg 1: OM DETTA PROJEKT
- Steg 2: Hårdvara krävs
- Steg 3: Krets och anslutningar
- Steg 4: ARBETE
- Steg 5: KOD
- Steg 6: VIDEODEMONSTRATION
Video: Styr servo med MPU6050 mellan Arduino och ESP8266 med HC-12: 6 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
I detta projekt styr vi positionen för en servomotor med mpu6050 och HC-12 för kommunikation mellan Arduino UNO och ESP8266 NodeMCU.
Steg 1: OM DETTA PROJEKT
Det är ett annat IoT-projekt baserat på HC-12 RF-modul. Här används imu (mpu6050) data från arduino för att styra servomotorn (ansluten till Nodemcu). Här utförs datavisualiseringen också på arduinosidan där mpu6050 tonhöjdsdata (rotation om x-axeln) visualiseras med en bearbetningsskiss (diskuteras senare). I grund och botten är detta projekt bara en liten uppvärmning för att komma ihåg olika aspekter av Imu & Servo -kontroll med Arduino och ESP8266 nodemcu.
MÅL
Målet med detta ganska klart, Vi kontrollerar positionen för Servomotor med hjälp av tonvärdet för IMU. Och tillsammans visualiseras denna tonhöjd och synkroniserade motorposition med Processing.
Steg 2: Hårdvara krävs
NodeMCU ESP8266 12E Wifi -modul
Lödlös brödbräda
Bygeltråd
MPU6050 accelo+gyro
HC-12 RF-moduler (par)
SG90 servomotor
Steg 3: Krets och anslutningar
Anslutningarna är raka fram. Du kan driva servon med 3,3V av din Nodemcu. Du kan också använda Vin för att driva servon om din nodemcu har så mycket spänning på den stiftet. Men de flesta Lolin -brädor har inte 5V på Vin (beror på tillverkaren).
Dessa kretsscheman är gjorda med EasyADA.
Steg 4: ARBETE
Så snart arduino -skissen startade kommer den att skicka tonvinkeln (som sträcker sig från -45 till 45) till hc12 -mottagaren på Nodemcu som kartläggs med 0 till 180 graders servoposition. Här använde vi pitchvinkeln från -45 till +45 grader så att vi enkelt kan kartlägga det till Servopositionen.
Nu tänker du varför kan vi helt enkelt använda kartmetoden enligt följande:-
int pos = map (val, -45, 45, 0, 180);
Eftersom den negativa vinkel som skickas av hc12 -sändaren tas emot som:
1: a halvlek: (T) 0 till 45 => 0 till 45 (R)
2: a halvan: (T) -45 till -1 => 255 till 210 (R)
Så du måste kartlägga den till 0 till 180 som
om (val> = 0 && val <= 45) pos = (val*2) +90; annars pos = (val-210)*2;
Jag undviker kartmetoden på grund av något irrelevant fel. Du kan prova det och kommentera att det fungerar med dig
if (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); annars pos = map (val, 255, 210, 0, 90); // 4: e argumentet kan vara 2 (du kan kontrollera)
MPU6050 Beräkning av stigningsvinkel
Jag använder MPU6050_tockn bibliotek som är baserat på att ge ut rådata från IMU.
int pitchAngle = mpu6050.getAngleX ()
Detta kommer att ge oss rotationsvinkeln kring x-axeln. Som du ser i figuren är min imu vertikalt placerad på brödbrädan så blanda inte ihop med pitch and roll. Egentligen bör du alltid se axeln tryckt på utbrottskortet.
Genom detta bibliotek behöver du inte bry dig om den interna elektroniken för att läsa specifika register för specifik drift. du anger bara jobbet och du är klar!
Btw om du vill beräkna vinkeln själv. Du kan enkelt göra det enligt följande:
#omfatta
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); 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 (); 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 = map (AcX, minVal, maxVal, -90, 90); int yAng = map (AcY, minVal, maxVal, -90, 90); int zAng = map (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); }
Men det är inte nödvändigt att du skriver så mycket kod för att få vinkeln. Du bör veta fakta bakom scenen, men att använda bibliotek av andra människor är mycket effektivt i många projekt. Du kan läsa om denna imu och andra godkännanden för att få mer filtrerad data från följande länk: Explore-mpu6050.
Min arduino -kod i överföringsänden har bara 30 rader med hjälp av MPU6050_tockn -biblioteket, så att använda ett bibliotek är bra om du inte behöver några kärnändringar i IMU: s funktionalitet. Ett bibliotek som heter I2Cdev av Jeff Rowberg är till stor hjälp om du vill ha lite filtrerad data med hjälp av DMP (Digital motion processor) på IMU.
Integration med bearbetning
Här används Processing för att visualisera rotationsdata om x-axeln för IMU, beräknat med rådata från MPU6050. Vi tar emot inkommande rådata i SerialEvent på följande sätt:
void serialEvent (Serial myPort) {
inString = myPort.readString (); prova {// Analysera data // println (inString); String dataStrings = split (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0].equals ("RAW")) {för (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i+1]); }} else {println (inString); }}} catch (Undantag e) {println ("Fångat undantag"); }}
Här kan du se visualisering i bilden som bifogas i detta steg. Positionsdata som tas emot vid nodemcu -änden ses också på den seriella monitorn som visas på bilden.
Steg 5: KOD
Jag har bifogat github -förvaret. Du kan klona och gaffla den för att använda i dina projekt.
min_kod
Repo innehåller 2 arduinoskisser för sändare (arduino+IMU) och mottagare (Nodemcu+Servo).
Och en bearbetningsskiss. Stjärna repo om detta hjälper i ditt projekt.
I denna instruerbara, R- mottagare och T- sändare
Steg 6: VIDEODEMONSTRATION
Jag bifogar videon imorgon. Följ mig för att få ett meddelande.
Tack allihopa!
Rekommenderad:
RS485 mellan Arduino och Raspberry Pi: 7 steg
RS485 Mellan Arduino och Raspberry Pi: För skolan måste jag göra ett projekt. Jag väljer att göra en smart växthusstyrning helt styrd av en hallonpi. Sensorerna kommer att drivas av en arduino uno. Under de kommande månaderna kommer jag att lägga upp det här projektet steg för steg
Gränssnitt mellan människa och dator: Funktion som en gripare (tillverkad av Kirigami) med handledsrörelse med EMG: 7 steg
Mänskligt-datorgränssnitt: Fungera som en gripare (tillverkad av Kirigami) av handledsrörelse med hjälp av EMG .: Så det här var mitt första försök på ett gränssnitt mellan människa och dator. Jag fångade muskelaktiveringssignalerna från min handledsrörelse med en EMG-sensor, bearbetade genom python och arduino och aktiverade en origami -baserad gripare
Modbus TCP -kommunikation mellan Arduino och industriella enheter: 3 steg
Modbus TCP -kommunikation mellan Arduino och industriella enheter: Ett industriellt sätt att styra ett Arduino -kort med industriell HMI och koppla det till ett industriellt nätverk med en Modbus TCP -kommunikation
Jämförelse mellan Micro: bit och Arduino: 6 steg
Jämförelse mellan Micro: bit och Arduino: Vilken är den mest populära utvecklingsbrädan bland tillverkare nyligen? Naturligtvis måste det vara micro: bit board. Under samarbete mellan tekniska jätteföretag som BBC, Microsoft, Samsung och NXP är micro: bit board utrustad med en gloria av ädel klass
Kopiera och klistra in och komma åt filer mellan flera datorer: 3 steg
Kopiera och klistra in och få åtkomst till filer mellan flera datorer: Jag hittade precis en webbplats som tillåter människor att kopiera och klistra in text, bilder, videor etc. mellan flera datorer. Det låter dig också skapa ett anslagstavla, ladda upp filer och skriva ut din webbsida. Och det bästa är att du inte ens har