Spisu treści:

Sterowanie serwo za pomocą MPU6050 między Arduino i ESP8266 z HC-12: 6 kroków
Sterowanie serwo za pomocą MPU6050 między Arduino i ESP8266 z HC-12: 6 kroków

Wideo: Sterowanie serwo za pomocą MPU6050 między Arduino i ESP8266 z HC-12: 6 kroków

Wideo: Sterowanie serwo za pomocą MPU6050 między Arduino i ESP8266 z HC-12: 6 kroków
Wideo: GENERATOR KODU ARDUINO: Sterowanie pojazdem przez bluetooth - #21 2024, Listopad
Anonim
Sterowanie serwo za pomocą MPU6050 między Arduino i ESP8266 z HC-12
Sterowanie serwo za pomocą MPU6050 między Arduino i ESP8266 z HC-12

W tym projekcie kontrolujemy położenie serwonapędu za pomocą mpu6050 i HC-12 do komunikacji między Arduino UNO i ESP8266 NodeMCU.

Krok 1: O TYM PROJEKCIE

Jest to kolejny projekt IoT oparty na module HC-12 RF. Tutaj dane imu(mpu6050) z arduino służą do sterowania serwomotorem (połączonym z Nodemcu). Tutaj wizualizacja danych jest również wykonywana po stronie arduino, gdzie dane skoku mpu6050 (obrót wokół osi x) są wizualizowane za pomocą szkicu przetwarzania (omówionego później). Zasadniczo ten projekt jest tylko trochę rozgrzewką do zapamiętania różnych aspektów sterowania Imu i Servo za pomocą Arduino i ESP8266 nodemcu.

CEL

Cel tego jest całkiem jasny: Kontrolujemy pozycję silnika serwo za pomocą wartości skoku IMU. A wszystko razem to skok i zsynchronizowana pozycja silnika jest wizualizowana za pomocą funkcji Processing.

Krok 2: Wymagany sprzęt

Moduł NodeMCU ESP8266 12E Wifi

Płytka stykowa bez lutowania

Przewód połączeniowy

MPU6050 przyspieszenie+żyroskop

Moduły RF HC-12 (para)

Silnik serwo SG90

Krok 3: Obwód i połączenia

Obwód i połączenia
Obwód i połączenia
Obwód i połączenia
Obwód i połączenia

Połączenia są proste. Możesz zasilać serwo napięciem 3,3 V z Twojego Nodemcu. Możesz także użyć Vin do zasilania serwa, jeśli twój nodemcu ma tak duże napięcie na tym pinie. Ale większość płyt Lolin nie ma 5V na Vin (zależy od producenta).

Te schematy obwodów są wykonane przy użyciu EasyADA.

Krok 4: PRACA

PRACUJĄCY
PRACUJĄCY

Gdy tylko rozpocznie się szkic arduino, wyśle on kąt nachylenia (który waha się od -45 do 45) do odbiornika hc12 Nodemcu, który zostanie zmapowany z pozycją Servo od 0 do 180 stopni. Tutaj użyliśmy kąta nachylenia od -45 do +45 stopni, abyśmy mogli łatwo zmapować to do pozycji Servo.

Teraz zastanawiasz się, dlaczego możemy po prostu użyć metody mapy w następujący sposób: –

int poz = mapa(val, -45, 45, 0, 180);

Ponieważ ujemny kąt wysyłany przez nadajnik hc12 odbierany jest jako:

1. połowa: (T)0 do 45 => 0 do 45(R)

2. połowa: (T)-45 do -1 => 255 do 210(R)

Więc musisz zmapować to od 0 do 180, ponieważ

if(wartość>=0 && wartość<=45) pos = (wartość*2)+90; w przeciwnym razie poz = (val-210)*2;

Unikam metody mapy z powodu jakiegoś nieistotnego błędu. Możesz spróbować i skomentować, że działa z tobą

if(wartość>=0 && wartość<=45) pos = map(wartość, 0, 45, 90, 180); w przeciwnym razie pos = map(val, 255, 210, 0, 90); // czwartym argumentem może być 2 (możesz sprawdzić)

MPU6050 Obliczanie kąta nachylenia

Używam biblioteki MPU6050_tockn, która opiera się na podawaniu surowych danych z IMU.

int pitchAngle = mpu6050.getAngleX()

To da nam kąt obrotu wokół osi x. Jak widać na rysunku, moje imu jest ustawione pionowo na płytce stykowej, więc nie pomyl z pitch and roll. Właściwie zawsze powinieneś zobaczyć oś wydrukowaną na tablicy zaciskowej.

Dzięki tej bibliotece nie musisz przejmować się wewnętrzną elektroniką odczytu określonych rejestrów do konkretnej operacji. tylko określasz pracę i gotowe!

Btw jeśli chcesz sam obliczyć kąt. Możesz to łatwo zrobić w następujący sposób:

#włączać

const int MPU6050_addr=0x68; int16_t AcX, AcY, AcZ, Temp, żyroskop, żyroskop, żyroskop; void setup(){ Wire.begin(); Wire.beginTransmission(MPU6050_addr); Wire.write(0x6B); Wire.write(0); Wire.endTransmission(prawda); Serial.początek(9600); } void loop(){ Wire.beginTransmission(MPU6050_addr); Wire.write(0x3B); Wire.endTransmission(fałsz); Wire.requestFrom(MPU6050_addr, 14, prawda); AcX=Przewód.odczyt()<<8|Przewód.odczyt(); AcY=Przewód.odczyt()<<8|Przewód.odczyt(); AcZ=Przewód.odczyt()<<8|Przewód.odczyt(); Temp=Przewód.odczyt()<<8|Przewód.odczyt(); GyroX=Przewód.odczyt()<<8|Przewód.odczyt(); ŻyroskopY=Przewód.odczyt()<<8|Przewód.odczyt(); GyroZ=Przewód.odczyt()<<8|Przewód.odczyt();

int xAng = mapa(AcX, minVal, maxVal, -90, 90); int yAng = mapa(AcY, minVal, maxVal, -90, 90); int zAng = mapa(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= "); // Skok Serial.println(x); Serial.print("KątY= "); //Rolka Serial.println(y); Serial.print("AngleZ= "); //Odchylenie Serial.println(z); }

Ale nie jest konieczne pisanie tak dużej ilości kodu, aby uzyskać kąt. Powinieneś znać fakty za kulisami, ale korzystanie z biblioteki innych osób jest bardzo skuteczne w wielu projektach. Możesz przeczytać o tym imu i innych podejściach, aby uzyskać więcej przefiltrowanych danych, klikając poniższy link: Explore-mpu6050.

Mój kod arduino na końcu nadawczym ma tylko 30 linii z pomocą biblioteki MPU6050_tockn, więc korzystanie z biblioteki jest dobre, chyba że nie potrzebujesz podstawowych zmian w funkcjonalności IMU. Biblioteka o nazwie I2Cdev autorstwa Jeffa Rowberga jest bardzo pomocna, jeśli potrzebujesz przefiltrowanych danych za pomocą DMP (Digital Motion Processor) IMU.

Integracja z przetwarzaniem

Tutaj Przetwarzanie służy do wizualizacji danych obrotowych dotyczących osi X IMU, obliczonych na podstawie nieprzetworzonych danych pochodzących z MPU6050. Przychodzące surowe dane w SerialEvent otrzymujemy w następujący sposób:

void serialEvent(Serial myPort) {

inString = mójPort.odczytajString(); try { // Parsowanie danych //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(ciągi danych[i+1]); } } else { println(inString); } } } catch (Wyjątek e) { println("Złapany wyjątek"); } }

Tutaj możesz zobaczyć wizualizację na obrazku załączonym w tym kroku. Dane pozycji otrzymane na końcu nodemcu są również widoczne na monitorze szeregowym, jak pokazano na obrazku.

Krok 5: KOD

Załączyłem repozytorium github. Możesz go sklonować i rozwidlić, aby użyć go w swoich projektach.

mój_kod

Repo zawiera 2 szkic arduino dla nadajnika (arduino + IMU) i odbiornika (Nodemcu + Servo).

I jeden szkic obróbki. Oznacz gwiazdką repozytorium, jeśli to pomoże w Twoim projekcie.

W tej instrukcji, R-odbiornik i T-nadajnik

Krok 6: PREZENTACJA WIDEO

Film dołączę jutro. Obserwuj mnie, aby otrzymywać powiadomienia.

Dziękuję wam wszystkim!

Zalecana: