Orodha ya maudhui:

Arduino & MPU6050 Kulingana na Kiwango cha Roho wa Dijiti: 3 Hatua
Arduino & MPU6050 Kulingana na Kiwango cha Roho wa Dijiti: 3 Hatua

Video: Arduino & MPU6050 Kulingana na Kiwango cha Roho wa Dijiti: 3 Hatua

Video: Arduino & MPU6050 Kulingana na Kiwango cha Roho wa Dijiti: 3 Hatua
Video: Lesson 25: HT16K33 4 digit display | Arduino Step By Step Course 2024, Novemba
Anonim
Image
Image
Mzunguko
Mzunguko

Karibu kwenye mafunzo yangu ya kwanza kabisa! Natumai kuwa utaipata ikiwa ya kuelimisha. Tafadhali jisikie huru kuacha maoni iwe chanya au hasi.

Mradi huu ni kutengeneza kiwango cha roho ya dijiti ya arduino & MPU6050. Wakati muundo na nambari iliyomalizika ni yangu, dhana ya asili na nambari nyingi ambazo nimefanya kazi kutoka sio. Siko katika wizi wa wizi, kwa hivyo ninafurahi zaidi kutoa sifa kwa wale ambao maoni yangu nimejenga. Watu wakuu 2 ambao ninataka kutoa kelele ni Paul McWhorter wa YouTuber na Warsha ya DroneBot. Ninajumuisha viungo kwao kwenye viungo vyangu muhimu vya youtube vya PDF. Asante pia kwa EEEnthusiast kwa video yake ya kufundisha juu ya kutumia MPU6050 pamoja na kuanzisha na kusoma kutoka kwa moduli bila maktaba ya nje (kiunga chake kiko katika PDF hiyo hiyo).

Mradi ambao nimetengeneza, hufanya kazi 'kama ilivyo' na ni hadithi ya hadithi, hakika hadi 45% kwa mwelekeo wowote. Unaweza kuitumia haswa kama nilivyoibuni, au unaweza kuifanya iwe sawa na ladha yako mwenyewe. Wajuzi zaidi kwako wataona kuwa mradi wangu unaonekana karibu sawa na ule uliozalishwa na semina ya DroneBot, lakini hakikisha, kuna tofauti za maana, haswa linapokuja suala la nambari ya kuhesabu pembe, pamoja na kituo cha kuhifadhi maadili ya upimaji Eeprom!

Vipengele vingine vya kuchochea hamu yako:

Pembe na pembe za roll zinazopatikana kwa ndani ya 0.1 ya digrii.

Gundua kiotomatiki mwelekeo wa kitengo cha gyro (usawa au wima)

Usawazishaji kamili na matokeo yaliyohifadhiwa kiotomatiki kwa eeprom

Dalili ya LED kutoka digrii -2 hadi +2 (inayoweza kubadilika kwa msimbo)

Dalili ya ziada ya sauti ya kiwango (inaweza kuwashwa / kuzimwa kwa nzi)

Njia nyembamba inayohitaji vifaa vichache

Tuanze.

Vifaa

Mradi huu (kama ilivyo) unatumia vitu vifuatavyo:

1 x Arduino nano (yangu ni kiumbe)

1 x MPU6050 moduli ya gyro / accelerometer

1 x LCD - 16 x 2 + I2C unganisho

1 x Kushinikiza kufanya kubadili

1 x Piezo buzzer

1 x Kijani cha LED

2 x za LED za Njano

2 x Nyekundu ya LED

Vipimo 5 x 220 ohm

Kamba anuwai za kuruka

Bodi ya mkate

Ugavi wa umeme (mgodi ulitumia benki ya umeme ya 5v USB, wakati haujaunganishwa kwenye PC yangu, lakini unaweza kutumia betri iliyounganishwa ipasavyo)

Hatua ya 1: Mzunguko

Mzunguko
Mzunguko
Mzunguko
Mzunguko

Kwa kudhani una vifaa vyote, utahitaji kujenga ubao wako wa mkate.

Ninaonyesha usanidi wangu kama mwongozo, lakini unganisho ni kama ifuatavyo:

Pini ya Arduino D2 inaunganisha kwa upande 1 wa kubadili kushinikiza. Upande wa pili wa kitufe cha kushinikiza unaunganisha ardhi

Pini ya Arduino D3 inaunganisha kwa upande 1 wa kontena la 220 ohm. Upande mwingine wa kontena huunganisha na annode ya Red LED. Cathode ya Red LED huenda chini.

Pini ya Arduino D4 inaunganisha kwa upande 1 wa kontena la 220 ohm. Upande mwingine wa kontena huunganisha na annode ya LED ya Njano. Cathode ya LED ya Njano huenda chini.

Pini ya Arduino D5 inaunganisha kwa upande 1 wa kontena la 220 ohm. Upande mwingine wa kontena huunganisha na annode ya Green Green. Cathode ya Green LED huenda chini.

Pini ya Arduino D6 inaunganisha kwa upande 1 wa kontena la 220 ohm. Upande mwingine wa kontena huunganisha na annode ya LED ya Njano. Cathode ya LED ya Njano huenda chini.

Pini ya Arduino D7 inaunganisha kwa upande 1 wa kontena la 220 ohm. Upande mwingine wa kontena huunganisha kwa annode ya Red LED. Cathode ya Red LED huenda chini.

Pini ya Arduino D8 inaunganisha upande mmoja wa buzzer ya Piezo. Upande mwingine wa buzzer unaunganisha na ardhi.

Pini ya Arduino A4 inaunganisha na pini za SDA kwenye MPU6050 NA LCD.

Pini ya Arduino A5 inaunganisha na pini za SCL kwenye MPU6050 NA LCD

Nguvu ya 5v na Gnd ya MPU6050 na LCD hutoka kwa pini za Arduino Nano 5v na GND mtawaliwa.

Ukimaliza, inapaswa kuwa sawa na usanidi wangu ulioonyeshwa. Niliweka blu tak chini ya MPU6050 kuizuia isonge na pia kwenye LCD ili kuiweka pembeni mwa ubao wa mkate.

Hatua ya 2: Kanuni

Nambari iliyoambatanishwa ni nambari ambayo nimetumia kwa mradi huu. Maktaba pekee ambayo unaweza kuwa na shida nayo ni

Maktaba ya LiquidCrystal_I2C.h nilipoingiza hii wakati nilipoanza kufanya kazi na LCD's. Kwa bahati mbaya, kuna maktaba machache ambayo hutumia taarifa hiyo hiyo ya # pamoja, lakini ni tofauti kidogo. Ikiwa una shida na yako, tafuta nambari nyingine ya LCD inayokufanyia kazi na ubadilishe nambari hiyo ipasavyo. Inawezekana tu kuwa usanidi ambao unatofautiana. Amri zote za 'kuchapisha' zinapaswa kufanya kazi sawa.

Nambari yote ya maoni imekuwa ikitolewa maoni na kudhani nimeifanya vizuri, pia kutakuwa na video inayoelezea kila kitu, lakini hapa kuna vidokezo kadhaa vya kukumbuka:

LiquidCrystal_I2C LCD (0x27, 16, 2);

Nambari iliyo hapo juu ni usanidi wa LCD yangu. Ikiwa maktaba yako ni tofauti, unaweza kuhitaji kubadilisha sio maktaba yako tu, bali pia mstari huu.

{lcd.setCursor (0, 1); lcd.print ("Usawa!"); mwelekeo = HORIZONTAL; // Soma data ghafi ya acc na gyro kutoka MPU-6050 mara 1000 kwa (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // Ongeza gyro x kukabiliana na gyro_x_cal variable gyro_x_cal + = gyro_x; // Ongeza gyro y kukabiliana na gyro_y_cal variable gyro_y_cal + = gyro_y; // Ongeza gyro z offset kwa gyro_z_cal variable gyro_z_cal + = gyro_z; // Ongeza hesabu ya acc x kwa acc_x_cal variable acc_x_cal + = acc_x; // Ongeza hesabu ya acc kwa acc_y_cal variable acc_y_cal + = acc_y; } // Gawanya matokeo yote kwa 1000 ili kupata wastani wa wastani gyro_x_cal / = 1000.0; gyro_y_cal / = 1000.0; gyro_z_cal / = 1000.0; acc_x_cal / = 1000.0; acc_y_cal / = 1000.0; Usawa wa usawa = 255; eeprom_adress = 0; Pato la EEPROM (eeprom_adress, usawa wa usawa); eeprom_adress + = saizi ya (int); Pato la EEPROM (eeprom_adress, gyro_x_cal); eeprom_adress + = saizi ya (kuelea); Pato la EEPROM (eeprom_adress, gyro_y_cal); eeprom_adress + = saizi ya (kuelea); Pato la EEPROM (eeprom_adress, gyro_z_cal); eeprom_adress + = saizi ya (kuelea); Pato la EEPROM (eeprom_adress, acc_x_cal); eeprom_adress + = saizi ya (kuelea); Pato la EEPROM (eeprom_adress, acc_y_cal); eeprom_adress + = saizi ya (kuelea); // Kumbuka kuwa hatuhifadhi pesa kwa acc_z, kwa sababu ya mvuto! kuchelewesha (500); }

Kizuizi hapo juu cha nambari kinatekelezwa kwa utaratibu wa upimaji. Nambari hii ni ya usawa wa usawa. Kuna nambari inayofanana ya usawa wa wima (kumbuka, nambari inajua ikiwa MPU6050 yako imewekwa kwa usawa au kwa wima!). MPU6050, inasomewa mara 1000. maadili yanayofaa yanaongezwa kwa jumla kisha kugawanywa na 1000 ili kutoa wastani wa thamani ya 'kukabiliana'. Thamani hizi zinahifadhiwa kwenye eeprom ya Nano. Thamani zote za usawa za usawa zimehifadhiwa kuanzia anwani ya eeprom 0. Thamani zote za wima zimehifadhiwa mwanzo kwenye anwani ya eeprom 24. Ulinganishaji LAZIMA ufanyike kwa kiwango cha juu kabisa, vinginevyo haimaanishi chochote.

/ * * Mistari michache inayofuata inashughulikia data mbichi kuibadilisha iwe pembe ambazo zinaweza kuwa pato kwa LCD na LED. * Thamani ya 4096, ambayo data ya kuongeza kasi imegawanywa na inachukuliwa kutoka kwa data ya MPU6050 na inategemea kiwango cha sampuli. * Thamani ya 9.8 ni mvuto * Kazi ya atan2 ni kutoka kwa moduli ya hesabu na hutumiwa kuhesabu pembe kutoka kwa data iliyopewa * / thetaM = -atan2 ((acc_x / 4096.0) /9.8, (acc_z / 4096.0) /9.8) /2/3.141592656 * 360; // data ghafi phiM = -atan2 ((acc_y / 4096.0) /9.8, (acc_z / 4096.0) /9.8) /2/3.141592656 * 360; // Takwimu mbichi dt = (millis () - millisOld) / 1000.; millisMzee = milimita (); / * * Sehemu hii hutumia data ya gyro kufanya mfumo usikilize zaidi * thamani ya 65.5, ambayo data ya gyro imegawanywa na inachukuliwa kutoka kwa jalada la MPU6050 na inategemea kiwango cha sampuli * / theta = (theta + (gyro_y / 65.5) * dt) *. 96 + thetaM *.04; // Kichujio cha chini cha kupita phi = (phi + (gyro_x / 65.5) * dt) *. 96 + phiM *.04; // Kichujio cha kupitisha chini

Nambari iliyo hapo juu ni vitu vinavyohesabu pembe. Tunatumahi maoni yanatoa ufahamu kidogo juu ya jinsi inavyofanya kazi, lakini kwa maelezo ya kina, angalia video ya Paul McWhorters iliyounganishwa na kwenye PDF iliyoambatanishwa. Kile nitakachosema ni kwamba unaweza kubadilisha kiwango cha sampuli kwa gyro na Accelerometer (ambayo hufanywa katika usanidi wa MPU6050 chini ya nambari yangu). Ukibadilisha kiwango cha sampuli, lazima pia ubadilishe ni kiasi gani data ghafi imegawanywa na. Kwa data ya accelerometer, thamani ya sasa ni 4096. Kwa gyro, thamani ya sasa ni 65.5.

Rejea karatasi za data zilizoambatishwa na video na EEEntusiast (unganisha kwenye PDF iliyoambatishwa) kwa habari zaidi ya kina juu ya jinsi viwango vya sampuli na kukabiliana vilipatikana.

Hatua ya 3: Hatua Zifuatazo

Kwa hatua hii tutakuwa tumefanya mradi huu kwa matumaini, lakini ni nini sasa?

Kwanza, kwa nini usijenge katika kiwango cha roho ambacho unaweza kutumia. Unaweza kununua kiwango cha roho cha bei rahisi (hakikisha ni aina ya sanduku) ambayo unaweza kuzoea, au ikiwa una kit, chapisha kiwango chako / sanduku.

Labda uwe na uchezaji karibu na viwango vya sampuli za gyro na accelerometer kuona ikiwa wanafanya kazi vizuri kwa kiwango kimoja kuliko kingine.

Jaribu kuboresha nambari zaidi. Kwa mfano, kwa sasa, zaidi ya digrii 45, pembe iliyotajwa ni mbaya kusema kidogo. Je! Kuna njia kuzunguka?

Ikiwa una maswali yoyote, haijalishi yanaonekana rahisi, tafadhali uliza. Ikiwa ninaweza kusaidia, nitasaidia.

Ikiwa unapenda hii kufundisha, tafadhali ipe kama, ili nijue.

Ikiwa utafanya hii, tafadhali nionyeshe (haswa ikiwa iko katika kesi ya kufanya kazi).

ASANTE

Ilipendekeza: