Mundarija:

Raspberry Pi bilan BMG160 3 o'qli giroskop sensori o'zaro bog'lanishi: 5 qadam
Raspberry Pi bilan BMG160 3 o'qli giroskop sensori o'zaro bog'lanishi: 5 qadam

Video: Raspberry Pi bilan BMG160 3 o'qli giroskop sensori o'zaro bog'lanishi: 5 qadam

Video: Raspberry Pi bilan BMG160 3 o'qli giroskop sensori o'zaro bog'lanishi: 5 qadam
Video: Rаspberry Pi и Home Assistant. Сервер домашней автоматизации. Сделай сам свой умный дом. 2024, Noyabr
Anonim
Image
Image

Zamonaviy dunyoda yoshlar va bolalarning yarmidan ko'pi o'yinni yaxshi ko'radilar va o'yinni texnik jihatdan qiziqtirganlarning hammasi bu sohada harakatni sezishning ahamiyatini bilishadi. Bizni ham xuddi shu narsa hayratda qoldirdi va uni taxtalarga qo'yish uchun biz har qanday narsaning burchak tezligini o'lchaydigan giroskop sensori ustida ishlashni o'yladik. Shunday qilib, biz vazifani hal qilish uchun sensori - BMG160. BMG160-bu 16 bitli, raqamli, uch fazali, giroskopli sensor, u burchak tezligini xonaning uchta perpendikulyar o'lchovida o'lchashi mumkin.

Ushbu qo'llanmada biz BMG160 ning Raspberry pi bilan ishlashini ko'rsatamiz, Java dasturlash tili sifatida ishlatiladi.

Buning uchun sizga kerak bo'lgan uskunalar quyidagilar:

1. BMG160

2. Raspberry Pi

3. I2C kabeli

4. Raspberry Pi uchun I2C qalqoni

5. Ethernet kabeli

1 -qadam: BMG160 haqida umumiy ma'lumot:

Sizga nima kerak.. !!
Sizga nima kerak.. !!

Birinchidan, biz sizni BMG160 sensori modulining asosiy xususiyatlari va u ishlaydigan aloqa protokoli bilan tanishtirmoqchimiz.

BMG160-bu asosan 16-bitli, raqamli, uch fazali, giroskopli burchak tezligini o'lchaydigan sensor. U burchak tezligini xona, y va z o'qi bo'yicha uchta perpendikulyar o'lchovda hisoblashi va mos keladigan chiqish signallarini berishi mumkin. U malina pi taxtasi bilan I2C aloqa protokoli yordamida muloqot qilishi mumkin. Ushbu modul iste'molchi talablariga, shuningdek sanoat maqsadlariga javob beradigan tarzda ishlab chiqilgan.

Sensor ishlaydigan aloqa protokoli I2C. I2C o'zaro integratsiyalashgan sxemani anglatadi. Bu aloqa protokoli bo'lib, bunda aloqa SDA (ketma -ket ma'lumotlar) va SCL (ketma -ket soat) liniyalari orqali amalga oshiriladi. Bu bir vaqtning o'zida bir nechta qurilmalarni ulash imkonini beradi. Bu eng oddiy va samarali aloqa protokoli.

2 -qadam: Sizga nima kerak.. !

Sizga nima kerak.. !!
Sizga nima kerak.. !!
Sizga nima kerak.. !!
Sizga nima kerak.. !!
Sizga nima kerak.. !!
Sizga nima kerak.. !!

Maqsadga erishish uchun bizga kerak bo'lgan materiallar quyidagi apparat komponentlarini o'z ichiga oladi:

1. BMG160

2. Raspberry Pi

3. I2C kabeli

4. Raspberry Pi uchun I2C qalqoni

5. Ethernet kabeli

3 -qadam: Uskuna ulanishi:

Uskuna ulanishi
Uskuna ulanishi
Uskuna ulanishi
Uskuna ulanishi

Uskuna ulanish bo'limi, asosan, sensori va malina pi o'rtasida zarur bo'lgan simi ulanishlarini tushuntiradi. To'g'ri ulanishni ta'minlash har qanday tizimda kerakli chiqish uchun ishlashning asosiy zarurati hisoblanadi. Shunday qilib, kerakli ulanishlar quyidagilar:

BMG160 I2C ustida ishlaydi. Sensorning har bir interfeysini qanday ulash kerakligini ko'rsatadigan simlar sxemasi.

Qutidan tashqari, taxta I2C interfeysi uchun tuzilgan, shuning uchun agar siz agnostik bo'lsangiz, biz ushbu ulanishni ishlatishni maslahat beramiz. Sizga faqat to'rtta sim kerak!

Vcc, Gnd, SCL va SDA pinlari uchun faqat to'rtta ulanish kerak va ular I2C kabeli yordamida ulangan.

Bu ulanishlar yuqoridagi rasmlarda ko'rsatilgan.

4-qadam: Java-kod yordamida 3 o'qli giroskopni o'lchash:

Java-kod yordamida 3 o'qli giroskopni o'lchash
Java-kod yordamida 3 o'qli giroskopni o'lchash
Java-kod yordamida 3 o'qli giroskopni o'lchash
Java-kod yordamida 3 o'qli giroskopni o'lchash

Malinali pi -ni ishlatishning afzalligi shundaki, u sizga sensorni interfeysga ulash uchun taxtani dasturlashni xohlagan dasturlash tilining moslashuvchanligini ta'minlaydi. Ushbu kengashning afzalliklaridan foydalanib, biz bu erda Java dasturlashini namoyish qilamiz. BMG160 uchun Java kodini bizning github hamjamiyatidan yuklab olish mumkin, bu Dcube Store hamjamiyati.

Foydalanuvchilarning qulayligi uchun biz bu erda ham kodni tushuntirmoqdamiz: kodlashning birinchi bosqichi sifatida siz java holatida pi4j kutubxonasini yuklab olishingiz kerak, chunki bu kutubxona kodda ishlatiladigan funktsiyalarni qo'llab -quvvatlaydi. Shunday qilib, kutubxonani yuklab olish uchun quyidagi havolaga kirishingiz mumkin:

pi4j.com/install.html

Bu sensor uchun ishlaydigan java kodini bu erdan ham ko'chirishingiz mumkin:

com.pi4j.io.i2c. I2CBus -ni import qilish;

com.pi4j.io.i2c. I2CDevice -ni import qilish;

com.pi4j.io.i2c. I2CFactory -ni import qilish;

java.io. IOException ni import qilish;

ommaviy sinf BMG160

{

public static void main (String args ) istisno qiladi

{

// I2C avtobusini yarating

I2CBus avtobus = I2CFactory.getInstance (I2CBus. BUS_1);

// I2C qurilmasini oling, BMG160 I2C manzili 0x68 (104)

I2CDevice qurilmasi = bus.getDevice (0x68);

// diapazon registrini tanlang

// To'liq o'lchov oralig'ini sozlash, 2000 dps

device.write (0x0F, (bayt) 0x80);

// tarmoqli kengligi registrini tanlang

// tarmoqli kengligi 200 Gts

device.write (0x10, (bayt) 0x04);

Thread.sleep (500);

// 6 bayt ma'lumotni o'qing

// xGyro lsb, xGyro msb, yGyro lsb, yGyro msb, zGyro lsb, zGyro msb

bayt ma'lumotlar = yangi bayt [6];

device.read (0x02, ma'lumotlar, 0, 6);

// Ma'lumotni aylantirish

int xGyro = ((ma'lumotlar [1] & 0xFF) * 256 + (ma'lumotlar [0] & 0xFF));

agar (xGyro> 32767)

{

xGyro -= 65536;

}

int yGyro = ((ma'lumotlar [3] & 0xFF) * 256 + (ma'lumotlar [2] & 0xFF));

agar (yGyro> 32767)

{

yGyro -= 65536;

}

int zGyro = ((ma'lumotlar [5] & 0xFF) * 256 + (ma'lumotlar [4] & 0xFF));

agar (zGyro> 32767)

{

zGyro -= 65536;

}

// Ma'lumotni ekranga chiqarish

System.out.printf ("Aylanish o'qi: %d %n", xGyro);

System.out.printf ("Y o'qining aylanish o'qi: %d %n", yGyro);

System.out.printf ("Z-aylanish o'qi: %d %n", zGyro);

}

}

Sensor va karta o'rtasidagi i2c aloqasini osonlashtiradigan kutubxona pi4j, uning turli paketlari I2CBus, I2CDevice va I2CFactory ulanishni o'rnatishga yordam beradi.

com.pi4j.io.i2c. I2CBus; import com.pi4j.io.i2c. I2CDevice; com.pi4j.io.i2c. I2CFactory -ni import qilish; java.io. IOException ni import qilish;

Kodning bu qismi sensorni yozish () funktsiyasi yordamida tegishli buyruqlarni yozish orqali burchak tezligini o'lchashga majbur qiladi, so'ngra o'qish () funktsiyasi yordamida ma'lumotlar o'qiladi.

// Ro'yxatdan o'tish registrini tanlang // To'liq o'lchovli diapazonni sozlash, 2000 dps device.write (0x0F, (bayt) 0x80); // tarmoqli kengligi registrini tanlang // Tarmoqli kengligi 200 Hz qurilma.yozish (0x10, (bayt) 0x04); Thread.sleep (500);

// 6 bayt ma'lumotni o'qing

// xGyro lsb, xGyro msb, yGyro lsb, yGyro msb, zGyro lsb, zGyro msb bayt ma'lumotlar = yangi bayt [6]; device.read (0x02, ma'lumotlar, 0, 6);

Sensordan olingan ma'lumotlar quyidagicha mos formatga o'tkaziladi:

int xGyro = ((ma'lumotlar [1] & 0xFF) * 256 + (ma'lumotlar [0] & 0xFF)); agar (xGyro> 32767) {xGyro -= 65536; } int yGyro = ((ma'lumotlar [3] & 0xFF) * 256 + (ma'lumotlar [2] & 0xFF)); agar (yGyro> 32767) {yGyro -= 65536; } int zGyro = ((ma'lumotlar [5] & 0xFF) * 256 + (ma'lumotlar [4] & 0xFF)); agar (zGyro> 32767) {zGyro -= 65536; }

Chiqish System.out.println () funktsiyasi yordamida quyidagi formatda chop etiladi.

System.out.println ("Aylanish o'qi: %d %n", xGyro); System.out.println ("Y o'qining aylanish o'qi: %d %n", yGyro); System.out.println ("Z-aylanish o'qi: %d %n", zGyro);

Sensorning chiqishi yuqoridagi rasmda ko'rsatilgan.

5 -qadam: Ilovalar:

Ilovalar
Ilovalar

BMG160 uyali telefonlar, inson mashinalari interfeysi qurilmalari kabi qurilmalarda turli xil ilovalarga ega. Sensor moduli tasvirni barqarorlashtirish (DSC va kamera-telefon), o'yin va ishora qurilmalari kabi iste'molchi ilovalariga qo'yiladigan talablarni qondirish uchun ishlab chiqilgan. Shuningdek, u imo -ishorani aniqlashni talab qiladigan tizimlarda va ichki navigatsiyada ishlatiladigan tizimlarda qo'llaniladi.

Tavsiya: