Inhaltsverzeichnis:
Video: Arduino Digitaler Kompass-Projekt - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
Hallo! In diesem anweisbaren sehen Sie, wie Sie einen digitalen Kompass mit einem Arduino und der Verarbeitungs-IDE herstellen können. Dies ist ein recht einfaches, aber interessantes und cool aussehendes Arduino-Projekt.
Sie können sich das Demo-Beispiel dieses Tutorials im obigen Video ansehen. Weitere interessante Videos wie dieses finden Sie immer auf meinem YouTube-Kanal sowie viele Elektronikprojekte und Tutorials auf meiner Website HowToMechatronics.com
Schritt 1: Erforderliche Teile
Für dieses Projekt benötigen Sie nur ein Arduino-Board und ein MEMS-Magnetometer, um das Erdmagnetfeld zu messen. Ich werde das GY – 80 Breakout Board verwenden, das das MC5883L 3 – Axis Magnetometer enthält.
Bevor wir mit dem Quellcode für das Projekt fortfahren Wenn Sie weitere Details zur Funktionsweise des MEMS-Magnetometers sowie zum Anschließen und Verwenden des GY - 80 Breakout-Boards über die I2C-Kommunikation benötigen, können Sie meine speziellen Tutorials dafür lesen.
Schritt 2: Arduino-Quellcode
Was wir zuerst tun müssen, ist eine Skizze auf das Arduino Board hochzuladen, die die Daten vom Magnetometer liest und sie an die Verarbeitungs-IDE sendet. Hier ist der Arduino-Quellcode:
/* Arduino Kompass * * von Dejan Nedelkovski, * www. HowToMechatronics.com * */
#include //I2C-Arduino-Bibliothek
#define Magnetometer_mX0 0x03
#define Magnetometer_mX1 0x04 #define Magnetometer_mZ0 0x05 #define Magnetometer_mZ1 0x06 #define Magnetometer_mY0 0x07 #define Magnetometer_mY1 0x08
int mX0, mX1, mX_out;
int mY0, mY1, mY_out; int mZ0, mZ1, mZ_out;
float Überschrift, ÜberschriftDegrees, ÜberschriftFiltered, Deklination;
Schwimmer Xm, Ym, Zm;
#define Magnetometer 0x1E //I2C 7bit Adresse des HMC5883
Void-Setup () {
// Serielle und I2C-Kommunikation initialisieren Serial.begin(115200); Wire.begin(); Verzögerung (100); Wire.beginTransmission (Magnetometer); Wire.write (0x02); // Modusregister auswählen Wire.write (0x00); // Kontinuierlicher Messmodus Wire.endTransmission(); }
Leere Schleife () {
//---- X-Achse Wire.beginTransmission (Magnetometer); // an Gerät übertragen Wire.write (Magnetometer_mX1); Wire.endTransmission(); Wire.requestFrom(Magnetometer, 1); if(Wire.available()<=1) {mX0 = Wire.read(); } Wire.beginTransmission (Magnetometer); // an Gerät übertragen Wire.write (Magnetometer_mX0); Wire.endTransmission(); Wire.requestFrom(Magnetometer, 1); if(Wire.available()<=1) {mX1 = Wire.read(); }
//---- Y-Achse
Wire.beginTransmission (Magnetometer); // an Gerät übertragen Wire.write (Magnetometer_mY1); Wire.endTransmission(); Wire.requestFrom(Magnetometer, 1); if(Wire.available()<=1) {mY0 = Wire.read(); } Wire.beginTransmission (Magnetometer); // an Gerät übertragen Wire.write (Magnetometer_mY0); Wire.endTransmission(); Wire.requestFrom(Magnetometer, 1); if(Wire.available()<=1) {mY1 = Wire.read(); } //---- Z-Achse Wire.beginTransmission (Magnetometer); // an Gerät übertragen Wire.write (Magnetometer_mZ1); Wire.endTransmission(); Wire.requestFrom(Magnetometer, 1); if(Wire.available()<=1) { mZ0 = Wire.read(); } Wire.beginTransmission (Magnetometer); // an Gerät übertragen Wire.write (Magnetometer_mZ0); Wire.endTransmission(); Wire.requestFrom(Magnetometer, 1); if(Wire.available()<=1) { mZ1 = Wire.read(); } //---- X-Achse mX1=mX1<<8; mX_out = mX0+mX1; // Rohdaten // Aus dem Datenblatt: 0,92 mG/Digit Xm = mX_out*0.00092; // Gauss-Einheit //* Das Erdmagnetfeld reicht von 0,25 bis 0,65 Gauss, also sind dies die Werte, die wir ungefähr benötigen.
//---- Y-Achse
mY1=mY1<<8; mY_out = mY0+mY1; Ym = mY_out*0,00092;
//---- Z-Achse
mZ1 = mZ1 < 0,073 rad-Deklination = 0,073; Überschrift += Deklination; // Korrektur bei Vertauschung der Vorzeichen if(heading <0) header += 2*PI;
// Korrektur durch Addition des Deklinationswinkels
if(Überschrift > 2*PI)Überschrift -= 2*PI;
ÜberschriftDegrees = Überschrift * 180/PI; // Die Überschrift in der Einheit Grad
// Glättung des Ausgangswinkels / Tiefpassfilter
ÜberschriftFiltered = ÜberschriftFiltered*0,85 + ÜberschriftDegrees*0,15;
// Senden des Heading-Werts über den seriellen Port an die Verarbeitungs-IDE
Serial.println (headingFiltered);
Verzögerung (50); }
Schritt 3: IDE-Quellcode verarbeiten
Nachdem wir die vorherige Arduino-Skizze hochgeladen haben, müssen wir die Daten in die Processing IDE empfangen und den digitalen Kompass zeichnen. Der Kompass besteht aus einem Hintergrundbild, einem festen Bild des Pfeils und einem rotierenden Bild des Kompasses. Die mit dem Arduino berechneten Werte für das Erdmagnetfeld werden also verwendet, um den Kompass zu drehen.
Hier ist der Quellcode der Verarbeitungs-IDE:
/* Arduino Compass * * von Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial.*; import java.awt.event. KeyEvent; import java.io. IOException;
Serieller myPort;
PImage imgCompass; PImage imgCompassArrow; PImage-Hintergrund;
Zeichenfolge data="";
Überschrift schweben;
Leere Einrichtung () {
Größe (1920, 1080, P3D); glatt(); imgCompass = loadImage("Compass.png"); imgCompassArrow = loadImage("CompassArrow.png"); background = loadImage("Background.png"); myPort = new Serial (dies, "COM4", 115200); // startet die serielle Kommunikation myPort.bufferUntil('\n'); }
Leere zeichnen () {
Bild (Hintergrund, 0, 0); // Lädt das Hintergrundbild pushMatrix(); übersetzen (Breite/2, Höhe/2, 0); // Verschiebt das Koordinatensystem in die Mitte des Bildschirms, so dass die Drehung genau in der Mitte erfolgt rotationZ(radians(-heading)); // Rotiert den Kompass um Z - Achsenbild (imgCompass, -960, -540); // Lädt das Kompassbild und da das Koordinatensystem verschoben wird, müssen wir das Bild auf -960x, -540y (halbe Bildschirmgröße) einstellen popMatrix(); // Bringt das Koordinatensystem zurück in die ursprüngliche Position 0, 0, 0 image(imgCompassArrow, 0, 0); // Lädt das CompassArrow-Bild, das wegen der popMatrix()-Funktion von der Funktion rotateZ() nicht betroffen ist textSize(30); text("Überschrift: " + Überschrift, 40, 40); // Gibt den Wert der Überschrift auf dem Bildschirm aus
Verzögerung (40);
}
// beginnt mit dem Lesen von Daten vom seriellen Port
void serialEvent (Serial myPort) { data = myPort.readStringUntil('\n'); // liest die Daten vom seriellen Port und legt sie in die String-Variable "data" ab. Überschrift = Float (Daten); // Den String-Wert in einen Float-Wert umwandeln }
Ich hoffe, Sie werden dieses Projekt mögen. Wenn es so ist, können Sie auch meine Website für weitere coole Projekte besuchen.
Empfohlen:
So zerlegen Sie einen digitalen Messschieber und wie funktioniert ein digitaler Messschieber – wikiHow
Wie man einen digitalen Messschieber abreißt und wie ein digitaler Messschieber funktioniert: Viele Leute wissen, wie man Messschieber zum Messen verwendet. In diesem Tutorial erfahren Sie, wie Sie einen digitalen Messschieber abreißen und erklären, wie der digitale Messschieber funktioniert
Arduino-Programmierung über das Handy -- Arduinodroid -- Arduino-Ide für Android -- Blinzeln: 4 Schritte
Arduino-Programmierung über das Handy || Arduinodroid || Arduino-Ide für Android || Blink: Bitte abonnieren Sie meinen Youtube-Kanal für weitere Videos…… Arduino ist ein Board, das direkt über USB programmiert werden kann. Es ist sehr einfach und günstig für College- und Schulprojekte oder sogar für Produktprototypen. Viele Produkte bauen zunächst darauf für i
Heritage - Keramik im Kontext digitaler und analoger Techniken 2015 – 3 Schritte (mit Bildern)
Heritage - Keramik im Kontext digitaler und analoger Techniken 2015: Keramik war bisher ein Handwerk mit geringem digitalen Einfluss. Aus diesem Grund war es spannend, dieses Handwerk mit einer neuen Technologie zu verbinden. Ausgangspunkt war eine uralte Form und ein CNC Styropor.DESIGNBOOM
4-stufiger digitaler Sequenzer: 19 Schritte (mit Bildern)
4 Step Digital Sequencer: CPE 133, Cal Poly San Luis Obispo Projektentwickler: Jayson Johnston und Bjorn NelsonIn der heutigen Musikindustrie ist eines der am häufigsten verwendeten „Instrumente” ist der digitale Synthesizer. Jedes Musikgenre, von Hip-Hop über Pop bis hin
Digitaler 3D-Bildbetrachter - "Das DigiStereopticon": 6 Schritte (mit Bildern)
Digitaler 3D-Bildbetrachter - "Das DigiStereopticon": Stereoskopische Fotografie ist in Ungnade gefallen. Das liegt wahrscheinlich daran, dass man nicht gerne eine spezielle Brille tragen muss, um Familienschnappschüsse zu sehen. Hier ist ein lustiges kleines Projekt, das Sie in weniger als einem Tag erstellen können, um Ihr 3D-Bild zu erstellen