luni, 13 februarie 2023

Senzorul inerțial (gyro) MPU 6050

 MPU-6050 aparține unei clase de dispozitive cunoscute sub numele de unități de măsurare inerțiale sau IMU. Aceste dispozitive pot măsura accelerația, inerția și o serie de alți parametri pentru a vă permite să determinați poziția și viteza lor în spațiu.

IMU-urile precum MPU-6050 sunt în diferite aplicații precum:

-        UAV-uri precum quadcoptere și elicoptere. Aici se folosește un IMU pentru a determina rotirea, înclinarea și rostogolirea și pentru a nivela dispozitivele în timpul zborului.

-        Robotică. De la roboți de echilibrare la brațele robotului, este obișnuit să folosiți IMU-uri pentru a stabili poziția și viteza.

-        Controlere de joc. Jocuri precum Wii folosesc un IMU pentru a detecta nivelul și mișcarea.

-        Telefoane și tablete. Este obișnuit să găsiți IMU-uri în telefoane și tablete pentru a determina orientarea dispozitivului pentru a comuta între modurile portret și peisaj sau în jocuri de exemplu.

-        Hard disk-uri. Un IMU sau un accelerometru este inclus în hard disk-urile concepute pentru utilizare portabilă. Ei pot detecta dacă unitatea este scăpată și pot lua măsurile adecvate, cum ar fi oprirea platourilor și blocarea capetelor.

Accelerometru

Una dintre componentele cheie ale MPU-6050 este un accelerometru. După cum sugerează și numele, acesta este un dispozitiv care poate măsura accelerația.

Accelerația este descrisă ca fiind rata de schimbare a vitezei unui obiect. Un obiect care se mișcă cu o viteză constantă nu are nicio accelerație.

O unitate comună de accelerație este forța G. O forță G aici pe Pământ este de 9,9 metri pe secundă pătrat, care este accelerația gravitației aici. Pe alte planete, cifra este diferită.

Un accelerometru trebuie să ia în considerare accelerația statică, cum ar fi forța gravitațională, atunci când face măsurătorile.

Accelerometrul utilizat în MPU-6050 este un accelerometru cu trei axe, ceea ce înseamnă că detectează accelerația pe axa X, Y și Z.

Giroscop

O altă componentă cheie a MPU-6050 este un giroscop.

Un giroscop poate măsura momentul unghiular sau rotația de-a lungul axei X, Y și Z. Aceste componente sunt critice în menținerea echilibrului pentru aeronave și nave spațiale.

Un giroscop mecanic constă dintr-o roată sau un disc montat astfel încât să se poată roti rapid în jurul unei axe care este liberă să se miște în orice direcție.

 Tipul de giroscop utilizat în MPU-6050 este un „Sistem Micro Electro Mecanic” sau giroscop MEMS. Este format din trei senzori, unul pe axă, care produc o tensiune atunci când sunt rotiti. Această tensiune este eșantionată intern folosind un convertor analog-digital pe 16 biți.

MPU-6050 poate folosi și senzori externi. Aceste dispozitive externe sunt interfațate cu MPU-6050 folosind o a doua magistrală I2C, independentă de magistrala I2C principală.

O utilizare comună pentru această conexiune externă este atașarea unui magnetometru, care poate măsura câmpurile magnetice pe trei axe.

Acest lucru adaugă încă trei grade de libertate, sau DOF, la senzor. În sine, MPU-6050 are 6 DOF, câte trei pentru accelerometru și giroscop. Adăugarea unui magnetometru i-ar da 9 DOF.

MPU-6050 are și un senzor intern de temperatură.

DMP

Datele de la accelerometru, giroscop și orice senzori terți sunt transmise unui procesor intern de mișcare digitală sau DMP.

Acest dispozitiv corelează datele și le formatează pentru a fi utilizate pe magistrala I2C. Este în esență un microprocesor de înaltă performanță care este dedicat procesării datelor de mișcare.

Termenul DMP a fost inventat de Invensense, o divizie a TDK. Aceasta este compania care a dezvoltat MPU-6050, împreună cu multe alte IMU-uri.

Pinouts

MPU-6050 este disponibil în mai multe configurații diferite și pe mai multe module de breakout diferite.

Iată o ilustrare a pinout-urilor modulului pe care îl folosesc în aceste experimente:

Acest modul are un regulator intern de tensiune, deci este alimentat cu o putere de 5 volți. Cipul MPU-6050 în sine folosește logica de 3,3 volți. Modulul are și rezistențe pentru a schimba nivelurile de date la 3,3 volți.

Descrierile de pin ale modulului sunt după cum urmează:

VCC – sursă de alimentare de 5 volți DC.

GND – Pământ

SCL – Aceasta este linia de ceas I2C.

SDA – Linia de date I2C.

XDA – Aceasta este linia externă de date I2C. Busul extern I2C este pentru conectarea senzorilor externi.

XCL – Aceasta este linia externă de ceas I2C.

AD0 – Această linie vă permite să schimbați adresa internă I2C a modulului MPU-6050. Poate fi folosit dacă modulul h este în conflict cu un alt dispozitiv I2C sau dacă doriți să utilizați două MPU-6050 pe aceeași magistrală I2C.

INT – Aceasta este ieșirea de întrerupere.

Dacă utilizați un alt modul, puteți în continuare să efectuați experimentele enumerate aici. Acordați atenție cerințelor de alimentare ale modulului dvs., deoarece unele nu au un regulator intern de tensiune și funcționează pe logica de 3,3 volți.

Rețineți că modulul are și marcaje de orientare, pentru a vă permite să-l poziționați corect în dispozitiv.

MPU-6050 cu Arduino

Înainte de a construi nivelul nostru electronic, să facem un experiment folosind MPU-6050. Pentru a ușura lucrurile, vom folosi câteva biblioteci și vom rula o schiță demonstrativă care este inclusă cu una dintre ele.

Biblioteci I2C și MPU-6050

Bibliotecile pe care le vom folosi în demonstrația noastră fac parte din colecția de biblioteci dezvoltată de Jeff Rowberg pentru a lucra cu magistrala I2C și câțiva senzori I2C obișnuiți. Puteți găsi setul complet de biblioteci pe Github.

Aceasta este o colecție extinsă de biblioteci, nu numai pentru Arduino, ci și pentru o serie de alte microcontrolere comune.

Deoarece este puțin copleșitor, s-ar putea să vă fie util doar să obțineți cele două biblioteci pe care le vom folosi astăzi - biblioteca de dezvoltare I2C și biblioteca MPU-6050.

Dacă doriți mai multe informații despre acest set excelent de biblioteci, vizitați pagina web a lui Jeff dedicată dezvoltării I2C.

 Aceste biblioteci sunt furnizate în format ZIP. Puteți instala fișierele ZIP direct în IDE-ul dvs. Arduino.

Deschideți IDE-ul Arduino.

Selectați meniul Schiță din bara de meniu de sus.

Selectați Includeți biblioteca. Se va deschide un submeniu.

Selectați Adăugați bibliotecă ZIP.

Se va deschide o casetă de dialog. Navigați până unde ați salvat bibliotecile și selectați una dintre ele.

Biblioteca va fi instalată în IDE-ul dvs. Arduino.

Va trebui să repetați acest pas pentru a doua bibliotecă.

Acum că aveți cele două biblioteci adăugate la IDE-ul dvs. Arduino, este timpul să conectați MPU-6050 la Arduino/

 

MPU-6050 și Arduino Hookup

Iată legătura pe care o vom folosi pentru experiment:

Conexiunile sunt destul de simple, deoarece interfețele MPU-6050 folosesc magistrala I2C. Pe Arduino Uno, conexiunile I2C sunt realizate folosind pinii de intrare analogic, A4 este conexiunea SDA și A5 este SCL.

 De asemenea, folosim ieșirea de întrerupere de la MPU-6050. Aceasta se conectează la pinul 2 de pe Arduino Uno, care este numărul de întrerupere 0.

 

Schiță demonstrativă

Când aveți totul conectat, încercați să rulați una dintre schițele demonstrative furnizate în biblioteca MPU-6050 pe care tocmai am instalat-o.

 

Deschideți IDE-ul Arduino.

Selectați meniul Fișier din bara de meniu de sus.

Selectați Exemple. Se va deschide un submeniu.

Derulați în jos submeniul până la secțiunea intitulată Exemple din biblioteci personalizate.

Căutați intrarea MPU6050 și selectați-o.

Se va deschide un alt submeniu care spune Exemple. Selectați-l și vor fi listate două exemple de schițe

Selectați schița MPU6050_DMP6.

Schița este destul de complexă, dar este foarte bine comentată. Vă va oferi o idee despre cât de multă matematică este implicată în extragerea de informații utile din senzorul MPU-6050.

 

Rețineți că va trebui să setați monitorul serial la o viteză de 115200 baud pentru a încerca schița. Există o mulțime de date care sunt trimise înapoi de la IMU și necesită această viteză mai mare pentru a le afișa.

 

Când deschideți monitorul serial cu schița încărcată pe Arduino, ar trebui să vedeți un mesaj care spune că conexiunea la MPU-6050 a fost realizată cu succes. Pentru a începe să rulați schița, trebuie să plasați cursorul în caseta de introducere a monitorului serial și să tastați o literă, apoi apăsați Trimitere (sau doar apăsați Enter de pe tastatură).

 

Veți vedea o mulțime de date care afișează valorile Yaw, Pitch și Roll. Încercați să mutați senzorul și observați cum se modifică datele.



marți, 26 aprilie 2022

Arduino Thermometer with RTC Clock

  This is an update of the previous project TM1637 4-Digit Display Clock Arduino Project . I added a temperature & humidity sensor DHT11 or DHT22.

Schematics:

Source code:

Simple Arduino Project with DHT11/22 sensor and TM1637 LCD

 This is a simple Arduino project based on DHT11 or DHT22 temperature&humidity sensor and TM1637 4 digit 7 segment LCD.



 

Ultrasonic Sensor HC-SR04 Arduino Project

 

The HC-SR04 is an affordable and easy to use distance measuring sensor which has a range from 2cm to 400cm (about an inch to 13 feet).

The sensor is composed of two ultrasonic transducers. One is transmitter which outputs ultrasonic sound pulses and the other is receiver which listens for reflected waves.

How the HC-SR04 Ultrasonic Distance Sensor Works?

It emits an ultrasound at 40 000 Hz which travels through the air and if there is an object or obstacle on its path It will bounce back to the module. Considering the travel time and the speed of the sound you can calculate the distance.

For that purpose we are using the following basic formula for calculating distance:

Distance = Speed x Time

The time is the amount of time the Echo pin was HIGH, and the speed is the speed of sound which is 340m/s. There’s one additional step we need to do, and that’s divide the end result by 2. and that’s because we are measuring the duration the sound wave needs to travel to the object and bounce back.

How to Connect HC-SR04 Ultrasonic Sensor to Arduino

Here’s how we need to connect the HC-SR04 sensor to an Arduino board.



 

HC-SR04 Ultrasonic Sensor Arduino Code

Here’s a code for measuring distance using the HC-SR04 ultrasonic sensor and Arduino.

luni, 18 aprilie 2022

TM1637 4-Digit Display Clock Arduino Project

 This project shows you how to make a digital clock using a TM1637 4-digit 7-segment display with Arduino.


TM1637 4-Digit Display Clock Source Code