Spisu treści:

Micro:bit Dive-O-Meter: 8 kroków (ze zdjęciami)
Micro:bit Dive-O-Meter: 8 kroków (ze zdjęciami)

Wideo: Micro:bit Dive-O-Meter: 8 kroków (ze zdjęciami)

Wideo: Micro:bit Dive-O-Meter: 8 kroków (ze zdjęciami)
Wideo: Красиво и легко | Ажурная салфетка из шнура! 2024, Lipiec
Anonim
Mikro:bitowy miernik nurkowania
Mikro:bitowy miernik nurkowania
Mikro:bitowy miernik nurkowania
Mikro:bitowy miernik nurkowania
Mikro:bitowy miernik nurkowania
Mikro:bitowy miernik nurkowania

Nadeszło lato, czas na basen!

Dobra okazja, aby zabrać siebie i swój micro:bit na zewnątrz, a w tym przypadku nawet na basen.

Opisany tutaj micro:bit dive-o-meter to prosty miernik głębokości DIY, który pozwala zmierzyć głębokość nurkowania. Składa się tylko z micro:bit, pakietu baterii lub LiPo, złącza krawędziowego dla micro:bit, czujnika ciśnienia barometrycznego BMP280 lub BME280 i kilku kabli połączeniowych. Korzystanie z Pimoroni enviro:bit sprawia, że rzeczy stają się jeszcze prostsze. Wszystko to jest zapakowane w dwie warstwy wodoszczelnych, przezroczystych plastikowych lub silikonowych toreb, z dodatkowymi obciążnikami, aby skompensować siłę wyporu.

Jest to aplikacja czujnika ciśnienia micro:bit, którą opisałem w poprzedniej instrukcji.

Możesz korzystać z urządzenia m.in. g. na zawody nurkowe z przyjaciółmi i rodziną lub aby dowiedzieć się, jak głęboki jest ten staw. Przetestowałem go na najgłębszym basenie w mojej okolicy i stwierdziłem, że działa co najmniej do głębokości 3,2 metra. Około pięciu metrów to teoretyczne maksimum. Do tej pory nie testowałem szczegółowo jego precyzji, ale podawane liczby mieściły się przynajmniej w oczekiwanym zakresie.

Kilka uwag: To nie ma być narzędziem dla prawdziwych nurków. Twój micro:bit ulegnie uszkodzeniu, jeśli ulegnie zamoczeniu. Używasz tej instrukcji na własne ryzyko.

Aktualizacja z 27 maja: Teraz możesz znaleźć skrypt MakeCode HEX, który możesz załadować bezpośrednio do swojego micro:bit. Zobacz krok 6. Aktualizacja 13 czerwca: dodano Enviro:bit i wersję kablową. Zobacz kroki 7 i 8

Krok 1: Teoria stojąca za urządzeniem

Żyjemy na dnie oceanu powietrza. Ciśnienie w dole wynosi około 1020 hPa (hektopaskal), ponieważ ciężar słupa powietrza w przestrzeni wynosi około 1 kg na centymetr kwadratowy.

Gęstość wody jest znacznie większa, gdyż litr powietrza waży ok. 1,2 g, a litr wody 1 kg, czyli ok. 800-krotnie. Tak więc, ponieważ spadek ciśnienia atmosferycznego wynosi około 1 hPa na każde 8 metrów wysokości, przyrost ciśnienia wynosi 1 hPa na każdy centymetr pod powierzchnią wody. Na głębokości około 10 m ciśnienie wynosi 2000 hPa, czyli dwie atmosfery.

Zastosowany tutaj czujnik ciśnienia ma zakres pomiarowy od 750 do 1500 hPa przy rozdzielczości około jednego hPa. Oznacza to, że możemy mierzyć głębokości do 5 metrów z rozdzielczością około 1 cm.

Urządzenie to byłby głębokościomierzem typu Boyle Marriotte. Jego montaż jest dość prosty i opisany w dalszej części. Czujnik korzysta z protokołu I2C, więc przydatne jest złącze krawędziowe dla micro:bit. Najbardziej krytyczną częścią są wodoszczelne torby, ponieważ wilgoć może uszkodzić micro:bit, czujnik lub baterię. Ponieważ trochę powietrza zostanie uwięzione w workach, dodanie obciążników pomaga zrekompensować siłę wyporu.

Krok 2: Korzystanie z urządzenia

Korzystanie z urządzenia
Korzystanie z urządzenia
Korzystanie z urządzenia
Korzystanie z urządzenia
Korzystanie z urządzenia
Korzystanie z urządzenia
Korzystanie z urządzenia
Korzystanie z urządzenia

Skrypt, jak pokazano szczegółowo na późniejszym etapie, jest odmianą skryptu, który opracowałem wcześniej dla miernika ciśnienia. Do przetestowania urządzenia można wykorzystać opisaną tam prostą komorę ciśnieniową.

Dla celów nurkowych pokazuje głębokość w metrach, obliczoną z pomiarów ciśnienia, w postaci wykresu słupkowego w odstępach co 20 cm lub, na życzenie, w liczbach.

Za pomocą przycisku A na micro:bit ustawisz aktualne ciśnienie jako wartość odniesienia ciśnienia. Aby potwierdzić wpis, matryca mignie raz.

Możesz użyć tego albo zobaczyć, jak głęboko nurkujesz, albo zapisać, jak głęboko nurkujesz.

W pierwszym przypadku jako wartość referencyjną należy ustawić aktualne ciśnienie powietrza zewnętrznego. W drugim przypadku ustaw ciśnienie w najgłębszym punkcie, gdzie jesteś jako odniesienie ciśnienia, co następnie pozwala pokazać, jak głęboko byłeś, gdy jesteś z powrotem na powierzchni. Przycisk B wyświetla głębokość obliczoną z różnicy ciśnień jako wartość liczbową w metrach.

Krok 3: Wymagane materiały

Wymagane materiały
Wymagane materiały
Wymagane materiały
Wymagane materiały
Wymagane materiały
Wymagane materiały

Mikro:bit. Np. w cenie 13 GBP/16 Euro w Pimoroni UK/DE.

Złącze krawędziowe (Kitronic lub Pimoroni), 5 GBP. Użyłem wersji Kitronic.

Czujnik BMP/BME280. Użyłem czujnika BMP280 firmy Banggood, 4,33 euro za trzy sztuki.

Kable połączeniowe do podłączenia czujnika i złącza krawędziowego.

Doskonałą alternatywą dla powyższej kombinacji złącza krawędziowego/czujnika może być Pimoroni enviro:bit (do tej pory nie testowane, patrz ostatni krok).

Pakiet baterii lub LiPo do micro:bit.

Kabel zasilający z włącznikiem (opcjonalnie, ale pomocny). Przezroczyste wodoszczelne torby. Użyłem silikonowego etui na telefon komórkowy i jednej lub dwóch małych torebek strunowych. Upewnij się, że materiał jest wystarczająco gruby, aby szpilki na złączu krawędziowym nie uszkodziły torebek.

Niektóre ciężary. Użyłem kawałków ołowianych ciężarków, które są używane do łowienia ryb.

Arduino IDE i kilka bibliotek.

Krok 4: Montaż

montaż
montaż
montaż
montaż
montaż
montaż
montaż
montaż

Zainstaluj Arduino IDE i wymagane biblioteki. Szczegóły opisano tutaj.

(Niewymagane dla skryptu MakeCode.) Biorąc pod uwagę, że używasz złącza krawędziowego Kitronik, przylutuj piny do portów I2C 19 i 20. Nie jest to wymagane w przypadku złącza krawędziowego Pimoroni. Przylutuj głowicę do czujnika, wyłam i połącz czujnik i złącze krawędziowe za pomocą kabli połączeniowych. Podłącz VCC do 3V, GND do 0 V, SCL do portu 19 i SDA do portu 20. Alternatywnie przylutuj kable bezpośrednio do złącza. Podłącz micro:bit do naszego komputera kablem USB. Otwórz dostarczony skrypt i sflashuj go do micro:bit. Użyj monitora szeregowego lub plotera, sprawdź, czy czujnik podaje rozsądne dane. Odłącz micro:bit od komputera. Podłącz akumulator lub LiPo do micro:bit. Naciśnij przycisk B, odczytaj wartość Naciśnij przycisk A. Naciśnij przycisk B, odczytaj wartość. Umieść urządzenie w dwóch warstwach hermetycznych worków, pozostawiając w workach bardzo mało powietrza. W przypadku, umieścić obciążnik, aby skompensować siłę wyporu. Sprawdź, czy wszystko jest szczelne. Idź na basen i graj.

Krok 5: Skrypt MicroPython

Skrypt po prostu pobiera wartość ciśnienia z czujnika, porównuje ją z wartością odniesienia, a następnie oblicza głębokość z różnicy. W celu wyświetlenia wartości w postaci wykresu słupkowego brane są pod uwagę liczba całkowita i pozostała część wartości głębokości. Pierwsza określa wysokość linii. Pozostała część jest podzielona na pięć pojemników, które definiują długość słupków. Najwyższy poziom to 0 - 1 m, najniższy 4 - 5 m. Jak wspomniano wcześniej, naciśnięcie przycisku A ustawia ciśnienie odniesienia, przycisk B wyświetla "głębokość względną" w metrach, wyświetlaną jako wartość liczbowa. Do tej pory wartości ujemne i dodatnie są przedstawiane jako bargraf na matrycy LED w ten sam sposób. Możesz zoptymalizować skrypt do swoich potrzeb. Możesz wyłączyć wyciszenie niektórych linii, aby wyświetlić wartości na monitorze szeregowym lub ploterze Arduino IDE. Aby emulować tę funkcję, możesz zbudować urządzenie, które opisałem w poprzedniej instrukcji.

Nie napisałem części skryptu, która odczytuje czujnik. Nie jestem pewien źródła, ale bardzo dziękuję autorom. Wszelkie poprawki lub wskazówki dotyczące optymalizacji są mile widziane.

#włączać

#zawiera mikrobit Adafruit_Microbit_Matrix; #define BME280_ADDRESS 0x76 unsigned long int hum_raw, temp_raw, pres_raw; podpisany długi int t_fine; uint16_t dig_T1; int16_t dig_T2; int16_t dig_T3; uint16_t dig_P1; int16_t dig_P2; int16_t dig_P3; int16_t dig_P4; int16_t dig_P5; int16_t dig_P6; int16_t dig_P7; int16_t dig_P8; int16_t dig_P9; int8_t dig_H1; int16_t dig_H2; int8_t dig_H3; int16_t dig_H4; int16_t dig_H5; int8_t dig_H6; double press_norm = 1015; // wartość początkowa podwójna głębokość; // obliczona głębokość //----------------------------------------------------------- -------------------------------------------------- ---------------------- void setup() { uint8_t osrs_t = 1; //Nadpróbkowanie temperatury x 1 uint8_t osrs_p = 1; //Nadpróbkowanie ciśnienia x 1 uint8_t osrs_h = 1; //Nadpróbkowanie wilgotności x 1 uint8_t mode = 3; //Tryb normalny uint8_t t_sb = 5; //Tstandby 1000ms filtr uint8_t = 0; //Wyłącz filtr uint8_t spi3w_en = 0; //3-wire SPI Wyłącz uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | tryb; uint8_t config_reg = (t_sb << 5) | (filtr <<2) | spi3w_pl; uint8_t ctrl_hum_reg = osrs_h; pinMode(PIN_BUTTON_A, WEJŚCIE); pinMode(PIN_BUTTON_B, WEJŚCIE); Serial.początek(9600); // ustaw prędkość portu szeregowego Serial.print("Ciśnienie [hPa] "); // nagłówek wyjścia szeregowego Wire.begin(); writeReg(0xF2, ctrl_hum_reg); writeReg(0xF4, ctrl_meas_reg); writeReg(0xF5, config_reg); przeczytajPrzytnij(); // microbit.begin(); // microbit.print("x"); opóźnienie (1000); } //--------------------------------------------------------------- ---------------------------------------------- void loop() { double temp_act = 0.0, press_act = 0.0, hum_act=0.0; podpisany długi int temp_cal; unsigned long int press_cal, hum_cal; int N; wewn M; podwójne naciśnięcie_delta; // ciśnienie względne int głębokość_m; // głębokość w metrach, część całkowita podwójna głębokość_cm; // reszta w cm readData(); // temp_cal = kalibracja_T(temp_surowy); press_cal = kalibracja_P(pres_raw); // hum_cal = kalibracja_H(hum_raw); // temp_act = (podwójny) temp_cal / 100.0; press_act = (podwójne) press_cal / 100.0; // hum_act = (podwójny)hum_cal / 1024.0; microbit.clear(); //resetuj matrycę LED // przycisk A ustawia wartość rzeczywistą jako wartość referencyjną (P zero) // przycisk B wyświetla bieżącą wartość jako głębokość w metrach (obliczoną z różnicy ciśnień) if (! digitalRead(PIN_BUTTON_A)) { // ustaw normalne ciśnienie powietrza jako zero press_norm = press_act; // microbit.print("P0: "); // microbit.print(press_norm, 0); // microbit.print("hPa"); microbit.fillScreen(LED_ON); // mrugnij raz, aby potwierdzić opóźnienie (100); }else if (! digitalRead(PIN_BUTTON_B)) { // wyświetl głębokość w metrach microbit.print(depth, 2); microbit.print("m"); // Serial.println(""); }else{ // oblicz głębokość na podstawie różnicy ciśnień press_delta = (press_act - press_norm); // oblicz względną głębokość ciśnienia = (press_delta/100); // głębokość w metrach depth_m = int(abs(depth)); // głębokość w metrach głębokość_cm = (abs(głębokość) - głębokość_m); // reszta /* // używana do programowania Serial.println(depth); Serial.println(głębokość_m); Serial.println(głębokość_cm); */ // Kroki dla bargrafu if (głębokość_cm> 0,8){ // ustaw długość słupków (N=4); } inaczej if (głębokość_cm > 0,6){ (N=3); } else if (głębokość_cm > 0,4){ (N=2); } inaczej if (głębokość_cm > 0,2){ (N=1); } inaczej { (N=0); }

if (głębokość_m == 4){ // ustaw poziom == metr

(M=4); } else if (głębokość_m == 3){ (M=3); } else if (głębokość_m == 2){ (M=2); } else if (głębokość_m == 1){ (M=1); } inaczej { (M=0); // górny wiersz } /* // używany do celów programistycznych Serial.print("m: "); Serial.println(głębokość_m); Serial.print("cm: "); Serial.println(głębokość_cm); Serial.print("M: "); Serial.println(M); // do celów programistycznych Serial.print("N: "); Serial.println(N); // dla celów programistycznych delay(500); */ // rysuj bargraf microbit.drawLine(0, M, N, M, LED_ON); }

// wyślij wartość do portu szeregowego dla plotera

Serial.print(press_delta); // narysuj linie wskaźnika i napraw wyświetlany zakres Serial.print("\t"); Serial.print(0); Serial.print("\t"); Druk.seryjny(-500); Serial.print("\t"); Serial.println(500); opóźnienie (500); // Mierz dwa razy na sekundę } //---------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------- // dla czujnika bmp/bme280 wymagane są następujące elementy, zachowaj bez zmian readTrim() { uint8_t data[32], i=0; // Napraw 2014/Wire.beginTransmission(BME280_ADDRESS); Wire.write(0x88); Wire.endTransmission(); Wire.requestFrom(BME280_ADDRESS, 24); // Napraw 2014/while(Wire.available()){ data = Wire.read(); i++; } Wire.beginTransmission(BME280_ADDRESS); // Dodaj 2014/Wire.write(0xA1); // Dodaj 2014/Wire.endTransmission(); // Dodaj 2014/Wire.requestFrom(BME280_ADDRESS, 1); // Dodaj 2014/data = Wire.read(); // Dodaj 2014/i++; // Dodaj 2014/Wire.beginTransmission(BME280_ADDRESS); Wire.write(0xE1); Wire.endTransmission(); Wire.requestFrom(BME280_ADDRESS, 7); // Napraw 2014/while(Wire.available()){ data = Wire.read(); i++; } dig_T1 = (dane[1] << 8) | dane[0]; dig_P1 = (dane[7] << 8) | dane[6]; dig_P2 = (dane[9] << 8) | dane[8]; dig_P3 = (dane[11]<< 8) | dane[10]; dig_P4 = (dane[13]<< 8) | dane[12]; dig_P5 = (dane[15]<< 8) | dane[14]; dig_P6 = (dane[17]<< 8) | dane[16]; dig_P7 = (dane[19]<< 8) | dane[18]; dig_T2 = (dane[3] << 8) | dane[2]; dig_T3 = (dane[5] << 8) | dane[4]; dig_P8 = (dane[21]<< 8) | dane[20]; dig_P9 = (dane[23]<< 8) | dane[22]; dig_H1 = dane[24]; dig_H2 = (dane[26]<< 8) | dane[25]; dig_H3 = dane[27]; dig_H4 = (dane[28]<< 4) | (0x0F i dane[29]); dig_H5 = (dane[30] 4) & 0x0F); // Napraw 2014/dig_H6 = dane[31]; // Napraw 2014/} void writeReg(uint8_t reg_address, uint8_t data) { Wire.beginTransmission(BME280_ADDRESS); Wire.write(reg_address); Drut.zapis(dane); Wire.endTransmission(); } void readData() { int i = 0; dane uint32_t[8]; Wire.beginTransmission (BME280_ADDRESS); Wire.write(0xF7); Wire.endTransmission(); Wire.requestFrom(BME280_ADDRESS, 8); while(Przewód.dostępny()){ dane = Przewód.odczyt(); i++; } pres_raw = (dane[0] << 12) | (dane[1] 4); temp_raw = (dane[3] << 12) | (dane[4] 4); hum_raw = (data[6] 3) - ((długa ze znakiem)dig_T1 11; var2 = (((((adc_T >> 4) - ((długa ze znakiem)dig_T1)) * ((adc_T>>4) - ((długa liczba ze znakiem)dig_T1))) >> 12) * ((długa liczba ze znakiem)dig_T3)) >> 14; t_fine = zm1 + zm2; T = (t_fine * 5 + 128) >> 8; return T; } unsigned long int kalibracja_P(signed long int adc_P) { signed long int zmienna1, zmienna2; unsigned long int P; zmienna1 = (((signed long int)t_fine)>>1) - (signed long int)64000; zmienna2 = (((var1>>2) * (var1>>2)) >> 11) * ((długa liczba ze znakiem)dig_P6); zm2 = zmienna2 + ((zmienna1*((długa liczba ze znakiem)dig_P5))2)+(((długa liczba ze znakiem)dig_P4)2)*(zmienna1>>2)) >> 13)) >>3) + ((((długa liczba ze znakiem)dig_P2) * zmienna1)>>1))>>18; var1 = ((((32768+var1))*((długa ze znakiem)dig_P1))>>15); if (var1 == 0) { return 0; } P = (((unsigned long int)(((signed long int)1048576)-adc_P)-(var2>>12)))*3125; if(P<0x80000000) { P = (P<<1) / ((unsigned long int) var1); } else { P = (P / (long unsigned long int)var1) * 2; } var1 = (((długa liczba ze znakiem)dig_P9) * ((długa liczba ze znakiem)(((P>>3) * (P>>3))>>13)))>>12; var2 = (((długa liczba ze znakiem)(P>>2)) * ((długa liczba ze znakiem)dig_P8))>>13; P = (długa liczba bez znaku)((długa liczba bez znaku)P + ((zmienna1 + zmienna2 + dig_P7) >> 4)); powrót P; } unsigned long int kalibracja_H(signed long int adc_H) { signed long int v_x1; v_x1 = (t_fine - ((długa ze znakiem int)76800)); v_x1 = (((((adc_H << 14) -(((długa ze znakiem)dig_H4) 15) * (((((((v_x1 * ((długa ze znakiem)dig_H6))) >> 10) * (((v_x1 * ((długa ze znakiem int)dig_H3)) >> 11) + ((długa ze znakiem int) 32768))) >> 10) + ((długa ze znakiem int)2097152)) * ((długa ze znakiem int) dig_H2) + 8192) >> 14)); v_x1 = (v_x1 - (((((v_x1 >> 15) * (v_x1 >> 15)) >> 7) * ((długa liczba ze znakiem)dig_H1)) >> 4)); v_x1 = (v_x1 419430400 ? 419430400: v_x1); return (long unsigned long int)(v_x1 >> 12);

Krok 6: Duże uproszczenie: kod MakeCode/JavaScript

Duże uproszczenie: kod MakeCode/JavaScript
Duże uproszczenie: kod MakeCode/JavaScript
Duże uproszczenie: kod MakeCode/JavaScript
Duże uproszczenie: kod MakeCode/JavaScript

W maju 2018 roku Pimoroni wypuściło enviro:bit, które jest wyposażone w czujnik ciśnienia/wilgotności/temperatury BME280, czujnik światła i koloru TCS3472 oraz mikrofon MEMS. Ponadto oferują bibliotekę JavaScript dla edytora MakeCode oraz bibliotekę MicroPython dla tych czujników.

Używałem ich biblioteki MakeCode do tworzenia skryptów dla mojego urządzenia. W załączeniu znajdują się odpowiednie pliki szesnastkowe, które możesz skopiować bezpośrednio do swojego micro:bit.

Poniżej znajdziesz odpowiedni kod JavaScript. Testowanie w puli działało dobrze z wcześniejszą wersją skryptu, więc zakładam, że będą działać również. Oprócz podstawowej wersji bargrafowej dostępna jest również wersja z celownikiem (X) i wersja L, które mają ułatwić czytanie, zwłaszcza w warunkach słabego oświetlenia. Wybierz ten, który wolisz.

niech Kolumna = 0

let Meter = 0 let pozostanie = 0 let Row = 0 let Delta = 0 let Ref = 0 let Is = 0 Is = 1012 basic.showLeds(` # # # # # #… # #. #. # #.. # # # # # # `) Ref = 1180 basic.clearScreen() basic.forever(() => { basic.clearScreen() if (input.buttonIsPressed(Button. A)) { Ref = envirobit.getPressure() basic.showLeds(` #. #. #. #. #. # # # # #. #. #. #. #. # `) basic.pause(1000) } else if (Przycisk. Wciśnięty(Przycisk. B)) { basic.showString("" + Wiersz + "." + pozostań + " m") basic.pause(200) basic.clearScreen() } else { Is = envirobit.getPressure() Delta = Is - Ref Meter = Matematyka.abs(Delta) if (metr >= 400) { wiersz = 4 } else if (metr >= 300) { wiersz = 3 } else if (metr >= 200) { wiersz = 2 } else if (metr >= 100) { Wiersz = 1 } else { Wiersz = 0 } pozostaje = Licznik - Wiersz * 100 if (pozostaje >= 80) { Kolumna = 4 } else if (pozostaje >= 60) { Kolumna = 3 } else if (pozostaje >= 40) { Kolumna = 2 } else if (pozostaje >= 20) { Kolumna = 1 } else { Kolumna = 0 } for (niech ColA = 0; ColA <= Kolumna; ColA++) { led.plot(C olA, Wiersz) } basic.pause(500) } })

Krok 7: Wersja Enviro:bit

Enviro: wersja bitowa
Enviro: wersja bitowa
Enviro: wersja bitowa
Enviro: wersja bitowa
Enviro: wersja bitowa
Enviro: wersja bitowa

W międzyczasie otrzymałem enviro:bit (20 GBP) i power:bit (6 GBP), oba od Pimoroni.

Jak wspomniano wcześniej, enviro:bit jest wyposażony w czujnik ciśnienia, wilgotności i temperatury BME280, ale także czujnik światła i koloru (zobacz aplikację tutaj) oraz mikrofon MEMS.

Power:bit to dobre rozwiązanie do zasilania micro:bit i jest wyposażony w przełącznik on/off.

Wspaniałą rzeczą jest to, że oba są po prostu klikane i używane, bez lutowania, kabli, płytek stykowych. Dodaj enviro:bit do micro:bit, załaduj kod do micro:bit, użyj go.

W tym przypadku użyłem micro, power i enviro:bit, umieściłem je w woreczku Ziploc, włożyłem do przezroczystej, wodoszczelnej plastikowej torby na telefony komórkowe i gotowe. Bardzo szybkie i uporządkowane rozwiązanie. Zobacz zdjęcia. Przełącznik jest wystarczająco duży, aby używać go przez warstwy ochronne.

Został przetestowany w wodzie, działał dobrze. Na głębokości ok. 1,8 m zmierzona wartość wyniosła ok. 1,7 m. Nieźle jak na szybkie i tanie rozwiązanie, ale dalekie od ideału. Dostosowanie zajmuje trochę czasu, więc może być konieczne pozostanie na określonej głębokości przez około 10-15 sekund.

Krok 8: Wersja kabla i sondy czujnika

Wersja kabla i sondy czujnika
Wersja kabla i sondy czujnika
Wersja kabla i sondy czujnika
Wersja kabla i sondy czujnika

To był właściwie pierwszy pomysł na miernik głębokości micro:bit, ostatni, który został zbudowany.

Tutaj przylutowałem czujnik BMP280 do 5m kabla 4-żyłowego i na drugim końcu umieściłem zworkę żeńską. Aby chronić czujnik przed wodą, kabel został przepuszczony przez zużyty korek do wina. Końce korka zaklejono gorącym klejem. Wcześniej wyciąłem dwa nacięcia w korku, oba krążyły wokół niego. Następnie spakowałem czujnik do kulki z gąbki, umieściłem wokół niego balonik i przymocowałem koniec balonika do korka (dolne wycięcie). następnie umieściłem 3 40-gramowe kawałki ołowianych ciężarków w drugim balonie, owinąłem go wokół pierwszego z ciężarkami umieszczonymi po zewnętrznej stronie i zamocowałem koniec balonu na drugim wycięciu. Powietrze zostało usunięte z drugiego balonu, a następnie wszystko naprawiono taśmą klejącą. Zobacz zdjęcia, bardziej szczegółowe mogą nastąpić.

Zworki zostały połączone z micro:bit przez złącze krawędziowe, urządzenie zostało włączone i ustawiono ciśnienie odniesienia. Następnie głowica czujnika została powoli wypuszczona na dno basenu (10 m wieża do skakania, około 4,5 m głębokości).

Wyniki:

Ku mojemu zdziwieniu zadziałało nawet z tym długim kablem. Z drugiej strony, choć nie jest to zaskakujące, błąd pomiaru wydawał się zwiększać przy wyższych ciśnieniach, a szacunkowa głębokość 4 m została zgłoszona jako około 3 m.

Potencjalne aplikacje:

Z pewnymi poprawkami błędów urządzenie może służyć do pomiaru głębokości do około 4 m.

W połączeniu z Arduino lub Raspberry Pi, może to służyć do pomiaru i kontrolowania punktu napełnienia basenu lub zbiornika wody, np. aby wywołać ostrzeżenie, jeśli poziom wody przekroczy lub spadnie poniżej określonych progów.

Wyzwanie fitness na świeżym powietrzu
Wyzwanie fitness na świeżym powietrzu
Wyzwanie fitness na świeżym powietrzu
Wyzwanie fitness na świeżym powietrzu

Drugie miejsce w wyzwaniu fitness na świeżym powietrzu

Zalecana: