Inhaltsverzeichnis:
- Schritt 1: ÜBER DIESES PROJEKT
- Schritt 2: Hardware erforderlich
- Schritt 3: Schaltung & Anschlüsse
- Schritt 4: ARBEITEN
- Schritt 5: CODE
- Schritt 6: VIDEODEMONSTRATION
Video: Steuern des Servos mit MPU6050 zwischen Arduino und ESP8266 mit HC-12 - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
In diesem Projekt steuern wir die Position eines Servomotors mit dem mpu6050 und HC-12 für die Kommunikation zwischen Arduino UNO und ESP8266 NodeMCU.
Schritt 1: ÜBER DIESES PROJEKT
Es ist ein weiteres IoT-Projekt basierend auf dem HC-12 RF-Modul. Hier werden die imu(mpu6050)-Daten von Arduino verwendet, um den Servomotor (verbunden mit Nodemcu) zu steuern. Hier wird die Datenvisualisierung auch auf der Arduino-Seite durchgeführt, wo die Mpu6050-Pitch-Daten (Rotation um die X-Achse) mit einer Verarbeitungsskizze (später diskutiert) visualisiert werden. Im Grunde ist dieses Projekt nur ein kleines Aufwärmen, um sich an verschiedene Aspekte der Imu- und Servosteuerung mit Arduino und ESP8266 nodemcu zu erinnern.
ZIELSETZUNG
Das Ziel dieses ziemlich klaren, Wir steuern die Position des Servomotors mit dem Pitch-Wert der IMU. Und insgesamt wird diese Steigung und die synchronisierte Motorposition mit Processing visualisiert.
Schritt 2: Hardware erforderlich
NodeMCU ESP8266 12E Wifi-Modul
Lötfreies Steckbrett
Überbrückungskabel
MPU6050 Beschleunigung + Kreisel
HC-12 HF-Module (Paar)
SG90 Servomotor
Schritt 3: Schaltung & Anschlüsse
Verbindungen sind direkt. Sie können das Servo mit 3.3V Ihres Nodemcu versorgen. Sie können auch Vin verwenden, um das Servo mit Strom zu versorgen, wenn Ihr Nodemcu so viel Spannung an diesem Pin hat. Aber die meisten Lolin-Boards haben keine 5V an Vin (abhängig vom Hersteller).
Diese Schaltpläne werden mit EasyADA erstellt.
Schritt 4: ARBEITEN
Sobald die Arduino-Skizze gestartet wurde, wird der Neigungswinkel (der von -45 bis 45 reicht) an den hc12-Empfänger von Nodemcu gesendet, der mit einer Servoposition von 0 bis 180 Grad abgebildet wird. Hier haben wir den Pitchwinkel von -45 bis +45 Grad verwendet, damit wir das leicht der Servoposition zuordnen können.
Jetzt denken Sie, warum wir die Kartenmethode einfach wie folgt verwenden können:
int pos = map(val, -45, 45, 0, 180);
Weil der vom hc12-Sender gesendete negative Winkel empfangen wird als:
1. Hälfte: (T)0 bis 45 => 0 bis 45(R)
2. Hälfte: (T)-45 bis -1 => 255 bis 210(R)
Sie müssen es also auf 0 bis 180 abbilden, da
if(Wert>=0 && Wert<=45) pos = (Wert*2)+90; sonst pos = (val-210)*2;
Ich vermeide die Kartenmethode aufgrund eines irrelevanten Fehlers. Du kannst das ausprobieren und kommentieren, dass es bei dir funktioniert
if(val>=0 && val<=45) pos = map(val, 0, 45, 90, 180); else pos = map(val, 255, 210, 0, 90); // 4. Argument kann 2 sein (können Sie überprüfen)
MPU6050 Nickwinkelberechnung
Ich verwende die MPU6050_tockn-Bibliothek, die auf der Ausgabe von Rohdaten von der IMU basiert.
int pitchAngle = mpu6050.getAngleX()
Dadurch erhalten wir den Drehwinkel um die x-Achse. Wie Sie in der Abbildung sehen können, ist mein imu vertikal auf dem Steckbrett platziert, also nicht mit Pitch and Roll verwechseln. Eigentlich sollten Sie immer die Achsen auf der Breakout-Platine aufgedruckt sehen.
Durch diese Bibliothek müssen Sie sich nicht um die interne Elektronik des Lesens bestimmter Register für bestimmte Operationen kümmern. Sie geben nur den Job an und Sie sind fertig!
Übrigens, wenn Sie den Winkel selbst berechnen möchten. Sie können dies ganz einfach wie folgt tun:
#enthalten
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); aufrechtzuerhalten. Void Schleife () { Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU6050_addr, 14, true); AcX=Wire.read()<<8|Wire.read(); AcY=Draht.read()<<8|Draht.read(); AcZ=Draht.read()<<8|Draht.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 ("WinkelX = "); // Pitch Serial.println (x); Serial.print ("WinkelY = "); // Roll Serial.println (y); Serial.print("WinkelZ="); // Gieren Serial.println (z); }
Es ist jedoch nicht notwendig, dass Sie so viel Code schreiben, um den Winkel zu erhalten. Sie sollten die Fakten hinter den Kulissen kennen, aber die Verwendung der Bibliothek anderer Personen ist in vielen Projekten sehr effektiv. Sie können über dieses imu und andere Ansätze lesen, um mehr gefilterte Daten über den folgenden Link zu erhalten: Explore-mpu6050.
Mein Arduino-Code auf der Sendeseite hat mit Hilfe der MPU6050_tockn-Bibliothek nur 30 Zeilen. Daher ist die Verwendung einer Bibliothek gut, es sei denn, Sie benötigen keine grundlegenden Änderungen an der Funktionalität von IMU. Eine Bibliothek namens I2Cdev von Jeff Rowberg ist sehr hilfreich, wenn Sie einige gefilterte Daten mit dem DMP (Digital Motion Processor) der IMU verwenden möchten.
Integration mit Verarbeitung
Hier wird die Verarbeitung verwendet, um die Rotationsdaten um die x-Achse der IMU zu visualisieren, wie sie durch die Rohdaten von MPU6050 berechnet werden. Wir empfangen die eingehenden Rohdaten in SerialEvent auf folgende Weise:
void serialEvent(Serial myPort) {
inString = meinPort.readString(); try { // Daten analysieren //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 (Exception e) { println("Caught Exception"); } }
Hier sehen Sie die Visualisierung in dem in diesem Schritt angehängten Bild. Die am Nodemcu-Ende empfangenen Positionsdaten werden auch auf dem seriellen Monitor angezeigt, wie im Bild gezeigt.
Schritt 5: CODE
Ich habe das Github-Repository angehängt. Sie können es klonen und forken, um es in Ihren Projekten zu verwenden.
mein_code
Das Repo enthält 2 Arduino-Skizzen für Sender (arduino + IMU) und Empfänger (Nodemcu + Servo).
Und eine Verarbeitungsskizze. Starten Sie das Repo, wenn dies in Ihrem Projekt hilft.
In diesem anweisbaren, R- Empfänger & T-Sender
Schritt 6: VIDEODEMONSTRATION
Ich werde das Video morgen anhängen. Folgen Sie mir, um benachrichtigt zu werden.
Danke euch allen!
Empfohlen:
So steuern Sie ein Gerät mit Raspberry Pi und einem Relais – DIE GRUNDLAGEN: 6 Schritte
So steuern Sie ein Gerät mit Raspberry Pi und einem Relais - DIE GRUNDLAGEN: Dies ist ein einfaches und unkompliziertes Tutorial zur Steuerung eines Geräts mit Raspberry Pi und einem Relais, das für die Erstellung von IoT-Projekten hilfreich ist folgen Sie, auch wenn Sie keine Ahnung von Raspberry haben
Steuern von Haushaltsgeräten mit Node-MCU und Google Assistant - IOT - Blynk - IFTTT: 8 Schritte
Steuern von Haushaltsgeräten mit Node-MCU und Google Assistant | IOT | Blynk | IFTTT: Ein einfaches Projekt zur Steuerung von Geräten mit Google Assistant: Warnung: Der Umgang mit Netzstrom kann gefährlich sein. Mit äußerster Sorgfalt behandeln. Stellen Sie einen professionellen Elektriker ein, während Sie mit offenen Stromkreisen arbeiten. Ich übernehme keine Verantwortung für die da
Gewusst wie: Geschwindigkeit des Motors steuern?: 5 Schritte (mit Bildern)
Gewusst wie: Geschwindigkeit des Motors steuern?: Wenn Sie ein paar DC-Motoren herumliegen haben, kommt Ihnen die erste Frage in den Sinn, wie ich die Geschwindigkeit dieser Motoren kontrolliere! Also in diesem Instructables werde ich zeigen, wie einfach es ist! Sie fühlen sich faul, Sie können Videos auf meinem Kanal ansehen Auch Huge Tha
Steuern Sie einen Roboterarm mit Zio-Modulen Teil 1: 8 Schritte
Steuern Sie einen Roboterarm mit Zio-Modulen Teil 1: Dieser Blogbeitrag ist Teil der Zio Robotics Series.EinführungIn diesem Tutorial werden wir ein Projekt erstellen, in dem wir Zio-Module verwenden, um den Roboterarm zu steuern. In diesem Projekt lernen Sie, wie Sie Ihre Roboterarmkralle öffnen und schließen. Diese n
PC drahtlos mit Augenzwinkern steuern;): 9 Schritte (mit Bildern)
Steuern Sie den PC drahtlos mit Augenzwinkern;): Wie wäre es, über Ihre Gewohnheiten hinauszugehen? Wie wäre es, etwas Neues auszuprobieren??!!!!Wie wäre es, wenn Sie Ihren PC steuern und alles tun, was Sie wollen, OHNE Tastatur und Maus zu benutzen!Hmm… Aber wie ist das möglich??Mit nur einem Wimpernschlag!! Nicht b