Სარჩევი:

პირადი ამინდის სადგური ჟოლოს Pi გამოყენებით BME280 ჯავაში: 6 ნაბიჯი
პირადი ამინდის სადგური ჟოლოს Pi გამოყენებით BME280 ჯავაში: 6 ნაბიჯი

ვიდეო: პირადი ამინდის სადგური ჟოლოს Pi გამოყენებით BME280 ჯავაში: 6 ნაბიჯი

ვიდეო: პირადი ამინდის სადგური ჟოლოს Pi გამოყენებით BME280 ჯავაში: 6 ნაბიჯი
ვიდეო: 7-დღიანი კრუიზი იაპონიაში Diamond Princess-ით, მდიდრული საკრუიზო გემით|ნაწილი 1 2024, ივლისი
Anonim
Image
Image
ძირითადი აღჭურვილობის ბილეთი
ძირითადი აღჭურვილობის ბილეთი

ცუდი ამინდი ყოველთვის უარესად გამოიყურება ფანჯრიდან

ჩვენ ყოველთვის გვაინტერესებდა ჩვენი ადგილობრივი ამინდის მონიტორინგი და რას ვხედავთ ფანჯრიდან. ჩვენ ასევე გვინდოდა უკეთესი კონტროლი ჩვენს გათბობასა და კონდიცირების სისტემაზე. პირადი ამინდის სადგურის მშენებლობა არის დიდი სწავლის გამოცდილება. ამ პროექტის მშენებლობის დასრულების შემდეგ თქვენ გექნებათ უკეთესი გაგება, თუ როგორ მუშაობს უკაბელო კომუნიკაციები, როგორ მუშაობს სენსორები და რამდენად ძლიერი შეიძლება იყოს Raspberry Pi პლატფორმა. ამ პროექტის საფუძველზე და მიღებული გამოცდილებით, თქვენ შეძლებთ მომავალში ადვილად ააწყოთ უფრო რთული პროექტები.

ნაბიჯი 1: ძირითადი აღჭურვილობის ბილეთი

ძირითადი აღჭურვილობის ბილეთი
ძირითადი აღჭურვილობის ბილეთი
ძირითადი აღჭურვილობის ბილეთი
ძირითადი აღჭურვილობის ბილეთი
ძირითადი აღჭურვილობის ბილეთი
ძირითადი აღჭურვილობის ბილეთი

1. ჟოლო პი

პირველი ნაბიჯი არის ხელი მოაკიდოთ ჟოლოს დაფაზე. Raspberry Pi არის Linux დაფუძნებული ერთჯერადი კომპიუტერი. მისი მიზანია გააუმჯობესოს პროგრამირების უნარი და აპარატურის გაგება. იგი სწრაფად მიიღეს ჰობისტებმა და ელექტრონიკის მოყვარულებმა ინოვაციური პროექტებისთვის.

2. I²C ფარი ჟოლოს პიისთვის

INPI2 (I2C ადაპტერი) უზრუნველყოფს Raspberry Pi 2/3 და 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: აპარატურის კავშირი კონფიგურაციისთვის

აპარატურის კავშირი კონფიგურაციისთვის
აპარატურის კავშირი კონფიგურაციისთვის
აპარატურის კავშირი კონფიგურაციისთვის
აპარატურის კავშირი კონფიგურაციისთვის

გააკეთეთ წრე ნაჩვენები სქემატური სქემის მიხედვით.

სწავლისას ჩვენ საფუძვლიანად გავეცანით ელექტრონიკის საფუძვლებს ტექნიკისა და პროგრამული უზრუნველყოფის ცოდნასთან დაკავშირებით. ჩვენ გვინდოდა ამ პროექტის მარტივი ელექტრონიკის სქემატური შედგენა. ელექტრონული სქემები ჰგავს ელექტრონიკის გეგმას. შეადგინეთ გეგმა და ყურადღებით მიჰყევით დიზაინს. ჩვენ აქ გამოვიყენეთ ელექტრონიკის საფუძვლები. ლოგიკა მიგიყვანთ A– დან B– მდე, წარმოსახვა მიგიყვანთ ყველგან!

Raspberry Pi და I²C Shield კავშირი

უპირველეს ყოვლისა აიღეთ Raspberry Pi და განათავსეთ I²C ფარი (შიგნითა პირისპირ I²C პორტით). ნაზად დააჭირეთ ფარს Pi- ს GPIO ქინძისთავებზე და ჩვენ დავასრულებთ ამ ნაბიჯს ისევე მარტივად, როგორც ტორტი (იხ. სურათი).

სენსორისა და ჟოლოს Pi კავშირი

აიღეთ სენსორი და შეაერთეთ I²C კაბელი მასთან. დარწმუნდით, რომ I²C გამომავალი ყოველთვის უკავშირდება I²C შესასვლელს. იგივე უნდა მოჰყვეს ჟოლოს Pi- სთვის, I²C ფარით დამონტაჟებული GPIO ქინძისთავებით. ჩვენ გვაქვს I²C ფარი და დამაკავშირებელი კაბელები ჩვენს მხარეს, როგორც ძალიან დიდი რელიეფი და ძალიან დიდი უპირატესობა, რადგან ჩვენ დავრჩით მხოლოდ ჩართვა და თამაში ვარიანტი. აღარ არის ქინძისთავები და გაყვანილობის პრობლემა და, შესაბამისად, დაბნეულობა გაქრა. უბრალოდ წარმოიდგინეთ თავი მავთულხლართების ქსელში და მოხვედით ამაში. შვება ამისგან. ეს ართულებს ნივთებს.

შენიშვნა: ყავისფერი მავთული ყოველთვის უნდა დაიცვას Ground (GND) კავშირი ერთი მოწყობილობის გამომავალსა და სხვა მოწყობილობის შეყვანას შორის

ინტერნეტთან დაკავშირება არის საჭიროება

თქვენ ნამდვილად გაქვთ არჩევანი აქ. შეგიძლიათ დაუკავშიროთ Raspberry Pi LAN კაბელს ან უკაბელო Nano USB ადაპტერს WIFI დაკავშირებადობისთვის. ნებისმიერ შემთხვევაში, მანიფესტი არის ინტერნეტთან დაკავშირება, რომელიც დასრულებულია.

ჩართვა ჩართვა

შეაერთეთ მიკრო USB კაბელი Raspberry Pi- ს კვების ბლოკში. დარტყმა და voila! ყველაფერი კარგადაა და ჩვენ დაუყოვნებლივ დავიწყებთ.

კავშირი ჩვენებასთან

ჩვენ შეგვიძლია HDMI კაბელი მივაერთოთ მონიტორს ან ტელევიზორს. ჩვენ შეგვიძლია მივაღწიოთ Raspberry Pi– ს მონიტორთან დაკავშირების გარეშე –SSH გამოყენებით (Pi– ს ბრძანების ხაზზე წვდომა სხვა კომპიუტერიდან). თქვენ ასევე შეგიძლიათ გამოიყენოთ PUTTY პროგრამული უზრუნველყოფა ამისათვის. ეს ვარიანტი არის მოწინავე მომხმარებლებისთვის, ასე რომ ჩვენ აქ დეტალურად არ განვიხილავთ მას.

მე გავიგე, რომ რეცესია იქნება, მე გადავწყვიტე არ მივიღო მონაწილეობა

ნაბიჯი 3: ჟოლოს პროგრამირება ჯავაში

ჟოლო Pi პროგრამირება ჯავაში
ჟოლო Pi პროგრამირება ჯავაში

ჯავის კოდი Raspberry Pi და BME280 სენსორისთვის. ის ხელმისაწვდომია ჩვენს Github საცავში.

სანამ კოდზე გადახვალთ, დარწმუნდით, რომ წაიკითხეთ Readme ფაილში მოცემული ინსტრუქციები და ამის მიხედვით დააყენეთ თქვენი Raspberry Pi. ამას მხოლოდ ერთი წუთი დასჭირდება. პირადი ამინდის სადგური არის ამინდის საზომი ინსტრუმენტების ერთობლიობა, რომელსაც მართავს კერძო პირი, კლუბი, ასოციაცია ან თუნდაც ბიზნესი. პერსონალური მეტეოროლოგიური სადგურები შეიძლება მუშაობდნენ მხოლოდ მფლობელის სიამოვნებისა და განათლების მიზნით, მაგრამ მრავალი მეტეოროლოგიური სადგურის ოპერატორი ასევე იზიარებს მათ მონაცემებს სხვებთან ერთად, მონაცემების ხელით შედგენით და გავრცელებით, ან ინტერნეტის ან სამოყვარულო რადიოს გამოყენებით.

კოდი არის უმარტივესი ფორმით, რომლის წარმოდგენაც შეგიძლიათ და არ უნდა გქონდეთ პრობლემა, მაგრამ ჰკითხეთ გაქვთ თუ არა. თუნდაც ათასი რამ იცოდე, მაინც ჰკითხე ვინმეს, ვინც იცის.

თქვენ ასევე შეგიძლიათ დააკოპიროთ ამ სენსორის სამუშაო java კოდი აქედან.

// განაწილებულია თავისუფალი ნების ლიცენზიით.// გამოიყენეთ როგორც გინდათ, მოგებით თუ უფასოდ, იმ პირობით, რომ იგი ჯდება მისი ასოცირებული ნაწარმოებების ლიცენზიებში. // BME280 // ეს კოდი შექმნილია BME280_I2CS I2C მინი მოდულთან მუშაობისთვის, რომელიც ხელმისაწვდომია ControlEverything.com– დან. //

იმპორტი com.pi4j.io.i2c. I2CBus;

იმპორტი com.pi4j.io.i2c. I2CD მოწყობილობა; იმპორტი com.pi4j.io.i2c. I2C ქარხანა; იმპორტი java.io. IOException;

საჯარო კლასი BME280

{public static void main (სიმებიანი არგები ) ისვრის გამონაკლისს {// შექმენით I2C ავტობუსი I2CBus ავტობუსი = I2CFactory.getInstance (I2CBus. BUS_1); // მიიღეთ I2C მოწყობილობა, BME280 I2C მისამართი არის 0x76 (108) I2CD მოწყობილობის მოწყობილობა = bus.getDevice (0x76); // წაიკითხეთ მონაცემების 24 ბაიტი მისამართიდან 0x88 (136) ბაიტი b1 = ახალი ბაიტი [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); 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); თუ (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; } // წაიკითხეთ მონაცემების 1 ბაიტი მისამართიდან 0xA1 (161) int dig_H1 = ((ბაიტი) device.read (0xA1) & 0xFF); // წაიკითხეთ მონაცემების 7 ბაიტი 0xE1 (225) მოწყობილობიდან. წაიკითხეთ (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); // აირჩიეთ კონფიგურაციის რეგისტრატორი // ლოდინის დრო = 1000 ms device.write (0xF5, (byte) 0xA0); // წაიკითხეთ მონაცემების 8 ბაიტი მისამართიდან 0xF7 (247) // წნევა 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; } 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- ის გაძლიერება (მაგ. დროთა განმავლობაში პირველადი გაუმჯობესება, მკვდარი გაანგარიშება, ფერდობის გამოვლენა), შიდა ნავიგაცია (იატაკის გამოვლენის შეცვლა, ლიფტის გამოვლენა), გარე ნავიგაცია, დასვენებისა და სპორტის პროგრამები, ამინდის პროგნოზი და ვერტიკალური სიჩქარის ჩვენება (აწევა/ჩაძირვა) სიჩქარე).

ნაბიჯი 6: დასკვნა

როგორც ხედავთ, ეს პროექტი არის დიდი დემონსტრირება იმისა, თუ რისი აპარატურა და პროგრამული უზრუნველყოფა შეუძლიათ. მცირე დროში შეიძლება შეიქმნას ასეთი შთამბეჭდავი პროექტი! რა თქმა უნდა, ეს მხოლოდ დასაწყისია. უფრო დახვეწილი პერსონალური ამინდის სადგურის შექმნა, როგორიცაა ავტომატური აეროპორტის პერსონალური ამინდის სადგურები, შეიძლება მოიცავდეს კიდევ რამდენიმე სენსორს, როგორიცაა ანემომეტრი (ქარის სიჩქარე), გადამცემი (ხილვადობა), პირანომეტრი (მზის რადიაცია) და ა.შ. I²C სენსორი Rasp Pi– ით. მართლაც გასაოცარია I²C კომუნიკაციების შედეგებისა და მუშაობის ნახვა. ესეც შეამოწმე. გაერთეთ სწავლასა და მშენებლობაში! გთხოვთ შეგვატყობინოთ რას ფიქრობთ ამ სასწავლოზე. ჩვენ სიამოვნებით გავაკეთებთ რაიმე სახის გაუმჯობესებას საჭიროების შემთხვევაში.

გირჩევთ: