- Componente necesare:
- Senzor giroscopic MPU6050:
- Descriere:
- Schema și explicația circuitului:
- Configurarea Raspberry Pi pentru senzorul Gyro MPU6050:
- Explicație de programare:
Senzorul MPU6050 are multe funcții asupra unui singur cip. Este format dintr-un accelerometru MEMS, un giroscop MEMS și un senzor de temperatură. Acest modul este foarte precis în timp ce convertește valorile analogice în digitale deoarece are un convertor de 16 biți analog în digital pentru fiecare canal. Acest modul este capabil să capteze canalele x, y și z în același timp. Are o interfață I2C pentru a comunica cu controlerul gazdă. Acest modul MPU6050 este un cip compact care are atât accelerometru, cât și giroscop. Acesta este un dispozitiv foarte util pentru multe aplicații precum drone, roboți, senzori de mișcare. Se mai numește giroscop sau accelerometru cu trei axe.
Astăzi, în acest articol, vom interfața acest MPU6050 cu Raspberry Pi și vom afișa valorile pe 16x2 LCD.
Componente necesare:
- Raspberry Pi
- MPU-6050
- GHID 10K
- Sârmă jumper
- Breadboard
- Alimentare electrică
Senzor giroscopic MPU6050:
MPU-6050 este un giroscop cu 8 axe și un accelerometru într-un singur cip. Acest modul funcționează în mod implicit pe comunicația serială I2C, dar poate fi configurat pentru interfața SPI configurându-l registru. Pentru I2C, acesta are linii SDA și SCL. Aproape toți pinii funcționează mult, dar aici continuăm doar cu pinii de mod I2C.
Configurarea pinului:
Vcc: - acest pin este utilizat pentru alimentarea modulului MPU6050 în raport cu solul
GND: - acesta este un știft de masă
SDA: - pinul SDA este utilizat pentru date între controler și modulul mpu6050
SCL: - Pinul SCL este utilizat pentru intrarea ceasului
XDA: - Aceasta este linia de date a senzorului I2C SDA pentru configurarea și citirea de la senzori externi ((opțional) neutilizați în cazul nostru)
XCL: - Aceasta este linia de ceas a senzorului I2C SCL pentru configurarea și citirea de la senzori externi ((opțional) neutilizați în cazul nostru)
ADO: - I2C Slave Address LSB (nu se aplică în cazul nostru)
INT: - Pin de întrerupere pentru indicarea datelor gata.
Am interfațat anterior MPU6050 cu Arduino.
Descriere:
În acest articol, afișăm citiri de temperatură, giroscop și accelerometru pe ecranul LCD folosind MPU6050 cu Raspberry Pi. Dacă sunteți nou în Raspberry Pi, accesați secțiunea noastră de tutoriale Raspberry Pi și aflați cum să începeți cu Raspberry Pi.
În acest proiect, am arătat mai întâi valoarea temperaturii pe ecranul LCD și, după un timp, afișăm valorile giroscopice și apoi, după un timp, avem citiri ale accelerometrului, așa cum se arată în imaginile de mai jos:
Schema și explicația circuitului:
Diagrama circuitului, pentru interfațarea MPU6050 cu Raspberry Pi, este foarte simplă aici am folosit un LCD și MPU6050. O oală de 10k este utilizată pentru controlul luminozității ecranului LCD. În legătură cu MPU6050, am realizat 4 conexiuni în care am conectat sursa de alimentare de 3.3v și împământarea MPU6050 la 3.3v și la masa Raspberry Pi. Pinii SCL și SDA ai MPU6050 sunt conectați cu pinul fizic 3 (GPIO2) și pinul 5 (GPIO3) al Raspberry. LCD-urile RS, RW și EN sunt conectate direct la GPIO18 și 23 de raspberry pi. Pinul de date este conectat direct la numărul PIN digital GPIO24, GPIO25, GPIO8 și GPIO7. Aflați mai multe despre interfața LCD cu Raspberry Pi aici.
Configurarea Raspberry Pi pentru senzorul Gyro MPU6050:
Înainte de a începe programarea, trebuie să activăm i2c din Raspberry Pi utilizând metoda dată:
Pasul 1: activați comunicarea I2C
Înainte de a instala biblioteca Adafruit SSD1306, trebuie să activăm comunicarea I2C în Raspberry Pi.
Pentru a face acest tip în consola Raspberry Pi:
sudo raspi -config
Și apoi va apărea un ecran albastru. Acum selectați opțiunea de interfață
După aceasta, trebuie să selectăm I2C
(…)
După aceasta, trebuie să selectăm da și să apăsăm Enter și apoi OK
După aceasta, trebuie să repornim raspberry pi prin lansarea comenzii de mai jos:
sodo reboot
Pasul 2: Instalați python-pip și biblioteca GPIO
sudo apt-get install build-essential python-dev python-pip
După aceasta, trebuie să instalăm biblioteca GPIO raspberry pi
sudo pip instalează RPi.GPIO
Pasul 3: Instalați biblioteca smbus
În cele din urmă, trebuie să instalăm biblioteca smbus în Raspberry Pi utilizând comanda dată:
sudo apt-get install python-smbus
Pasul 4: Instalați biblioteca MPU6050
După aceasta, trebuie să instalăm biblioteca MPU6050 utilizând comanda dată
sudo pip instala mpu6050
Acum putem găsi exemple de coduri în exemple. Utilizatorul poate testa codul respectiv încărcându-l direct pe Raspberry Pi sau personalizându-l în funcție de cerință. Aici am afișat valorile axelor X, Y și Z ale MPU6050 pe un ecran LCD de 16x2. Puteți găsi întregul cod Python la sfârșitul Tutorialului.
Explicație de programare:
Codul complet Python este dat la sfârșit aici explicăm câteva părți importante ale codului.
În programul Python, am importat unele biblioteci necesare, cum ar fi ora, smbus și GPIO.
import smbus timp import import RPi.GPIO ca gpio
După aceasta, trebuie să luăm o anumită adresă de registru pentru a configura MPU6050 și pentru a obține valori de la aceeași. De asemenea, am luat câteva variabile pentru calibrarea și inițializarea magistralei pentru I2C.
PWR_M = 0x6B DIV = 0x19 CONFIG = 0x1A GYRO_CONFIG = 0x1B INT_EN = 0x38 ACCEL_X = 0x3B ACCEL_Y = 0x3D ACCEL_Z = 0x3F GYRO_X = 0x43 GYRO_Y = 0x45 GYRO_Z = 0x AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Apoi am scris unele funcții de conducere 16x2LCD cum ar începe def (), cmd def (ch), scrie def (ch), Print def (str), def clar (), etc . Puteți verifica în continuare interfața LCD cu Raspberry Pi.
După aceasta, trebuie să inițializăm modulul MPU6050
def InitMPU (): bus.write_byte_data (Device_Address, DIV, 7) bus.write_byte_data (Device_Address, PWR_M, 1) bus.write_byte_data (Device_Address, CONFIG, 0) bus.write_byte_data (Device_AddressBy_Direct_By, GYRO, INT_EN, 1) time.sleep (1)
După aceasta, trebuie să scriem câteva funcții pentru a citi valorile din MPU6050 și a le afișa pe LCD. Funcția dată este utilizată pentru a citi datele din MPU6050
read read MPU (addr): high = bus.read_byte_data (Device_Address, addr) low = bus.read_byte_data (Device_Address, addr + 1) value = ((high << 8) - low) if (value> 32768): value = value - 65536 valoarea returnată
Funcția dată este utilizată pentru a citi datele accelerometrului și girometrului
def accel (): x = readMPU (ACCEL_X) y = readMPU (ACCEL_Y) z = readMPU (ACCEL_Z) Ax = (x / 16384.0-AxCal) Ay = (y / 16384.0-AyCal) Az = (z / 16384.0-AzCal) #print "X =" + str (Ax) display (Ax, Ay, Az) time.sleep (.01) def gyro (): global GxCal global GyCal global GzCal x = readMPU (GYRO_X) y = readMPU (GYRO_Y) z = readMPU (GYRO_Z) Gx = x / 131.0 - GxCal Gy = y / 131.0 - GyCal Gz = z / 131.0 - GzCal #print "X =" + str (Gx) display (Gx, Gy, Gz) time.sleep (. 01)
După aceasta, am scris o funcție de citire a temperaturii
def temp (): tempRow = readMPU (TEMP) tempC = (tempRow / 340.0) + 36.53 tempC = "%. 2f"% tempC print tempC setCursor (0,0) Print ("Temp:") Print (str (tempC)) time.sleep (.2)
funcția def calibrate () este utilizată pentru calibrarea MPU6050 și funcția def display () este utilizată pentru a afișa valorile pe LCD. Verificați aceste funcții în codul complet de mai jos.
După aceasta, am început LCD-ul, inițializăm și calibrăm MPU6050 și apoi în bucla while am apelat toate cele trei seturi de valori de la temperatura MPU , accelerometru și giroscop și le-am arătat pe LCD.
începe(); Print ("MPU6050 Interface") setCursor (0,1) Print ("Circuit Digest") time.sleep (2) InitMPU () calibrate () în timp ce 1: InitMPU () clear () pentru i în intervalul (20): temp () clear () Print ("Accel") time.sleep (1) for i in range (30): accel () clear () Print ("Gyro") time.sleep (1) for i in range (30): giroscop ()
Ambele giroscop și accelerometru MPU6050 sunt utilizate pentru a detecta poziția și orientarea oricărui dispozitiv. Gyro folosește gravitația pământului pentru a determina pozițiile axelor x, y și z și accelerometrul detectează pe baza ratei schimbării mișcării. Am folosit deja accelerometrul cu Arduino în multe dintre proiectele noastre precum:
- Robot controlat prin gesturi de mână bazat pe accelerometru
- Sistem de alertă în caz de accident bazat pe vehicul Arduino
- Alarmă detector cutremur folosind Arduino