Агуулгын хүснэгт:

Java дахь BME280 -тай Raspberry Pi ашиглан хувийн цаг уурын станц: 6 алхам
Java дахь BME280 -тай Raspberry Pi ашиглан хувийн цаг уурын станц: 6 алхам

Видео: Java дахь BME280 -тай Raspberry Pi ашиглан хувийн цаг уурын станц: 6 алхам

Видео: Java дахь BME280 -тай Raspberry Pi ашиглан хувийн цаг уурын станц: 6 алхам
Видео: Топ 7 трендов в технологиях для Java back-end разработчика в 2022 году [MJC] 2024, Долдугаар сарын
Anonim
Image
Image
Билл шаардлагатай тоног төхөөрөмж
Билл шаардлагатай тоног төхөөрөмж

Цаг агаар муу байгаа нь цонхоор үргэлж муухай харагддаг

Бид үргэлж орон нутгийнхаа цаг агаар, цонхоор харж буй зүйлээ ажиглах сонирхолтой байсан. Бид мөн халаалт, агааржуулалтын системээ илүү сайн хянаж байхыг хүсч байсан. Хувийн цаг уурын станц барих нь маш сайн туршлага юм. Энэхүү төслийг барьж дууссаны дараа утасгүй холбоо хэрхэн ажилладаг, мэдрэгч хэрхэн ажилладаг, Raspberry Pi платформ ямар хүчтэй болохыг илүү сайн ойлгох болно. Энэхүү төслийг суурь болгож, хуримтлуулсан туршлагаараа ирээдүйд илүү төвөгтэй төслүүдийг хялбархан бүтээх боломжтой болно.

Алхам 1: Билл шаардлагатай тоног төхөөрөмж

Билл шаардлагатай тоног төхөөрөмж
Билл шаардлагатай тоног төхөөрөмж
Билл шаардлагатай тоног төхөөрөмж
Билл шаардлагатай тоног төхөөрөмж
Билл шаардлагатай тоног төхөөрөмж
Билл шаардлагатай тоног төхөөрөмж

1. Raspberry Pi

Эхний алхам бол Raspberry Pi самбар дээр гараа тавих явдал юм. Raspberry Pi бол Линукс дээр ажилладаг ганц самбар бүхий компьютер юм. Үүний зорилго нь програмчлалын ур чадвар, тоног төхөөрөмжийн ойлголтыг сайжруулах явдал юм. Үүнийг шинэлэг төслүүдэд хобби сонирхогчид болон электроникийн сонирхогчид хурдан нэвтрүүлсэн.

2. Raspberry Pi -ийн I²C бамбай

INPI2 (I2C адаптер) нь Raspberry Pi 2/3 ба I²C портыг олон I²C төхөөрөмжтэй ашиглах боломжийг олгодог. Үүнийг Dcube Store дээрээс авах боломжтой

3. Дижитал чийгшил, даралт ба температур мэдрэгч, BME280

BME280 бол чийгшил, даралт, температур мэдрэгч бөгөөд хурдан хариу өгөх хугацаа, өндөр нарийвчлалтай байдаг. Бид энэ мэдрэгчийг Dcube дэлгүүрээс худалдаж авсан

4. I²C холбох кабель

Бид IcC холболтын кабелийг Dcube Store дээрээс авах боломжтой байсан

5. Микро USB кабель

Микро USB кабель Цахилгаан хангамж нь Raspberry Pi -ийг тэжээх хамгийн тохиромжтой сонголт юм.

6. EthernetCable/WiFi адаптераар дамжуулан интернет хандалтыг тайлбарлах

Таны хийх ёстой хамгийн эхний зүйл бол Raspberry Pi -ийг интернетэд холбох явдал юм. Бид Ethernet кабель ашиглан холбогдож болно. Өөр нэг боломж бол USB утасгүй адаптер ашиглан утасгүй сүлжээнд холбогдох боломжтой юм.

7. HDMI кабель (Дэлгэц ба холболтын кабель)

Аливаа HDMI/DVI дэлгэц, ямар ч ТВ нь Pi -ийн дэлгэц болж ажиллах ёстой. Гэхдээ энэ нь заавал биш юм. Алсын зайнаас нэвтрэх (SSH гэх мэт) боломжийг бас үгүйсгэхгүй. Та мөн PUTTY програм хангамжаар нэвтрэх боломжтой.

Алхам 2: Тохиргооны тоног төхөөрөмжийн холболт

Тохиргооны тоног төхөөрөмжийн холболт
Тохиргооны тоног төхөөрөмжийн холболт
Тохиргооны тоног төхөөрөмжийн холболт
Тохиргооны тоног төхөөрөмжийн холболт

Схемийг үзүүлсэн схемийн дагуу хий.

Сурч байхдаа бид техник хангамж, програм хангамжийн талаархи электроникийн үндсийг сайтар судалж үзсэн. Бид энэ төслийн электроникийн энгийн схемийг зурахыг хүссэн. Цахим схем нь электроникийн зураг төсөлтэй адил юм. Зураг төсөл боловсруулж, дизайныг анхааралтай дагаж мөрдөөрэй. Бид энд электроникийн үндсэн ойлголтуудыг ашигласан болно. Логик таныг А -аас В хүртэл авдаг, Уран зөгнөл таныг хаа сайгүй авч явах болно!

Raspberry Pi ба I²C бамбай холболт

Юуны өмнө Raspberry Pi -ийг аваад I²C бамбайг (дотогшоо I²C портоор) байрлуулна. Pi -ийн GPIO тээглүүр дээр Shield -ийг зөөлөн дарахад бид энэ алхамыг бялуу шиг амархан хийж чадна (зургийг үзнэ үү).

Мэдрэгч ба Raspberry Pi -ийн холболт

Мэдрэгчийг аваад I²C кабелийг холбоно уу. I²C гаралт нь үргэлж I²C оролттой холбогдсон эсэхийг шалгаарай. I²C бамбай дээр GPIO тээглүүр суурилуулсан бөөрөлзгөнө Pi -ийн хувьд мөн адил зүйлийг хийх ёстой. Бидэнд I²C бамбай, холбох кабелиуд маш том хөнгөлөлт, маш том давуу тал байдаг. залгах, тоглуулах сонголт. Зүү, утастай холбоотой асуудал байхгүй болсон тул төөрөгдөл арилав. Өөрийгөө сүлжээний сүлжээнд ороод, үүнд орж байгаагаа төсөөлөөд үз дээ. Үүнээс ангижирсан. Энэ нь аливаа зүйлийг төвөггүй болгодог.

Тэмдэглэл: Хүрэн утас нь нэг төхөөрөмжийн гаралт болон өөр төхөөрөмжийн оролтын хоорондох Ground (GND) холболтыг үргэлж дагаж байх ёстой

Интернет холболт бол хэрэгцээ юм

Үнэндээ танд энд сонголт байна. Та Raspberry Pi -г LAN кабель эсвэл WIFI холболтын утасгүй нано USB адаптераар холбож болно. Аль ч тохиолдолд манифест бол интернетэд холбогдох явдал юм.

Хэлхээний хүчдэл

Микро USB кабелийг Raspberry Pi -ийн цахилгаан залгуурт залгаарай. Цохиж, voila! Бүгд сайн байна, бид шууд эхлэх болно.

Дэлгэцийн холболт

Бид HDMI кабелийг дэлгэц эсвэл телевизортой холбож болно. Бид Raspberry Pi -ийг монитор руу холбохгүйгээр -SSH (өөр компьютерээс Pi командын мөр рүү нэвтрэх) ашиглан хандах боломжтой. Үүний тулд та PUTTY програмыг ашиглаж болно. Энэ сонголт нь дэвшилтэт хэрэглэгчдэд зориулагдсан тул бид үүнийг энд дэлгэрэнгүй авч үзэхгүй.

Хямрал болно гэж би сонссон, би оролцохгүй байхаар шийдсэн

Алхам 3: Java дээр Raspberry Pi програмчлал

Java дээр Raspberry Pi програмчлал
Java дээр Raspberry Pi програмчлал

Raspberry Pi болон BME280 мэдрэгчийн Java код. Үүнийг манай Github репозиторид ашиглах боломжтой.

Код руу орохын өмнө Readme файлд өгсөн зааврыг уншиж, үүний дагуу Raspberry Pi -ээ тохируулаарай. Үүнийг хийхэд хэдхэн хором л хангалттай. Хувийн цаг уурын станц гэдэг нь хувийн хүн, клуб, холбоо, тэр байтугай бизнес эрхэлдэг цаг агаар хэмжих хэрэгслийн багц юм. Хувийн цаг уурын станцыг зөвхөн эзнийхээ таашаал, боловсрол эзэмших зорилгоор ажиллуулж болох боловч цаг уурын станцын олон операторууд өгөгдлөө гараар цуглуулах, түгээх эсвэл интернет эсвэл сонирхогчдын радио ашиглан бусадтай хуваалцдаг.

Код бол таны төсөөлж буй хамгийн энгийн хэлбэр бөгөөд танд ямар ч асуудал байх ёсгүй, гэхдээ байгаа эсэхийг асуугаарай. Мянган зүйлийг мэддэг байсан ч мэддэг хүнээс асуугаарай.

Та энэ мэдрэгчийн java кодыг эндээс хуулж болно.

// Хүсэл зоригийн лицензээр тараагдсан болно. // BME280 // Энэхүү код нь ControlEverything.com дээрээс авах боломжтой BME280_I2CS I2C Mini модультай ажиллахад зориулагдсан болно. //

com.pi4j.io.i2c. I2CBus импортлох;

com.pi4j.io.i2c. I2CD төхөөрөмжийг импортлох; com.pi4j.io.i2c. I2CFactory импортлох; java.io. IOException импортлох;

нийтийн анги BME280

{public static void main (String args ) онцгой тохиолдол гаргадаг {// I2C bus I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1) үүсгэх; // I2C төхөөрөмж авах, BME280 I2C хаяг нь 0x76 (108) I2CDevice device = bus.getDevice (0x76); // 0x88 (136) байт b1 = шинэ байт [24] хаягаас 24 байт өгөгдлийг унших; төхөөрөмж. унших (0x88, b1, 0, 24); // Өгөгдлийг хөрвүүлэх // түр зуурын коэффициент int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); хэрэв (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); хэрэв (dig_T3> 32767) {dig_T3 -= 65536; } // даралтын коэффициент int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); хэрэв (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); хэрэв (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); хэрэв (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); хэрэв (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); хэрэв (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); хэрэв (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); хэрэв (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); хэрэв (dig_P9> 32767) {dig_P9 -= 65536; } // 0xA1 (161) int dig_H1 = ((байт) device.read (0xA1) & 0xFF) хаягаас 1 байтын өгөгдлийг уншина уу; // 0xE1 (225) төхөөрөмжийн хаягаас 7 байтын өгөгдлийг уншина уу. (0xE1, b1, 0, 7); // Өгөгдлийг хөрвүүлэх // чийгшлийн коэффициент int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); хэрэв (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); хэрэв (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); хэрэв (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; хэрэв (dig_H6> 127) {dig_H6 -= 256; } // Хяналтын чийгшлийн бүртгэлийг сонгох // Чийглэгийг түүвэрлэх хурдаас давсан = 1 төхөөрөмж. бичих (0xF2, (байт) 0x01); // Хяналтын хэмжилтийн бүртгэлийг сонгох // Хэвийн горим, температур ба даралтын түвшинг дарах = 1 төхөөрөмж. Бичих (0xF4, (байт) 0x27); // Тохиргооны бүртгэлийг сонгоно уу // Stand_by time = 1000 ms device.write (0xF5, (byte) 0xA0); // 0xF7 (247) хаягаас 8 байт өгөгдлийг уншина уу // даралт msb1, даралт msb, даралт lsb, temp msb1, temp msb, temp lsb, чийгшил lsb, чийгшил msb байт өгөгдөл = шинэ байт [8]; device.read (0xF7, өгөгдөл, 0, 8); // Даралт ба температурын өгөгдлийг 19 бит урт болгон хөрвүүлэх adc_p = (((урт) (өгөгдөл [0] & 0xFF) * 65536) + ((урт) (өгөгдөл [1] & 0xFF) * 256) + (урт) (өгөгдөл [2] & 0xF0)) / 16; урт adc_t = (((урт) (өгөгдөл [3] & 0xFF) * 65536) + ((урт) (өгөгдөл [4] & 0xFF) * 256) + (урт) (өгөгдөл [5] & 0xF0)) / 16; // Чийгийн өгөгдлийг урт болгон хөрвүүлэх adc_h = ((урт) (өгөгдөл [6] & 0xFF) * 256 + (урт) (өгөгдөл [7] & 0xFF)); // Температурын офсет тооцоо давхар var1 = (((давхар) adc_t) / 16384.0 - ((давхар) dig_T1) / 1024.0) * ((давхар) dig_T2); давхар var2 = ((((давхар) adc_t) / 131072.0 - ((давхар) dig_T1) / 8192.0) * (((давхар) adc_t) /131072.0 - ((давхар) dig_T1) /8192.0)) * ((давхар) dig_T3); давхар t_fine = (урт) (var1 + var2); давхар cTemp = (var1 + var2) / 5120.0; давхар fTemp = cTemp * 1.8 + 32; // Даралтын офсет тооцоо var1 = ((давхар) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((давхар) dig_P6) / 32768.0; var2 = var2 + var1 * ((давхар) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((давхар) dig_P4) * 65536.0); var1 = (((давхар) dig_P3) * var1 * var1 / 524288.0 + ((давхар) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((давхар) dig_P1); давхар p = 1048576.0 - (давхар) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((давхар) dig_P9) * p * p / 2147483648.0; var2 = p * ((давхар) dig_P8) / 32768.0; давхар даралт = (p + (var1 + var2 + ((давхар) dig_P7)) / 16.0) / 100; // Агаарын чийгшлийн тооцоо давхар var_H = (((давхар) t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))); давхар чийгшил = var_H * (1.0 - dig_H1 * var_H / 524288.0); if (чийгшил> 100.0) {чийгшил = 100.0; } if if (чийгшил <0.0) {чийгшил = 0.0; } // Өгөгдлийг System.out.printf дэлгэцэнд гаргах ("Цельсийн температур: %.2f C %n", cTemp); System.out.printf ("Фаренгейт дэх температур: %.2f F %n", fTemp); System.out.printf ("Даралт: %.2f hPa %n", даралт); System.out.printf ("Харьцангуй чийгшил: %.2f %% RH %n", чийгшил); }}

Алхам 4: Кодын практик байдал

Кодын практик байдал
Кодын практик байдал

Одоо кодыг татаж аваад (эсвэл git pull) Raspberry Pi дээр нээнэ үү.

Терминал дээрх кодыг хөрвүүлэх, байршуулах командыг ажиллуулаад Monitor дээрх гаралтыг харна уу. Хэдэн хормын дараа бүх параметрүүдийг харуулна. Кодын гөлгөр шилжилт, тайван (үр дүн) үр дүнтэй байгаа эсэхийг баталгаажуулахын тулд нэмэлт өөрчлөлт оруулах талаар илүү их санаа бодно (Төсөл бүр түүхээс эхэлдэг).

Алхам 5: Бүтээлч ертөнцөд ашиглах

BME280 нь чийгшил, даралтыг хэмжих шаардлагатай бүх хэрэглээнд өндөр үзүүлэлттэй байдаг. Эдгээр шинээр гарч ирж буй програмууд нь контекстийн мэдлэг, жишээ нь. Арьс илрүүлэх, өрөөний өөрчлөлтийг илрүүлэх, фитнессийн хяналт / сайн сайхан байдал, хуурайшилт эсвэл өндөр температуртай холбоотой анхааруулга, эзлэхүүн ба агаарын урсгалыг хэмжих, гэрийн автоматжуулалтын хяналт, хяналтын халаалт, агааржуулалт, агааржуулагч (HVAC), эд зүйлсийн интернет (IoT), GPS-ийн сайжруулалт (жишээлбэл, засварыг цаг тухайд нь хийх, үхлийн тооцоо, налууг илрүүлэх), дотор навигаци (шалны өөрчлөлт, цахилгаан шатыг илрүүлэх), гадаа навигаци хийх, чөлөөт цагаа өнгөрүүлэх, спортоор хичээллэх, цаг агаарын урьдчилсан мэдээ, босоо хурдны заалт (өсөлт/живэх) Хурд).

Алхам 6: Дүгнэлт

Таны харж байгаагаар энэ төсөл нь техник хангамж, програм хангамж ямар чадвартай болохыг харуулсан гайхалтай жишээ юм. Богинохон хугацаанд ийм гайхалтай төслийг бүтээж чадна! Мэдээж энэ бол дөнгөж эхлэл. Нисэх онгоцны буудлын автомат цаг уурын станц гэх мэт илүү нарийн хувийн цаг уурын станц хийх нь анемометр (салхины хурд), дамжуулах хэмжигч (харагдах байдал), пиранометр (нарны цацраг гэх мэт) гэх мэт хэд хэдэн мэдрэгчтэй байж болно. Rasp Pi бүхий I²C мэдрэгч. I²C холбооны үр дүн, ажлын үр дүнг харах үнэхээр гайхалтай. Үүнийг бас шалгаарай. Хөгжилтэй барилга барьж, суралцаарай! Энэхүү зааварчилгааны талаар юу гэж бодож байгаагаа бидэнд хэлээрэй. Шаардлагатай бол бид зарим зүйлийг сайжруулахыг хүсч байна.

Зөвлөмж болгож буй: