- Ano ang isang Accelerometer at Gyroscopic sensor?
- MPU6050 Accelerometer at Gyroscopic Sensor Module
- Kinakailangan ang Mga Bahagi
- Diagram ng Circuit
- Paliwanag sa Programming
Ang MPU6050 ay isang IC 3-axis accelerometer at isang 3-axis gyroscope na pinagsama sa isang yunit. Naglalagay din ito ng isang sensor ng temperatura at isang DCM upang maisagawa ang isang kumplikadong gawain. Ang MPU6050 ay karaniwang ginagamit sa pagbuo ng Drone at iba pang mga remote robot tulad ng isang self-balancing robot. Sa proyektong ito magtatayo kami ng isang Digital Protractor gamit ang MPU6050 at Arduino. Dito ginagamit ang isang servo motor upang ipakita ang anggulo sa isang imahe ng protractor. Ang servo motor shaft ay naka-attach sa isang karayom na kung saan ay iikot sa protractor na imahe upang ipahiwatig ang anggulo na ipinakita rin sa isang 16xLCD display. Bago pumunta sa mga detalye alamin natin ang tungkol sa sensor ng Gyroscope.
Ano ang isang Accelerometer at Gyroscopic sensor?
Ginagamit ang isang accelerometer upang masukat ang pagpabilis. Talagang nararamdaman nito ang parehong static at pabago-bagong pagpabilis. Halimbawa, ang mga mobile phone ay gumagamit ng sensor ng accelerometer upang maunawaan na ang mobile ay nasa landscape mode o portrait mode. Ginamit namin dati ang Accelerometer kasama ang Arduino upang makabuo ng maraming mga proyekto tulad ng:
Ginagamit ang isang gyroscope upang masukat angular na tulin na gumagamit ng gravity ng lupa upang matukoy ang oryentasyon ng bagay na gumalaw. Angular velocity ay ang rate ng pagbabago ng anggular na posisyon ng isang umiikot na katawan.
Halimbawa, ang mga today mobiles ay gumagamit ng mga gyroscopic sensor upang maglaro ng mga mobile game ayon sa oryentasyon ng mobile phone. Gayundin, ang VR headset ay gumagamit ng sensor ng gyroscope upang magkaroon ng mga view sa oryentasyong 360
Kaya't habang masusukat ng accelerometer ang linear acceleration, makakatulong ang gyroscope na mahanap ang rotational acceleration. Kapag ginagamit ang parehong mga sensor bilang magkakahiwalay na mga module ay nahihirapang makahanap ng oryentasyon, posisyon at bilis. Ngunit sa pamamagitan ng pagsasama-sama ng dalawang mga sensor gumagana ito bilang isang Inertial Measurement Unit (IMU). Kaya't sa module ng MPU6050, ang accelerometer at gyroscope ay naroroon sa isang solong PCB upang makahanap ng oryentasyon, posisyon at bilis.
Mga Aplikasyon:
- Ginamit sa Drones para sa kontrol sa direksyon
- Mga robot na nagpapabalanse sa sarili
- Pagkontrol sa robotic braso
- Ikiling sensor
- Ginamit sa mga Mobile phone, Video game console
- Mga Robot na Humanoid
- Ginamit sa Aircraft, Automotive atbp.
MPU6050 Accelerometer at Gyroscopic Sensor Module
Ang MPU6050 ay isang Micro Electro-Mechanical Systems (MEMS) na binubuo ng isang 3-axis na Accelerometer at 3-axis Gyroscope sa loob nito. Mayroon din itong sensor ng temperatura.
Maaari itong sukatin:
- Pagpapabilis
- Bilis
- Oryentasyon
- Paglipat
- Temperatura
Ang module na ito ay mayroon ding isang (DMP) Digital Motion Processor sa loob nito na may sapat na kapangyarihan upang maisagawa ang kumplikadong pagkalkula at sa gayon ay palayain ang trabaho para sa Microcontroller.
Ang module ay mayroon ding dalawang mga auxiliary pin na maaaring magamit upang mai-interface ang panlabas na mga module ng IIC tulad ng isang magnetometer. Dahil ang IIC address ng module ay mai-configure, higit sa isang sensor ng MPU6050 ang maaaring ma-interfaced sa isang Microcontroller gamit ang AD0 pin.
Mga Tampok at pagtutukoy:
- Supply ng Kuryente: 3-5V
- Komunikasyon: I2C protocol
- Ang built-in na 16-bit ADC ay nagbibigay ng mataas na kawastuhan
- Ang Built-in DMP ay nagbibigay ng mataas na kapangyarihan sa computational
- Maaaring magamit upang mag-interface sa iba pang mga aparato ng IIC tulad ng magnetometer
- I-configure ang IIC Address
- In-built na sensor ng Temperatura
Pinout ng MPU6050:
Numero ng Pin | Pangalan ng Pin | Gamitin |
1 | Vcc | Nagbibigay ng lakas para sa module, maaaring maging + 3V hanggang + 5V. Kadalasan ginagamit ang + 5V |
2 | Lupa | Nakakonekta sa Ground ng system |
3 | Serial Clock (SCL) | Ginamit para sa pagbibigay ng pulso ng orasan para sa I2C Communication |
4 | Serial Data (SDA) | Ginamit para sa paglilipat ng Data sa pamamagitan ng komunikasyon ng I2C |
5 | Auxiliary Serial Data (XDA) | Maaaring magamit upang i-interface ang iba pang mga module ng I2C sa MPU6050. Opsyonal ito |
6 | Auxiliary Serial Clock (XCL) | Maaaring magamit upang i-interface ang iba pang mga module ng I2C sa MPU6050. Opsyonal ito |
7 | AD0 | Kung higit sa isang MPU6050 ang ginamit isang solong MCU, kung gayon ang pin na ito ay maaaring magamit upang maiiba ang address |
8 | Makagambala (INT) | Makagambala pin upang ipahiwatig na ang data ay magagamit para mabasa ng MCU. |
Ginamit namin dati ang MPU6050 kasama ang Arduino upang mabuo ang Self Balancing Robot at Inclinometer.
Kinakailangan ang Mga Bahagi
- Arduino UNO
- MPU6050 Gyroscope Module
- 16x2 LCD Display
- Potensyomiter 10k
- SG90-Servo Motor
- Larawan ng Protractor
Diagram ng Circuit
Ang diagram ng circuit para sa DIY Arduino Protractor na ito ay ibinibigay sa ibaba:
Mga Koneksyon sa Circuit sa pagitan ng Arduino UNO at MPU6050:
MPU6050 |
Arduino UNO |
VCC |
+ 5V |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Mga Koneksyon sa Circuit sa pagitan ng Arduino UNO at Servo Motor:
Servo Motor |
Arduino UNO |
PULA (VCC) |
+ 5V |
ORANGE (PWM) |
9 |
BROWN (GND) |
GND |
Mga Koneksyon sa Circuit sa pagitan ng Arduino UNO at 16x2 LCD:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Sa Potentiometer Center PIN Para sa Pagkontrol ng Contrast ng LCD |
Ang RS |
2 |
RW |
GND |
E |
3 |
D4 |
4 |
D5 |
5 |
D6 |
6 |
D7 |
7 |
A |
+ 5V |
K |
GND |
Paliwanag sa Programming
Tulad ng dati ang kumpletong programa na may isang Demonstration video ay ibinibigay sa pagtatapos ng tutorial na ito.
Narito ang servo motor ay konektado sa Arduino at ang baras nito ay inaasahang sa protractor na imahe na nagpapahiwatig ng anggulo ng hilig na MPU6050. Ang programa para sa tutorial na ito ay simple. Tingnan natin ito nang detalyado.
Isama muna ang lahat ng kinakailangang mga silid-aklatan - Servo Motor library para sa paggamit ng Servo, LCD library para sa paggamit ng LCD at Wire library para sa paggamit ng komunikasyon sa I2C.
Gumagamit ang MPU6050 ng I2C Communication at samakatuwid, dapat itong konektado lamang sa I2C Pins ng Arduino. Kaya, ang Wire.h library ay ginagamit upang maitaguyod ang komunikasyon sa pagitan ng Arduino UNO at MPU6050. Nauna kaming nakipag-ugnayan sa MPU6050 kay Arduino at ipinakita ang x, y, z na mga coordinate na halaga sa 16x2 LCD.
# isama
Susunod na tukuyin ang mga pin na display ng LCD na RS, E, D4, D5, D6, D7 na konektado sa Arduino UNO.
LiquidCrystal lcd (2,3,4,5,6,7);
Susunod na ang I2C address ng MPU6050 ay tinukoy.
const int MPU_addr = 0x68;
Pagkatapos ay ipasimula ang object ng myservo para sa paggamit ng Servo class at tatlong variable upang maiimbak ang mga halagang X, Y at Z axis.
Servo MyServo; int16_t axis_X, axis_Y, axis_Z;
Ang susunod na minimum at maximum na halaga ay itinakda bilang 265 at 402 para sa pagsukat ng anggulo mula 0 hanggang 360.
int minVal = 265; int maxVal = 402;
walang bisa ang pag-setup ():
Sa walang bisa na pag- andar ng pag- setup unang nagsimula ang komunikasyon ng I2C at nagsimula ang paghahatid sa MPU6050 na may address na 0x68.
Wire.begin (); Wire.beginTransmission (MPU_addr);
Ilagay ang MPU6050 sa Sleep Mode sa pamamagitan ng pagsulat ng 0x6B at pagkatapos gisingin ito sa pamamagitan ng pagsulat ng 0
Wire.write (0x6B); Wire.write (0);
Matapos gawing aktibo ang MPU6050, tapusin ang paghahatid
Wire.endTransmission (totoo);
Dito ang PWM pin ng Servo motor ay konektado sa Arduino UNO pin 9.
myservo.attach (9);
Kaagad na pinapagana namin ang circuit ang LCD ay nagpapakita ng isang maligayang mensahe at i-clear ito pagkatapos ng 3 segundo
lcd.begin (16,2); // Nagtatakda ng LCD sa 16X2 Mode lcd.print ("CIRCUIT DIGEST"); pagkaantala (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("MPU6050"); pagkaantala (3000); lcd.clear ();
void loop ():
Muli, ang komunikasyon ng I2C ay nagsimula sa MPU6050.
Wire.beginTransmission (MPU_addr);
Pagkatapos magsimula sa pagrehistro 0x3B (ACCEL_XOUT_H)
Wire.write (0x3B);
Ngayon ang proseso ay nai-restart ng itinakdang pagtatapos ng paghahatid bilang maling ngunit ang koneksyon ay aktibo.
Wire.endTransmission (false);
Pagkatapos nito humiling ka ngayon ng data mula sa 14 na rehistro.
Wire.requestFrom (MPU_addr, 14, totoo);
Ang mga respetadong halaga ng rehistro ng axis (x, y, z) ay nakuha at nakaimbak sa mga variable na axis_X, axis_Y, axis_Z.
axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Pagkatapos i-map ang mga halagang iyon mula 265 hanggang 402 bilang -90 hanggang 90. Ginagawa ito para sa lahat ng tatlong palakol.
int xAng = mapa (axis_X, minVal, maxVal, -90,90); int yAng = mapa (axis_Y, minVal, maxVal, -90,90); int zAng = mapa (axis_Z, minVal, maxVal, -90,90);
Ang pormula upang makalkula ang x halaga sa degree (0 hanggang 360) ay ibinibigay sa ibaba. Dito namin nai-convert ang x dahil ang pag-ikot ng servo motor ay batay sa paggalaw ng x halaga.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI);
Ang halagang X na anggulo, mula 0 hanggang 360 deg, ay ginawang 0 hanggang 180.
int pos = mapa (x, 0,180,0,180);
Pagkatapos ay isulat ang halaga ng anggulo upang paikutin ang servo sa protractor na imahe at I-print ang mga halagang iyon sa 16x2 LCD display.
myservo.write (pos); lcd.setCursor (0,0); lcd.print ("Angle"); lcd.setCursor (0,1); lcd.print (x); pagkaantala (500); lcd.clear ();
Kaya't ito ay kung paano magagamit ang MPU6050 na may Arduino upang masukat ang anggulo. Ang kumpletong code at video para sa proyektong ito ay ibinibigay sa ibaba.