Агуулгын хүснэгт:
- Алхам 1: Билл шаардлагатай тоног төхөөрөмж
- Алхам 2: Тохиргооны тоног төхөөрөмжийн холболт
- Алхам 3: Java дээр Raspberry Pi програмчлал
- Алхам 4: Кодын практик байдал
- Алхам 5: Бүтээлч ертөнцөд ашиглах
- Алхам 6: Дүгнэлт
Видео: Java дахь BME280 -тай Raspberry Pi ашиглан хувийн цаг уурын станц: 6 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:01
Цаг агаар муу байгаа нь цонхоор үргэлж муухай харагддаг
Бид үргэлж орон нутгийнхаа цаг агаар, цонхоор харж буй зүйлээ ажиглах сонирхолтой байсан. Бид мөн халаалт, агааржуулалтын системээ илүү сайн хянаж байхыг хүсч байсан. Хувийн цаг уурын станц барих нь маш сайн туршлага юм. Энэхүү төслийг барьж дууссаны дараа утасгүй холбоо хэрхэн ажилладаг, мэдрэгч хэрхэн ажилладаг, 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 програмчлал
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 холбооны үр дүн, ажлын үр дүнг харах үнэхээр гайхалтай. Үүнийг бас шалгаарай. Хөгжилтэй барилга барьж, суралцаарай! Энэхүү зааварчилгааны талаар юу гэж бодож байгаагаа бидэнд хэлээрэй. Шаардлагатай бол бид зарим зүйлийг сайжруулахыг хүсч байна.
Зөвлөмж болгож буй:
NaTaLia цаг уурын станц: Arduino нарны эрчим хүчээр ажилладаг цаг уурын станц зөв замаар хийсэн: 8 алхам (зурагтай)
NaTaLia цаг уурын станц: Arduino нарны эрчим хүчээр ажилладаг цаг уурын станц зөв замаар хийсэн: 1 жилийн турш 2 өөр байршилд амжилттай ажилласны дараа би нарны эрчим хүчээр ажилладаг цаг уурын станцын төслийн төлөвлөгөөгөө хуваалцаж, хэрхэн урт хугацаанд үнэхээр оршин тогтнож чадах систем болж хөгжсөн тухай тайлбарлаж байна. нарны эрчим хүчнээс үүссэн үе. Хэрэв та дагах бол
Arduino & BME280 ашиглан өрөөний цаг уурын станц: 4 алхам
Arduino & BME280 ашиглан өрөөний цаг уурын станц: Өмнө нь би орон нутгийн температур, чийгшлийг харуулсан энгийн цаг агаарын станцтай хуваалцсан. Асуудал нь шинэчлэхэд цаг хугацаа шаардагдах бөгөөд өгөгдөл үнэн зөв биш байв. Энэхүү гарын авлагад бид дотор цаг агаарын хяналт хийх болно
Wemos D1 Mini, BME280 ба Sensate ашиглан цаг уурын станц: 6 алхам
Wemos D1 Mini, BME280 болон Sensate ашиглан цаг уурын станц: Өмнөх нийтлэлүүдэд би цаг уурын станц барих өөр өөр аргуудыг хуваалцсан. Хэрэв та үүнийг шалгаж үзээгүй бол энд байгаа линк байна. Энэхүү зааварчилгаанд би Wemos болон IsoT платформ ашиглан Sensate нэртэй энгийн цаг уурын станцыг хэрхэн бүтээхийг үзүүлэх болно
Particle Photon IoT хувийн цаг уурын станц: 4 алхам (зурагтай)
Particle Photon IoT хувийн цаг уурын станц:
Хувийн цаг уурын станц хийх: 10 алхам (зурагтай)
Хувийн цаг уурын станц хийх: Өрөөндөө сууж хөлрөх эсвэл жихүүдэс хүрэх; Танай өрөөний температур ямар байх бол гэж та гайхаж байна уу? эсвэл чийгшил ямар байх вэ? Энэ нь хэсэг хугацааны дараа надтай хамт тохиолдсон юм. Энэ нь хяналт тавьдаг хувийн цаг уурын станцыг бий болгоход хүргэдэг