Spisu treści:
Wideo: Projekt cyfrowego kompasu Arduino: 3 kroki
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Cześć! W tej instrukcji zobaczysz, jak możesz zrobić cyfrowy kompas za pomocą Arduino i Processing IDE. Jest to dość prosty, ale ciekawy i fajnie wyglądający projekt Arduino.
Przykład demo tego samouczka można obejrzeć na powyższym filmie. Zawsze możesz znaleźć ciekawsze filmy tego typu na moim kanale YouTube, a także znaleźć wiele projektów elektronicznych i samouczków na mojej stronie internetowej HowToMechatronics.com
Krok 1: Wymagane części
Do tego projektu będziesz potrzebować tylko płytki Arduino i magnetometru MEMS do pomiaru ziemskiego pola magnetycznego. Wykorzystam tablicę zaciskową GY – 80, która zawiera magnetometr MC5883L 3 – Axis.
Zanim przejdziemy do kodu źródłowego projektu Jeśli potrzebujesz więcej szczegółów na temat działania magnetometru MEMS, a także jak podłączyć i używać tabliczki zaciskowej GY - 80 za pośrednictwem komunikacji I2C, możesz zapoznać się z moimi konkretnymi samouczkami.
Krok 2: Kod źródłowy Arduino
To, co musimy najpierw zrobić, to wgrać szkic na płytkę Arduino, który odczyta dane z magnetometru i prześle go do Processing IDE. Oto kod źródłowy Arduino:
/* Kompas Arduino * * autorstwa Dejana Nedelkovskiego, * www. HowToMechatronics.com * */
#include //Biblioteka Arduino I2C
#definiuj magnetometr_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;
nagłówek zmiennoprzecinkowy, nagłówekStopnie, nagłówekOdfiltrowane, deklinacja;
pływak Xm, Ym, Zm;
#define Magnetometer 0x1E //I2C 7-bitowy adres HMC5883
pusta konfiguracja (){
//Zainicjuj komunikację szeregową i I2C Serial.begin(115200); Wire.początek(); opóźnienie (100); Wire.beginTransmisja (magnetometr); Wire.write(0x02); // Wybierz tryb rejestru Wire.write(0x00); // Tryb pomiaru ciągłego Wire.endTransmission(); }
pusta pętla () {
//---- X-Axis Wire.beginTransmission(Magnetometr); // prześlij do urządzenia Wire.write(Magnetometer_mX1); Wire.endTransmission(); Wire.requestFrom(Magnetometr, 1); if(Przewód.dostępny()<=1) { mX0 = Przewód.odczyt(); } Wire.beginTransmission(Magnetometr); // prześlij do urządzenia Wire.write(Magnetometer_mX0); Wire.endTransmission(); Wire.requestFrom(Magnetometr, 1); if(Przewód.dostępny()<=1) { mX1 = Przewód.odczyt(); }
//---- Oś Y
Wire.beginTransmisja (magnetometr); // prześlij do urządzenia Wire.write(Magnetometer_mY1); Wire.endTransmission(); Wire.requestFrom(Magnetometr, 1); if(Przewód.dostępny()<=1) { mY0 = Przewód.odczyt(); } Wire.beginTransmission(Magnetometr); // prześlij do urządzenia Wire.write(Magnetometer_mY0); Wire.endTransmission(); Wire.requestFrom(Magnetometr, 1); if(Przewód.dostępny()<=1) { mY1 = Przewód.odczyt(); } //---- Drut osi Z.beginTransmission(Magnetometr); // prześlij do urządzenia Wire.write(Magnetometer_mZ1); Wire.endTransmission(); Wire.requestFrom(Magnetometr, 1); if(Przewód.dostępny()<=1) { mZ0 = Przewód.odczyt(); } Wire.beginTransmission(Magnetometr); // prześlij do urządzenia Wire.write(Magnetometer_mZ0); Wire.endTransmission(); Wire.requestFrom(Magnetometr, 1); if(Przewód.dostępny()<=1) { mZ1 = Przewód.odczyt(); } //---- Oś X mX1=mX1<<8; mX_out =mX0+mX1; // Surowe dane // Z arkusza danych: 0,92 mG/cyfrę Xm = mX_out*0.00092; // jednostka Gaussa //* Pole magnetyczne Ziemi waha się od 0,25 do 0,65 Gaussa, więc są to wartości, które musimy uzyskać w przybliżeniu.
//---- Oś Y
mY1=mY1<<8; my_out = myY0+mY1; Ym = mY_out*0.00092;
//---- Oś Z
mZ1=mZ1< 0,073 rad deklinacja = 0,073; nagłówek += deklinacja; // Poprawianie, gdy znaki są odwrócone if(nagłówek <0) nagłówek += 2*PI;
// Korekta ze względu na dodanie kąta deklinacji
if(nagłówek > 2*PI)nagłówek -= 2*PI;
nagłówekDegrees = nagłówek * 180/PI; // Nagłówek w jednostkach stopni
// Wygładzanie kąta wyjścia / Filtr dolnoprzepustowy
nagłówekPrzefiltrowany = nagłówekPrzefiltrowany*0,85 + nagłówekStopnie*0,15;
//Wysyłanie wartości nagłówka przez port szeregowy do Processing IDE
Serial.println(odfiltrowany nagłówek);
opóźnienie(50); }
Krok 3: Przetwarzanie kodu źródłowego IDE
Po przesłaniu poprzedniego szkicu Arduino musimy pobrać dane do Processing IDE i narysować Digital Compass. Kompas składa się z obrazu tła, nieruchomego obrazu strzałki i obracającego się obrazu korpusu kompasu. Tak więc wartości pola magnetycznego ziemskiego obliczone za pomocą Arduino są używane do obracania kompasu.
Oto kod źródłowy IDE przetwarzania:
/* Kompas Arduino * * autorstwa Dejana Nedelkovskiego, * www. HowToMechatronics.com * */ import processing.serial.*; import java.awt.event. KeyEvent; import java.io. IOException;
port szeregowy myPort;
PImage imgKompas; PImage imgCompassArrow; Tło obrazu;
Ciąg data="";
kurs pływaka;
pusta konfiguracja () {
rozmiar (1920, 1080, P3D); gładki(); imgCompass = loadImage("Kompas.png"); imgKompasArrow = loadImage("KompasStrzałka.png"); background = loadImage("Tło.png"); myPort = new Serial(to, "COM4", 115200); // uruchamia komunikację szeregową myPort.bufferUntil('\n'); }
nieważne rysowanie () {
obraz(tło, 0, 0); // Wczytuje obraz tła pushMatrix(); przetłumacz(szerokość/2, wysokość/2, 0); // Przekłada układ współrzędnych na środek ekranu, dzięki czemu obrót następuje dokładnie w środku rotateZ(radiany(-heading)); // Obraca kompas wokół Z - Axis image(imgCompass, -960, -540); // Wczytuje obraz kompasu, a gdy układ współrzędnych zostanie przeniesiony, musimy ustawić obraz na -960x, -540y (połowa rozmiaru ekranu) popMatrix(); // Przywraca układ współrzędnych do pierwotnej pozycji 0, 0, 0 image(imgCompassArrow, 0, 0); // Wczytuje obraz CompassArrow, na który nie ma wpływu funkcja rotateZ() z powodu funkcji popMatrix() textSize(30); text("Nagłówek: " + nagłówek, 40, 40); // Wyświetla wartość nagłówka na ekranie
opóźnienie(40);
}
// rozpoczyna odczytywanie danych z portu szeregowego
void serialEvent (Serial myPort) { data = myPort.readStringUntil('\n');// odczytuje dane z portu szeregowego i umieszcza je w zmiennej String "data". nagłówek = float(dane); // Konwersja wartości String na wartość Float }
Mam nadzieję, że spodoba Ci się ten projekt. Jeśli tak, możesz również odwiedzić moją stronę, aby zobaczyć więcej fajnych projektów.
Zalecana:
Arduino Nano - samouczek dotyczący cyfrowego czujnika światła otoczenia BH1715: 4 kroki
Arduino Nano - samouczek dotyczący cyfrowego czujnika oświetlenia otoczenia BH1715: BH1715 to cyfrowy czujnik oświetlenia otoczenia z interfejsem magistrali I²C. BH1715 jest powszechnie używany do uzyskiwania danych dotyczących oświetlenia otoczenia w celu dostosowania mocy podświetlenia wyświetlacza LCD i klawiatury dla urządzeń mobilnych. To urządzenie oferuje 16-bitową rozdzielczość i regulację
Particle Photon - samouczek dotyczący cyfrowego czujnika światła otoczenia BH1715: 4 kroki
Particle Photon - samouczek dotyczący cyfrowego czujnika światła otoczenia BH1715: BH1715 to cyfrowy czujnik światła otoczenia z interfejsem magistrali I²C. BH1715 jest powszechnie używany do uzyskiwania danych dotyczących oświetlenia otoczenia w celu dostosowania mocy podświetlenia wyświetlacza LCD i klawiatury dla urządzeń mobilnych. To urządzenie oferuje 16-bitową rozdzielczość i regulację
Podstawy oprogramowania do haftu cyfrowego Sewart: 4 kroki
Podstawy oprogramowania do haftowania cyfrowego Sewart: Korzystanie z oprogramowania do haftowania cyfrowego może początkowo wydawać się onieśmielające i frustrujące, ale przy odrobinie praktyki i cierpliwości oraz tego SUPER przydatnego przewodnika, w mgnieniu oka staniesz się mistrzem. Ten przewodnik skupi się na korzystaniu z oprogramowania SewArt Embroidery Digitalize
Projekt cyfrowego zamka szyfrowego Arduino za pomocą klawiatury Matrix: 9 kroków
Projekt cyfrowego zamka szyfrowego Arduino za pomocą klawiatury Matrix: Zbuduj cyfrowy zamek szyfrowy z systemem Arduino i Qwiic, używając Zio M Uno i klawiatury Hex 4x3 Matrix.Przegląd projektuW tym projekcie zbudujemy prosty cyfrowy zamek szyfrowy, do którego użytkownicy będą mogli wprowadzać i wprowadzać w. W tym samouczku pokażemy użycie
Używanie taśmy miedzianej do tworzenia cyfrowego bloku zaznaczania: 4 kroki
Używanie taśmy miedzianej do tworzenia cyfrowego podkładki zaznaczania: Częściowo udostępniam tę technikę, a częściowo uczę się, jak korzystać z instrukcji. Jeśli pojawią się problemy z moją dokumentacją techniki lub korzystaniem z Instructables, daj mi znać w komentarzach - dzięki! Potrzebowałem długiego wiersza o