Мазмуну:

Javaдагы BME280 менен Raspberry Pi колдонгон жеке аба ырайы станциясы: 6 кадам
Javaдагы BME280 менен Raspberry Pi колдонгон жеке аба ырайы станциясы: 6 кадам

Video: Javaдагы BME280 менен Raspberry Pi колдонгон жеке аба ырайы станциясы: 6 кадам

Video: Javaдагы BME280 менен Raspberry Pi колдонгон жеке аба ырайы станциясы: 6 кадам
Video: Lesson 02 Arduino IDE Software | Robojax Arduino Step By Step Course 2024, Июль
Anonim
Image
Image
Эң зарыл жабдуулар Билл
Эң зарыл жабдуулар Билл

Жаман аба ырайы дайыма терезеден жаман көрүнөт

Биз дайыма жергиликтүү аба ырайын жана терезеден көргөн нерселерибизди көзөмөлдөөгө кызыкдар болчубуз. Биз ошондой эле жылытуу жана кондиционер системасын жакшыраак көзөмөлгө алууну кааладык. Жеке метеостанцияны куруу - бул чоң тажрыйба. Бул долбоорду куруп бүткөндөн кийин сиз зымсыз байланыштын кандай иштээрин, сенсорлордун кандай иштээрин жана Raspberry Pi платформасынын канчалык күчтүү экенин жакшыраак түшүнөсүз. Бул долбоор база жана топтолгон тажрыйба менен келечекте татаал долбоорлорду оңой кура аласыз.

1 -кадам: Билл маанилүү жабдуулар

Эң зарыл жабдуулар Билл
Эң зарыл жабдуулар Билл
Эң зарыл жабдуулар Билл
Эң зарыл жабдуулар Билл
Эң зарыл жабдуулар Билл
Эң зарыл жабдуулар Билл

1. Raspberry Pi

Биринчи кадам - Raspberry Pi тактасына колуңузду алуу. Raspberry Pi - бул Linux менен иштөөчү бир такталуу компьютер. Анын максаты программалоо көндүмдөрүн жана аппараттык түшүнүктү жакшыртуу болуп саналат. Аны тез эле хоббисттер жана электроника ышкыбоздору инновациялык долбоорлор үчүн кабыл алышты.

2. Raspberry Pi үчүн I²C Shield

INPI2 (I2C адаптер) Raspberry Pi 2/3 жана I²C портун бир нече I²C түзмөктөрү менен камсыз кылат. Бул Dcube дүкөнүндө жеткиликтүү

3. Санариптик нымдуулук, басым жана температура сенсору, BME280

BME280 - нымдуулук, басым жана температура сенсору, ал тез жооп берүү убактысына жана жалпы тактыкка ээ. Биз бул сенсорду Dcube дүкөнүнөн сатып алдык

4. I²C туташтыруу кабели

Бизде I²C туташтыруу кабели Dcube Storeдо бар болчу

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

Микро USB кабели Электр энергиясы менен камсыздоо Raspberry Pi менен иштөө үчүн идеалдуу чечим.

6. Интернетке кирүүнү EthernetCable/WiFi адаптери аркылуу чечмелеңиз

Сиз кыла турган эң биринчи нерселердин бири - Raspberry Piңизди Интернетке туташтыруу. Биз Ethernet кабели аркылуу туташа алабыз. Дагы бир мүмкүнчүлүк - зымсыз тармакка USB зымсыз адаптерин колдонуп туташуу.

7. HDMI Cable (Дисплей жана байланыш кабели)

Ар кандай HDMI/DVI монитор жана каалаган сыналгы Pi үчүн дисплей катары иштеши керек. Бирок бул милдеттүү эмес. Алыстан кирүү (SSH сыяктуу) мүмкүнчүлүгүн да четке кагууга болбойт. Сиз ошондой эле PUTTY программасы менен кире аласыз.

2 -кадам: Орнотуу үчүн аппараттык туташуулар

Орнотуу үчүн аппараттык туташуулар
Орнотуу үчүн аппараттык туташуулар
Орнотуу үчүн аппараттык туташуулар
Орнотуу үчүн аппараттык туташуулар

Схеманы көрсөтүлгөн схемага ылайык жасаңыз.

Окуп жатып, биз аппараттык жана программалык билимге байланыштуу электрониканын негиздерин жакшылап үйрөндүк. Биз бул долбоор үчүн жөнөкөй электроника схемасын түзгүбүз келген. Электрондук схемалар электрониканын планына окшош. Долбоорду кылдат иштеп чыгып, кылдаттык менен аткарыңыз. Биз бул жерде электрониканын кээ бир негиздерин колдондук. Логика сизди Адан Вге чейин алат, Элестетүү сизди бардык жакка алып барат!

Raspberry Pi жана I²C Shieldдин туташуусу

Биринчиден, Raspberry Pi алып, ага I²C Shield (ичине караган I²C порту менен) коюңуз. Калканды акырындык менен Пионун GPIO казыктарына басыңыз жана биз бул кадамды пирог сыяктуу оңой бүтүрдүк (сүрөттү караңыз).

Сенсор менен Raspberry Pi байланышы

Сенсорду алып, аны менен I²C кабелин туташтырыңыз. I²C Output ар дайым I²C киришине туташып турганын текшериңиз. I²C калканчынын үстүнө GPIO төөнөгүчтөрү орнотулган Raspberry Pi үчүн да ушундай кылыш керек. Бизде I²C Shield жана туташтыруучу кабелдер биз тарапта абдан чоң рельеф жана абдан чоң артыкчылык катары бар, анткени биз кошуу жана ойнотуу опциясы. Мындан ары казыктар жана зым көйгөйлөрү жок, ошондуктан башаламандык жок болду. Өзүңүздү зымдардын торунда элестетип, ага кирип жатканыңызды. Андан бир жеңилдик. Бул нерселерди татаалдаштырат.

Эскертүү: күрөң зым дайыма бир түзмөктүн чыгышы менен башка түзмөктүн киришинин ортосундагы Ground (GND) байланышын ээрчиши керек

Интернетке туташуу - бул муктаждык

Чынында бул жерде тандооңуз бар. Сиз Raspberry Pi'ни LAN кабели же WIFI туташуусу үчүн зымсыз Nano USB адаптери менен туташтыра аласыз. Кандай болбосун, манифест - бул интернетке туташуу.

Райондун кубаттуулугу

Micro USB кабелин Raspberry Pi'дин кубат уячасына сайыңыз. Чык жана воила! Баары жакшы, биз дароо баштайбыз.

Дисплейге туташуу

Биз 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 // Бул код BME280_I2CS I2C Mini Module менен иштөө үчүн 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 ) Exception ыргытат {// I2C шинасын түзүү I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // I2C түзмөгүн алыңыз, BME280 I2C дареги 0x76 (108) I2CDevice device = bus.getDevice (0x76); // 0x88 (136) адресинен 24 байт маалымат окуу 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); эгер (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) device.read (0xE1, b1, 0, 7) дарегинен 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 device.write (0xF2, (байт) 0x01); // Башкаруу өлчөө реестрин тандоо // Кадимки режим, ылдамдык жана ылдамдык боюнча басым = 1 device.write (0xF4, (байт) 0x27); // Конфигурация регистрин тандоо // Күтүү убактысы = 1000 мс device.write (0xF5, (байт) 0xA0); // 0xF7 (247) дарегинен 8 байт маалымат окуу // басым msb1, басым msb, lsb басым, temp msb1, temp msb, temp lsb, нымдуулук lsb, нымдуулук msb байт маалыматтар = жаңы байт [8]; device.read (0xF7, data, 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; } else 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ден ачыңыз.

Терминалга кодду компиляциялоо жана жүктөө үчүн буйруктарды аткарыңыз жана монитордогу чыгууну көрүңүз. Бир нече мүнөттөн кийин, ал бардык параметрлерди экранга чыгарат. Коддун жылмакай болушуна жана тынч (иш) натыйжага ээ экениңизге кепилдик берип, кошумча түзөтүүлөрдү киргизүү үчүн көбүрөөк ойлорду ойлоп жатасыз (Ар бир долбоор окуядан башталат).

5 -кадам: Конструктивдүү дүйнөдө колдонуу

BME280 нымдуулукту жана басымды өлчөөнү талап кылган бардык колдонмолордо жогорку көрсөткүчтөргө жетишет. Бул жаңы колдонмолор Контекстти таануу, мис. Терини аныктоо, Бөлмөнүн өзгөрүшүн аныктоо, Фитнести көзөмөлдөө / Жакшы жашоо, Кургактыкка же Жогорку температурага байланыштуу эскертүү, Көлөмдү жана аба агымын өлчөө, Үйдү автоматташтыруу, Контролдоо Жылытуу, Желдетүү, Кондиционерлөө (HVAC), Интернет нерселери (IoT), GPSти жакшыртуу (мис. Убакыт-Биринчи оңдоону жакшыртуу, Өлгөндөрдү эсепке алуу, жантайманы аныктоо), Үй ичиндеги навигация (Полду аныктоо, лифтти аныктоо), Ачык навигация, Эс алуу жана спорттук колдонмолор, Аба ырайы божомолу жана Тик ылдамдык көрсөткүчү (Rise/Sink Ылдамдык).

6 -кадам: Жыйынтык

Көрүнүп тургандай, бул долбоор аппараттык жана программалык камсыздоонун эмнеге жөндөмдүү экенин эң сонун көрсөтүп турат. Бир аз убакыттын ичинде мындай таасирдүү долбоорду курууга болот! Албетте, бул башталышы гана. Автоматташтырылган аэропорт жеке метеостанциялары сыяктуу татаалыраак жеке метеостанцияны жасоодо анемометр (шамалдын ылдамдыгы), трансмисометр (көрүнүү), пиранометр (күн радиациясы) сыяктуу дагы башка сенсорлор камтылышы мүмкүн. I²C сенсор Rasp Pi менен. I²C байланыштарынын натыйжаларын жана иштешин көрүү чынында таң калыштуу. Аны да текшериңиз. Куруу жана үйрөнүү кызыктуу болсун! Сураныч, бул үйрөткүч жөнүндө оюңузду билдириңиз. Керек болсо кээ бир жакшыртууларды жасоону каалайбыз.

Сунушталууда: