Tentokrát sa budeme zaoberať pripojením analógového trojosového akcelerometra ADXL335 k Arduinu.
Nevyhnutné
- - Arduino;
- - akcelerometer ADXL335;
- - osobný počítač s vývojovým prostredím Arduino IDE.
Inštrukcie
Krok 1
Na určenie vektora zrýchlenia sa používajú akcelerometre. Akcelerometer ADXL335 má tri osi a vďaka tomu dokáže určiť vektor zrýchlenia v trojrozmernom priestore. Vzhľadom na to, že gravitačná sila je tiež vektorom, dokáže akcelerometer určiť svoju vlastnú orientáciu v trojrozmernom priestore vzhľadom na stred Zeme.
Obrázok zobrazuje obrázky z pasu (https://www.analog.com/static/imported-files/data_sheets/ADXL335.pdf) akcelerometra ADXL335. Tu sú zobrazené súradnicové osi citlivosti akcelerometra vo vzťahu k geometrickému umiestneniu tela zariadenia v priestore, ako aj tabuľka hodnôt napätia z 3 kanálov akcelerometra v závislosti od jeho orientácie v priestore. Údaje v tabuľke sú uvedené pre snímač v pokoji.
Poďme sa bližšie pozrieť na to, čo nám ukazuje akcelerometer. Senzor nechajte ležať vodorovne, napríklad na stole. Potom bude projekcia vektora zrýchlenia rovná 1 g pozdĺž osi Z alebo Zout = 1 g. Ostatné dve osi budú mať nuly: Xout = 0 a Yout = 0. Keď je snímač otočený „na zadnej strane“, bude smerovaný opačným smerom vzhľadom na vektor gravitácie, tj. Zout = -1 g. Podobne sa merania uskutočňujú na všetkých troch osiach. Je jasné, že akcelerometer je možné umiestniť ľubovoľným spôsobom do vesmíru, takže zo všetkých troch kanálov budeme brať hodnoty iné ako nula.
Ak je sonda silne otrasená pozdĺž vertikálnej osi Z, bude hodnota Zout väčšia ako „1 g“. Maximálne merateľné zrýchlenie je „3g“v každej z osí v ľubovoľnom smere (tj. Obidve s „plus“a „mínus“).
Krok 2
Myslím, že sme prišli na princíp činnosti akcelerometra. Teraz sa pozrime na schému pripojenia.
Čip analógového akcelerometra ADXL335 je dosť malý a je umiestnený v balení BGA a je ťažké ho namontovať na dosku doma. Preto použijem pripravený modul GY-61 s akcelerometrom ADXL335. Takéto moduly v čínskych online obchodoch stoja takmer cent.
Na napájanie akcelerometra je potrebné dodať na kolík VCC modulu napätie +3, 3 V. Meracie kanály snímača sú pripojené k analógovým pinom Arduina, napríklad „A0“, „A1“a „ A2 “. Toto je celý okruh:)
Krok 3
Načítajme tento náčrt do pamäte Arduino. Načítame hodnoty z analógových vstupov na troch kanáloch, prevedieme ich na napätie a prenesieme na sériový port.
Arduino má 10-bitový ADC a maximálne povolené napätie kolíka je 5 voltov. Merané napätia sú kódované bitmi, ktoré môžu nadobúdať iba 2 hodnoty - 0 alebo 1. To znamená, že celý rozsah merania bude rozdelený (1 + 1) na 10. výkon, t. na 1024 rovnakých segmentoch.
Ak chcete prevádzať namerané hodnoty na volty, musíte každú hodnotu nameranú na analógovom vstupe vydeliť 1024 (segmentmi) a potom vynásobiť 5 (voltmi).
Pozrime sa, čo skutočne pochádza z akcelerometra, ktorý ako príklad používa os Z (posledný stĺpec). Keď je snímač umiestnený vodorovne a vyzerá hore, prichádzajú čísla (2,03 +/- 0,01). To by teda malo zodpovedať zrýchleniu „+ 1g“pozdĺž osi Z a uhlu 0 stupňov. Otočte senzor. Dorazia čísla (1, 69 +/- 0, 01), ktoré by mali zodpovedať „-1 g“a uhlu 180 stupňov.
Krok 4
Zoberme hodnoty z akcelerometra v uhloch 90 a 270 stupňov a zadajme ich do tabuľky. Tabuľka zobrazuje uhly rotácie akcelerometra (stĺpec „A“) a zodpovedajúce hodnoty Zout vo voltoch (stĺpec „B“).
Pre názornosť je zobrazený graf napätia na výstupe Zout proti uhlu rotácie. Modré pole je rozsah v pokoji (pri zrýchlení 1 g). Ružové políčko na grafe je okraj, aby sme mohli merať zrýchlenie až do + 3 g a do -3 g.
Pri rotácii o 90 stupňov má os Z nulové zrýchlenie. Tých. hodnota 1,67 voltu je podmienená nula Zo pre os Z. Potom nájdete zrýchlenie takto:
g = Zout - Zo / citlivosť_z, tu Zout je nameraná hodnota v milivoltoch, Zo je hodnota pri nulovom zrýchlení v milivoltoch, citlivosť_z je citlivosť snímača pozdĺž osi Z. kalibrujte akcelerometer a vypočítajte hodnotu citlivosti špeciálne pre váš snímač pomocou vzorca:
citlivosť_z = [Z (0 stupňov) - Z (90 stupňov)] * 1000. V tomto prípade je citlivosť akcelerometra pozdĺž osi Z = (2, 03 - 1, 68) * 1000 = 350 mV. Podobne bude potrebné vypočítať citlivosť pre osi X a Y.
V stĺpci „C“tabuľky je uvedené zrýchlenie vypočítané pre päť uhlov pri citlivosti 350. Ako vidíte, prakticky sa zhodujú s tými, ktoré sú znázornené na obrázku 1.
Krok 5
Pri zapamätaní kurzu základnej geometrie dostaneme vzorec na výpočet uhlov rotácie akcelerometra:
uhol_X = arctg [sqrt (Gz ^ 2 + Gy ^ 2) / Gx].
Hodnoty sú v radiánoch. Ak ich chcete previesť na stupne, vydelte Pi a vynásobte 180.
Výsledkom je, že na obrázku je znázornená úplná skica počítajúca uhly zrýchlenia a rotácie akcelerometra pozdĺž všetkých osí. Komentáre poskytujú vysvetlenie programového kódu.
Pri výstupe na port „Serial.print ()“označuje znak „\ t“znak tabulátora, takže stĺpce sú rovnomerné a hodnoty sú umiestnené jeden za druhým. „+“znamená zreťazenie (zreťazenie) reťazcov. Operátor "String ()" navyše výslovne oznámi kompilátoru, že číselná hodnota musí byť prevedená na reťazec. Operátor Round () zaokrúhľuje roh na najbližší 1 stupeň.
Krok 6
Naučili sme sa teda, ako pomocou Arduina prijímať a spracovávať údaje z analógového akcelerometra ADXL335. Teraz môžeme v našich dizajnoch použiť akcelerometer.