Obsah:

Změřte tlak pomocí mikro: bit: 5 kroků (s obrázky)
Změřte tlak pomocí mikro: bit: 5 kroků (s obrázky)

Video: Změřte tlak pomocí mikro: bit: 5 kroků (s obrázky)

Video: Změřte tlak pomocí mikro: bit: 5 kroků (s obrázky)
Video: Как проверить генератор. За 3 минуты, БЕЗ ПРИБОРОВ и умений. 2024, Červenec
Anonim
Změřte tlak pomocí svého mikro: bitu
Změřte tlak pomocí svého mikro: bitu
Změřte tlak pomocí svého mikro: bitu
Změřte tlak pomocí svého mikro: bitu

Následující instrukce popisuje snadno sestavitelné a levné zařízení pro provádění měření tlaku a demonstraci Boyleova zákona pomocí mikro: bitu v kombinaci se snímačem tlaku/teploty BMP280.

Zatímco tato kombinace stříkačky/tlakového senzoru již byla popsána v jednom z mých předchozích instrukcí, kombinace s micro: bitem nabízí nové příležitosti, např. pro projekty třídních pokojů.

Kromě toho je počet popisů aplikací, ve kterých je mikro: bit používán v kombinaci se snímačem poháněným I2C, zatím poměrně omezený. Doufám, že tento instruktáž může být výchozím bodem pro další projekty.

Zařízení umožňuje provádět kvantitativní měření tlaku vzduchu a zobrazovat výsledky na mikro: bitovém LED poli nebo na připojeném počítači, pro pozdější použití funkcí sériového monitoru nebo sériového plotru Arduino IDE. Kromě toho máte hmatovou zpětnou vazbu, protože sami budete tlačit nebo tahat píst stříkačky, a tím pocítíte potřebnou sílu.

Ve výchozím nastavení vám displej umožňuje odhadnout tlak pomocí indikátoru hladiny zobrazeného na matici LED. Sériový plotter Arduino IDE umožňuje to samé, ale s mnohem lepším rozlišením (viz video). K dispozici jsou také propracovanější řešení, např. v jazyce zpracování. Přesné naměřené hodnoty tlaku a teploty můžete také zobrazit na matici LED po stisknutí tlačítek A nebo B, ale sériový monitor Arduino IDE je mnohem rychlejší, což umožňuje zobrazení hodnot téměř v reálném čase.

Celkové náklady a technické dovednosti potřebné k výrobě zařízení jsou poměrně nízké, takže by to mohl být pěkný projekt ve třídě pod dohledem učitele. Kromě toho by zařízení mohlo být nástrojem pro projekty STEM se zaměřením na fyziku nebo by mohlo být použito v jiných projektech, kde se síla nebo hmotnost přemění na digitální hodnotu.

Princip byl použit ke konstrukci velmi jednoduchého mikro: bitového ponorového měřiče, zařízení pro měření hloubky potápění.

Dodatek 27. května 2018:

Protože společnost Pimoroni vyvinula knihovnu MakeCode pro snímač BMP280, poskytla mi to příležitost vyvinout skript, který bude použit pro zde popsané zařízení. Skript a odpovídající soubor HEX najdete v posledním kroku tohoto pokynu. Chcete -li jej použít, stačí načíst soubor HEX do vašeho mikro: bitu. Není potřeba speciální software a pro úpravu skriptu můžete použít online editor MakeCode.

Krok 1: Použitý materiál

Použité materiály
Použité materiály
Použité materiály
Použité materiály
Použité materiály
Použité materiály
Použité materiály
Použité materiály
  • Micro: bit, dostal můj od Pimoroni - 13,50 GBP
  • Kitronic Edge Connector pro micro: bit - přes Pimoroni - 5 GBP, Poznámka: Pimorini nyní nabízí hranatý konektor vhodný pro prkénko s názvem pin: bit s piny na I2C portech.
  • 2 x 2 pinové lišty záhlaví
  • Baterie nebo LiPo pro micro: bit (není nutné, ale užitečné), kabel baterie s přepínačem (dito) - Pimoroni
  • propojovací kabely pro připojení senzorů ke konektoru Edge
  • dlouhé (!) propojovací kabely pro senzor, alespoň tak dlouhé jako stříkačka, f/f nebo f/m
  • Snímač tlaku a teploty BMP280 - Banggood - 5 US $ za tři jednotky Rozsah měření tohoto snímače je mezi 550 a 1537 hPa.
  • 150 ml plastová katétrová stříkačka s gumovým těsněním - Amazon nebo železářství a zahradnictví - asi 2 - 3 US $
  • horké lepidlo/horké lepidlo pistole
  • páječka
  • počítač s nainstalovaným Arduino IDE

Krok 2: Pokyny k montáži

Montážní návod
Montážní návod
Montážní návod
Montážní návod
Montážní návod
Montážní návod

Pájecí záhlaví k přerušení snímače BMP280.

Připájejte dva 2kolíkové konektory ke konektorům pin 19 a pin 20 konektoru Edge (viz obrázek).

Připojte micro: bit ke konektoru Edge a počítači.

Připravte software a micro: bit, jak je popsáno v instrukcích Adafruit micro: bit. Přečtěte si je pořádně.

Nainstalujte požadované knihovny do Arduino IDE.

Otevřete skript BMP280 připojený v pozdějším kroku.

Připojte senzor ke konektoru Edge. GND až 0V, VCC až 3V, SCL na pin 19, SDA na pin 20.

Nahrajte skript na micro: bit.

Zkontrolujte, zda senzor poskytuje rozumná data, hodnoty tlaku by měly být kolem 1020 hPa, zobrazené na sériovém monitoru. V případě nejprve zkontrolujte kabely a připojení, poté instalaci softwaru a proveďte opravu.

Vypněte micro: bit, vyjměte snímač.

Protáhněte dlouhé propojovací kabely výstupem stříkačky. V případě, že budete muset rozšířit otvor. Dávejte pozor, abyste vynechali poškození kabelů.

Připojte snímač k propojovacím kabelům. Zkontrolujte, zda jsou připojení správná a dobrá. Připojte se k mikro: bit.

Zkontrolujte, zda snímač funguje správně. Opatrně zatáhněte za kabely a přesuňte senzor na horní část stříkačky.

Vložte píst a posuňte jej o kousek dále, než je požadovaná klidová poloha (100 ml).

Na konec výstupu stříkačky přidejte horké lepidlo a posuňte píst o kousek zpět. Zkontrolujte, zda je stříkačka vzduchotěsně uzavřena, jinak přidejte více horkého lepidla. Horké lepidlo necháme vychladnout.

Znovu zkontrolujte, zda senzor funguje. Pokud pohnete pístem, měla by se změnit čísla na sériovém monitoru a na displeji micro: bit.

V případě potřeby můžete upravit hlasitost ve stříkačce tak, že ji stisknete poblíž těsnění a pohnete pístem.

Krok 3: Trocha teorie a některá praktická měření

Trochu teorie a některá praktická měření
Trochu teorie a některá praktická měření
Trochu teorie a některá praktická měření
Trochu teorie a některá praktická měření

Pomocí zde popsaného zařízení můžete demonstrovat korelaci komprese a tlaku v jednoduchých fyzikálních experimentech. Jelikož je injekční stříkačka opatřena stupnicí „ml“, lze snadno provádět i kvantitativní experimenty.

Teorie za tím: Podle Boyleova zákona je [Objem * Tlak] konstantní hodnota plynu při dané teplotě.

To znamená, že pokud stlačíte daný objem plynu N-násobně, tj. Konečný objem je 1/N násobek originálu, jeho tlak stoupne N-násobně, jako: P0*V0 = P1*V1 = nevýhoda. Chcete -li získat další podrobnosti, podívejte se na článek Wikipedie o plynových zákonech. Na hladině moře se barometrický tlak obvykle pohybuje v rozmezí 1010 hPa (hekto Pascal).

Takže počínaje v klidových bodech např. V0 = 100 ml a P0 = 1000 hPa, stlačení vzduchu na přibližně 66 ml (tj. V1 = 2/3 * V0) bude mít za následek tlak přibližně 1500 hPa (P1 = 3/2 P0). Vytáhnutím pístu na 125 ml (5/4násobný objem) dojde k tlaku přibližně 800 hPa (4/5 tlaku). Měření jsou na tak jednoduché zařízení úžasně přesná.

Zařízení vám umožňuje přímo hmatově vyvolat dojem, jakou sílu je zapotřebí ke stlačení nebo roztažení relativně malého množství vzduchu ve stříkačce.

Můžeme však také provést některé výpočty a experimentálně je zkontrolovat. Předpokládejme, že stlačíme vzduch na 1500 hPa, při bazálním barometrickém tlaku 1000 hPa. Rozdíl tlaku je tedy 500 hPa nebo 50 000 Pa. U mé stříkačky je průměr (d) pístu asi 4 cm nebo 0,04 metru.

Nyní můžete vypočítat sílu potřebnou k udržení pístu v této poloze. Je dáno P = F/A (tlak je síla děleno plochou) nebo transformováno F = P*A. Jednotka SI pro sílu je „Newton“N, pro délku „metr“m a 1 Pa je 1 N na metr čtvereční. U kulatého pístu lze plochu vypočítat pomocí A = ((d/2)^2)*pi, což pro moji stříkačku dává 0,00125 metrů čtverečních. Tak

50 000 Pa * 0,00125 m^2 = 63 N.

Na Zemi 1 N koreluje s hmotností 100 gr, takže 63 N se rovná držení hmotnosti 6,3 kg.

To lze snadno zkontrolovat pomocí váhy. Zatlačte stříkačku s pístem na váhu, dokud není dosažen tlak přibližně 1500 hPa, poté odečtěte stupnici. Nebo zatlačte, dokud váha neukáže asi 6–7 kg, poté stiskněte tlačítko „A“a odečtěte hodnotu zobrazenou na matici LED mikro: bitů. Jak se ukázalo, odhad založený na výše uvedených výpočtech nebyl špatný. Tlak mírně nad 1500 hPa koreloval se zobrazenou „hmotností“asi 7 kg na tělesné stupnici (viz obrázky). Tento koncept můžete také obrátit a použít zařízení k vytvoření jednoduché digitální stupnice založené na měření tlaku.

Uvědomte si prosím, že horní hranice senzoru je asi 1540 hPa, takže jakýkoli tlak nad tento tlak nelze změřit a může senzor poškodit.

Kromě vzdělávacích účelů lze systém také použít pro některé aplikace v reálném světě, protože umožňuje kvantitativně měřit síly, které se pokoušejí pohybovat pístem tak či onak. Můžete tedy změřit závaží umístěné na pístu nebo sílu nárazu na píst. Nebo vytvořte spínač, který aktivuje světlo nebo bzučák nebo přehraje zvuk po dosažení určité prahové hodnoty. Nebo můžete postavit hudební nástroj, který mění frekvenci v závislosti na síle síly působící na píst. Nebo ji použijte jako herní ovladač. Použijte svou představivost a hrajte!

Krok 4: Skript MicroPython

V příloze najdete můj skript BMP280 pro micro: bit. Je to derivát skriptu BMP/BME280, který jsem našel někde na webu Banggood, v kombinaci s knihovnou Adrobruit's Microbit. První umožňuje použití senzoru Banggood, druhý zjednodušuje ovládání LED displeje 5x5. Moje poděkování patří vývojářům obou.

Ve výchozím nastavení skript zobrazuje výsledky měření tlaku v 5 krocích na LED displeji micro: bit 5x5, což umožňuje vidět změny s malým zpožděním. Přesné hodnoty lze zobrazit paralelně na sériovém monitoru Arduino IDE, nebo lze zobrazit podrobnější graf na sériovém plotru Arduino IDE.

Pokud stisknete tlačítko A, naměřené hodnoty tlaku se zobrazí na poli LED 5x5 mikro: bitů. Pokud stisknete tlačítko B, zobrazí se hodnoty teploty. I když to umožňuje číst přesná data, výrazně to zpomaluje měřicí cykly.

Jsem si jist, že existují mnohem elegantnější způsoby programování úkolů a vylepšení skriptu. Jakákoli pomoc je vítána.

#include xxx

#include Adafruit_Microbit_Matrix microbit; #define BME280_ADDRESS 0x76 unsigned long int hum_raw, temp_raw, pres_raw; podepsaný dlouhý 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; // kontejnery pro naměřené hodnoty int value0; int hodnota1; int hodnota2; int hodnota3; int hodnota4; // ------------------------------------------------ ---------------------------------------------------------- ------------------ neplatné nastavení () {uint8_t osrs_t = 1; // Převzorkování teploty x 1 uint8_t osrs_p = 1; // Převzorkování tlaku x 1 uint8_t osrs_h = 1; // Převzorkování vlhkosti x 1 režim uint8_t = 3; // Normální režim uint8_t t_sb = 5; // Standby 1000ms uint8_t filtr = 0; // Odfiltrujte uint8_t spi3w_en = 0; // 3vodičové SPI Zakázat uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | režim; uint8_t config_reg = (t_sb << 5) | (filtr << 2) | spi3w_en; uint8_t ctrl_hum_reg = osrs_h; pinMode (PIN_BUTTON_A, INPUT); pinMode (PIN_BUTTON_B, INPUT); Serial.begin (9600); // Serial.println ("Teplota [° C]"); // Serial.print ("\ t"); Serial.print ("Tlak [hPa]"); // záhlaví Wire.begin (); writeReg (0xF2, ctrl_hum_reg); writeReg (0xF4, ctrl_meas_reg); writeReg (0xF5, config_reg); readTrim (); // microbit.begin (); // microbit.print ("x"); zpoždění (1000); } // ----------------------------------------------- ---------------------------------------------------------- -------- void loop () {double temp_act = 0,0, press_act = 0,0, hum_act = 0,0; podepsaný dlouhý int temp_cal; nepodepsané dlouhé int press_cal, hum_cal; int N; // nastavení prahových hodnot pro LED maticový displej, v hPa dvojnásobek max_0 = 1100; dvojnásobek max_1 = 1230; dvojnásobek max_2 = 1360; dvojnásobek max_3 = 1490; readData (); temp_cal = calibration_T (temp_raw); press_cal = calibration_P (pres_raw); hum_cal = calibration_H (hum_raw); temp_act = (dvojnásobek) temp_cal / 100,0; press_act = (double) press_cal / 100.0; hum_act = (dvojnásobek) hum_cal / 1024,0; microbit.clear (); // reset LED matrix /* Serial.print ("PRESS:"); Serial.println (press_act); Serial.print ("hPa"); Serial.print ("TEMP:"); Serial.print ("\ t"); Serial.println (temp_act); */ if (! digitalRead (PIN_BUTTON_B)) {// zobrazování hodnot v číslech zpožďuje měření kruhů microbit.print ("T:"); microbit.print (temp_act, 1); microbit.print ("'C"); // Serial.println (""); } else if (! digitalRead (PIN_BUTTON_A)) {microbit.print ("P:"); microbit.print (press_act, 0); microbit.print ("hPa"); } else {// zobrazení hodnot tlaku jako pixelů nebo čar na určité úrovni // 5 kroků: 1490 hPa // prahové hodnoty definované hodnotami max_n if (press_act> max_3) {(N = 0); // horní řádek} else if (press_act> max_2) {(N = 1); } else if (press_act> max_1) {(N = 2); } else if (press_act> max_0) {(N = 3); } else {(N = 4); // základní řádek} // Serial.println (N); // pro účely vývoje // microbit.print (N); // jako Line // microbit.drawLine (N, 0, 0, 4, LED_ON); // posunutí hodnot na další řádek value4 = value3; hodnota3 = hodnota2; hodnota2 = hodnota1; hodnota1 = hodnota0; hodnota0 = N; // nakreslení obrázku, sloupec po sloupci microbit.drawPixel (0, hodnota0, LED_ON); // jako Pixel: sloupec, řádek. 0, 0 levý horní rohový mikrobit.drawPixel (1, hodnota1, LED_ON); microbit.drawPixel (2, hodnota2, LED_ON); microbit.drawPixel (3, hodnota3, LED_ON); microbit.drawPixel (4, value4, LED_ON); } // odeslání dat na sériový monitor a sériový plotter // Serial.println (press_act); // odeslání hodnot na sériový port pro numerické zobrazení, volitelně

Serial.print (press_act); // odeslání hodnoty na sériový port plotru

// nakreslete indikační čáry a opravte zobrazený rozsah Serial.print ("\ t"); Serial.print (600); Serial.print ("\ t"); Serial.print (1100), Serial.print ("\ t"); Serial.println (1600); zpoždění (200); // Měření třikrát za sekundu} // ---------------------------------------- ---------------------------------------------------------- ---------------------------------------------------------- - // pro snímač bmp/bme280 je vyžadováno následující, ponechat jako neplatné readTrim () {uint8_t data [32], i = 0; // Oprava 2014/Wire.beginTransmission (BME280_ADDRESS); Wire.write (0x88); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 24); // Oprava 2014/while (Wire.available ()) {data = Wire.read (); i ++; } Wire.beginTransmission (BME280_ADDRESS); // Přidat 2014/Wire.write (0xA1); // Přidat 2014/Wire.endTransmission (); // Přidat 2014/Wire.requestFrom (BME280_ADDRESS, 1); // Přidat 2014/data = Wire.read (); // Přidat 2014/i ++; // Přidat 2014/Wire.beginTransmission (BME280_ADDRESS); Wire.write (0xE1); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 7); // Oprava 2014/while (Wire.available ()) {data = Wire.read (); i ++; } dig_T1 = (data [1] << 8) | data [0]; dig_P1 = (data [7] << 8) | data [6]; dig_P2 = (data [9] << 8) | data [8]; dig_P3 = (data [11] << 8) | data [10]; dig_P4 = (data [13] << 8) | data [12]; dig_P5 = (data [15] << 8) | data [14]; dig_P6 = (data [17] << 8) | data [16]; dig_P7 = (data [19] << 8) | data [18]; dig_T2 = (data [3] << 8) | data [2]; dig_T3 = (data [5] << 8) | data [4]; dig_P8 = (data [21] << 8) | data [20]; dig_P9 = (data [23] << 8) | data [22]; dig_H1 = data [24]; dig_H2 = (data [26] << 8) | data [25]; dig_H3 = data [27]; dig_H4 = (data [28] << 4) | (0x0F & data [29]); dig_H5 = (data [30] 4) & 0x0F); // Oprava 2014/dig_H6 = data [31]; // Oprava 2014/} void writeReg (uint8_t reg_address, uint8_t data) {Wire.beginTransmission (BME280_ADDRESS); Wire.write (reg_address); Wire.write (data); Wire.endTransmission (); }

void readData ()

{int i = 0; uint32_t data [8]; Wire.beginTransmission (BME280_ADDRESS); Wire.write (0xF7); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 8); while (Wire.available ()) {data = Wire.read (); i ++; } pres_raw = (data [0] << 12) | (data [1] 4); temp_raw = (data [3] << 12) | (data [4] 4); hum_raw = (data [6] << 8) | data [7]; }

podepsaná dlouhá int kalibrace_T (podepsaná dlouhá int adc_T)

{signed long int var1, var2, T; var1 = (((((adc_T >> 3) - ((podepsaný dlouhý int) dig_T1 11; var2 = ((((((adc_T >> 4) - ((podepsaný dlouhý int) dig_T1))) * ((adc_T >> 4) - ((podepsaný dlouhý int) dig_T1))) >> 12) * ((podepsaný dlouhý int) dig_T3)) >> 14; t_fine = var1 + var2; T = (t_fine * 5 + 128) >> 8; návrat T;} unsigned long int calibration_P (signed long int adc_P) {signed long int var1, var2; unsigned long int P; var1 = (((signed long int) t_fine) >> 1) - (signed long int) 64000; var2 = (((var1 >> 2) * (var1 >> 2)) >> 11) * ((podepsaný dlouhý int) dig_P6); var2 = var2 + ((var1 * ((podepsaný dlouhý int) dig_P5)) 2) + (((podepsaný dlouhý int) dig_P4) 2) * (var1 >> 2)) >> 13)) >> 3) + ((((podepsaný dlouhý int) dig_P2) * var1) >> 1)) >> 18; var1 = ((((((32768+var1)))*((podepsaný dlouhý int) dig_P1)) >> 15); if (var1 == 0) {return 0; } P = (((nepodepsaný dlouhý int) ((((podepsaný dlouhý int) 1048576) -adc_P)-(var2 >> 12)))*3125; if (P <0x80000000) {P = (P << 1) / ((unsigned long int) var1); } else {P = (P / (unsigned long int) var1) * 2; } var1 = (((podepsaný dlouhý int) dig_P9) * ((podepsaný dlouhý int) (((P >> 3) * (P >> 3)) >> 13))) >> 12; var2 = (((podepsaný dlouhý int) (P >> 2)) * ((podepsaný dlouhý int) dig_P8)) >> 13; P = (nepodepsaný dlouhý int) ((podepsaný dlouhý int) P + ((var1 + var2 + dig_P7) >> 4)); návrat P; } unsigned long int calibration_H (signed long int adc_H) {signed long int v_x1; v_x1 = (t_fine - ((podepsaný dlouhý int) 76800)); v_x1 = ((((((adc_H << 14) -(((podepsaný dlouhý int) dig_H4) 15) * (((((((v_x1 * ((podepsaný dlouhý int) dig_H6)) >> 10) * (((v_x1 * ((podepsaný dlouhý int) dig_H3)) >> 11) + ((podepsaný dlouhý int) 32768))) >> 10) + ((podepsaný dlouhý int) 2097152)) * ((podepsaný dlouhý int) dig_H2) + 8192) >> 14)); v_x1 = (v_x1 - (((((((v_x1 >> 15) * (v_x1 >> 15)) >> 7) * ((podepsaný dlouhý int) dig_H1))); v_x1 = (v_x1 419430400? 419430400: v_x1); return (unsigned long int) (v_x1 >> 12);}

Krok 5: MakeCode/JavaScript skripty

Skripty MakeCode/JavaScript
Skripty MakeCode/JavaScript

Společnost Pimoroni nedávno vydala enviro: bit, který je dodáván se snímačem tlaku BMP280, snímačem světla/barev a mikrofonem MEMS. Nabízejí také knihovnu MicroPython a knihovnu MakeCode/JavaScript.

Později jsem použil skript MakeCode pro snímač tlaku. Odpovídající hexadecimální soubor lze zkopírovat přímo do vašeho mikro: bitu. Kód je zobrazen níže a lze jej upravit pomocí online editoru MakeCode.

Jedná se o variantu skriptu pro mikro: bitový ponorový měřič. Ve výchozím nastavení zobrazuje rozdíl tlaku jako sloupcový graf. Stisknutím tlačítka A nastavíte referenční tlak, stisknutím tlačítka B zobrazíte rozdíl mezi skutečným a referenčním tlakem v hPa.

Kromě základní verze čárového kódu najdete také verzi „X“, nitkový kříž a verzi „L“, která má usnadnit čtení.

ať Sloupec = 0

nechat zůstat = 0 nechat řádek = 0 nechat metr = 0 nechat Delta = 0 nechat Ref = 0 nechat 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.showString ("" + Delta + "hPa") basic.pause (200) basic.clearScreen ()} else {Is = envirobit.getPressure () Delta = Is - Ref Meter = Math.abs (Delta) if (Meter> = 400) {Row = 4} else if (Meter> = 300) {Row = 3} else if (Meter> = 200) {Row = 2} else if (Meter> = 100) {Row = 1} else {Row = 0} remain = Meter - Row * 100 if (remain> = 80) {Column = 4} else if (remain> = 60) {Column = 3} else if (remain> = 40) {Column = 2 } else if (remain> = 20) {Column = 1} else {Column = 0} for (let ColA = 0; ColA <= Column; ColA ++) {led.plot (ColA, Row)} basic.pause (500)}})

Doporučuje: