Съдържание:

Лична метеорологична станция, използваща Raspberry Pi с BME280 в Java: 6 стъпки
Лична метеорологична станция, използваща Raspberry Pi с BME280 в Java: 6 стъпки

Видео: Лична метеорологична станция, използваща Raspberry Pi с BME280 в Java: 6 стъпки

Видео: Лична метеорологична станция, използваща Raspberry Pi с BME280 в Java: 6 стъпки
Видео: Установка часов и метеостанции в автодоме или автодоме 2024, Юли
Anonim
Image
Image
Сметка за основно оборудване
Сметка за основно оборудване

Лошото време винаги изглежда по -лошо през прозорец

Винаги сме се интересували от наблюдението на местното време и това, което виждаме през прозореца. Искахме също по -добър контрол върху нашата отоплителна и климатична система. Изграждането на лична метеорологична станция е чудесно учене. Когато завършите изграждането на този проект, ще имате по -добро разбиране за това как работят безжичните комуникации, как работят сензорите и колко мощна може да бъде платформата Raspberry Pi. С този проект като основа и натрупания опит ще можете лесно да изграждате по -сложни проекти в бъдеще.

Стъпка 1: Сметка за основно оборудване

Сметка за основно оборудване
Сметка за основно оборудване
Сметка за основно оборудване
Сметка за основно оборудване
Сметка за основно оборудване
Сметка за основно оборудване

1. A Raspberry Pi

Първата стъпка е да вземете ръцете си върху дъска на Raspberry Pi. Raspberry Pi е едноплатен компютър с Linux. Неговата цел е да подобри уменията за програмиране и разбирането на хардуера. Той беше бързо приет от любители и ентусиасти на електрониката за иновативни проекти.

2. I²C щит за Raspberry Pi

INPI2 (I2C адаптер) осигурява Raspberry Pi 2/3 an I²C порт за използване с множество I²C устройства. Предлага се в Dcube Store

3. Цифров сензор за влажност, налягане и температура, BME280

BME280 е сензор за влажност, налягане и температура, който има бързо време за реакция и висока обща точност. Закупихме този сензор от Dcube Store

4. Свързващ кабел I²C

Имахме свързващия кабел I²C на разположение в 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 щита (с Inward Facing I²C порт) върху него. Натиснете щита внимателно върху GPIO щифтовете на Pi и приключихме с тази стъпка толкова лесно, колкото пай (вижте снимката).

Свързване на сензора и Raspberry Pi

Вземете сензора и свържете кабела I²C с него. Уверете се, че изходът I²C ВИНАГИ се свързва с входа I²C. Същото трябва да се следва и за Raspberry Pi с I²C щит, монтиран върху него GPIO щифтовете. Имаме I²C щита и свързващите кабели отстрани като много голямо облекчение и много голямо предимство, тъй като оставаме само с опция plug and play. Няма повече проблеми с щифтовете и окабеляването и следователно объркването изчезна. Просто си представете себе си в мрежата от проводници и влизате в това. Облекчение от това. Това прави нещата неусложнени.

Забележка: Кафявият проводник винаги трябва да следва заземяващата (GND) връзка между изхода на едно устройство и входа на друго устройство

Интернет връзката е необходимост

Тук всъщност имате избор. Можете да свържете Raspberry Pi с LAN кабел или безжичен Nano USB адаптер за WIFI връзка. Така или иначе, манифестът е да се свърже с интернет, което е постигнато.

Захранване на веригата

Включете Micro USB кабела в гнездото за захранване на Raspberry Pi. Удряй и вола! Всичко е наред и ще започнем веднага.

Връзка към дисплея

Можем да включим HDMI кабела към монитор или телевизор. Можем да получим достъп до Raspberry Pi, без да го свързваме към монитор, използвайки -SSH (Достъп до командния ред на Pi от друг компютър). Можете също да използвате софтуера PUTTY за това. Тази опция е за напреднали потребители, така че няма да я разглеждаме подробно тук.

Чух, че ще има рецесия, реших да не участвам

Стъпка 3: Програмиране на Raspberry Pi в Java

Програмиране на Raspberry Pi в Java
Програмиране на Raspberry Pi в Java

Java кодът за сензора Raspberry Pi и BME280. Той е достъпен в нашето хранилище на Github.

Преди да преминете към кода, не забравяйте да прочетете инструкциите, дадени във файла Readme и да настроите вашия Raspberry Pi според него. Ще отнеме само малко време, за да го направите. Лична метеорологична станция е набор от метеорологични инструменти, управлявани от частно лице, клуб, асоциация или дори бизнес. Личните метеорологични станции могат да се експлоатират единствено за удоволствие и образование на собственика, но много лични оператори на метеорологични станции също споделят своите данни с другите, или чрез ръчно събиране на данни и разпространението им, или чрез използване на интернет или радиолюбители.

Кодът е в най -простата форма, която можете да си представите и не би трябвало да имате проблем с него, но попитайте дали имате. Дори и да знаете хиляди неща, все пак попитайте някой, който знае.

Можете да копирате работещия java код за този сензор и от тук.

// Разпространява се с лиценз за свободна воля.// Използвайте го както искате, печелите или безплатно, при условие че се вписва в лицензите на свързаните с него произведения. // BME280 // Този код е проектиран да работи с BME280_I2CS I2C мини модул, достъпен от ControlEverything.com. //

внос com.pi4j.io.i2c. I2CBus;

внос com.pi4j.io.i2c. I2CDevice; внос com.pi4j.io.i2c. I2CFactory; импортиране на java.io. IOException;

публичен клас BME280

{public static void main (String args ) throws Exception {// Създаване на I2C шина I2CBus шина = I2CFactory.getInstance (I2CBus. BUS_1); // Вземете I2C устройство, BME280 I2C адресът е 0x76 (108) I2CDevice устройство = bus.getDevice (0x76); // Прочетете 24 байта данни от адрес 0x88 (136) байт b1 = нов байт [24]; device.read (0x88, b1, 0, 24); // Конвертираме данните // временни коефициенти int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); if (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); if (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); if (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); if (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); if (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); if (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); if (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); if (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); if (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); if (dig_P9> 32767) {dig_P9 -= 65536; } // Прочетете 1 байт данни от адрес 0xA1 (161) int dig_H1 = ((байт) device.read (0xA1) & 0xFF); // Прочетете 7 байта данни от адрес 0xE1 (225) device.read (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); if (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); if (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; ако (dig_H6> 127) {dig_H6 -= 256; } // Изберете регистър на влажност на контрола // Влажност над честотата на дискретизация = 1 device.write (0xF2, (байт) 0x01); // Избор на регистър за контролни измервания // Нормален режим, температура и налягане над честотата на дискретизация = 1 device.write (0xF4, (байт) 0x27); // Изберете регистър на конфигурацията // Време на изчакване = 1000 ms device.write (0xF5, (байт) 0xA0); // Прочетете 8 байта данни от адрес 0xF7 (247) // налягане msb1, налягане msb, налягане lsb, temp msb1, temp msb, temp lsb, влажност lsb, влажност msb байт данни = нов байт [8]; device.read (0xF7, данни, 0, 8); // Преобразуваме данните за налягането и температурата в 19-битови дълги adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (long) (данни [2] & 0xF0)) / 16; дълъг adc_t = (((дълъг) (данни [3] & 0xFF) * 65536) + ((дълъг) (данни [4] & 0xFF) * 256) + (дълъг) (данни [5] & 0xF0)) / 16; // Конвертираме данните за влажността дълги adc_h = ((дълги) (данни [6] & 0xFF) * 256 + (дълги) (данни [7] & 0xFF)); // Изчисления на изместване на температурата double var1 = (((double) adc_t) / 16384.0 - ((double) dig_T1) / 1024.0) * ((double) dig_T2); double var2 = ((((double) adc_t) / 131072.0 - ((double) dig_T1) / 8192.0) * (((double) adc_t) /131072.0 - ((double) dig_T1) /8192.0)) * ((double) 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; // Изчисления на изместване на влажността double var_H = (((double) 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); ако (влажност> 100,0) {влажност = 100,0; } иначе ако (влажност <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 изтеглете) кода и го отворете в Raspberry Pi.

Изпълнете командите за компилиране и качване на кода на терминала и вижте изхода на монитора. След няколко минути той ще покаже всички параметри. Като се уверите, че имате плавен преход на кода и спокоен (иш) резултат, мислите за повече идеи, за да направите допълнителни изменения (Всеки проект започва с история).

Стъпка 5: Използване в конструктивния свят

BME280 постига висока производителност във всички приложения, изискващи измерване на влажност и налягане. Тези нововъзникващи приложения са Контекстна осведоменост, напр. Откриване на кожата, Откриване на промени в стаята, Фитнес наблюдение / благополучие, Предупреждение относно сухота или високи температури, Измерване на обема и въздушния поток, Управление на домашната автоматизация, Контролно отопление, Вентилация, Климатизация (HVAC), Интернет на нещата (IoT), Подобряване на GPS (напр. Подобряване на времето до първо фиксиране, отчитане на мъртвите, откриване на наклон), вътрешна навигация (смяна на откриване на пода, откриване на асансьор), навигация на открито, приложения за свободното време и спорт, прогноза за времето и индикация за вертикална скорост (повдигане/мивка) Скорост).

Стъпка 6: Заключение

Както можете да видите, този проект е чудесна демонстрация на какво са способни хардуерът и софтуерът. За малко време човек може да изгради такъв впечатляващ проект! Разбира се, това е само началото. Изработването на по -усъвършенствана лична метеорологична станция като автоматичните летищни линейни станции може да включва още някои сензори като анемометър (скорост на вятъра), трансмисометър (видимост), пиранометър (слънчева радиация) и т.н. I²C сензор с Rasp Pi. Наистина е невероятно да видите резултатите и работата на комуникациите I²C. Проверете и него. Забавлявайте се с изграждането и ученето! Моля, уведомете ни какво мислите за тази инструкция. Бихме искали да направим някои подобрения, ако е необходимо.

Препоръчано: