Innehållsförteckning:

Bärbar väderstation för natthimmelobservatörer: 7 steg (med bilder)
Bärbar väderstation för natthimmelobservatörer: 7 steg (med bilder)

Video: Bärbar väderstation för natthimmelobservatörer: 7 steg (med bilder)

Video: Bärbar väderstation för natthimmelobservatörer: 7 steg (med bilder)
Video: Davis Vantage Pro 2 weather station a windy day #shorts #weather #weatherstation 2024, Juli
Anonim
Bärbar väderstation för observatörer av natthimlen
Bärbar väderstation för observatörer av natthimlen

Ljusföroreningar är ett av många problem i världen. För att lösa det problemet måste vi veta hur mycket natthimlen är förorenat med artificiellt ljus. Många elever med lärare i världen försöker mäta ljusföroreningar med dyra sensorer. Jag bestämde mig för att byta min bärbara luxmeter (för mer kolla tidigare instruerbara projekt Portable Luxmeter) till väderstation med TSL2591 -sensor. Denna sensor är tillräckligt känslig för att mäta nattföroreningar. Jag lägger också till HTU21D för temperatur- och fuktmätning.

Steg 1: Vad är nattförorening och hur det mäter

Vad är nattförorening och hur det mäter
Vad är nattförorening och hur det mäter

Nattföroreningar är ljus från lampor, bilar, hus, stora LCD -paneler i staden och varje ljus som skapats av människor. Det ljusa samtalet konstgjort. För observatörer är artificiellt ljus det största problemet för att se stjärnor från staden, och de måste gå utanför staden. För människa är hög ljusförorening skadligt. Och även för träd, gräs och djur.

För att kontrollera ljusföroreningar på din plats kan du se ljusföroreningskartan här

Det är bara modell och verkliga värden kan variera. Det är därför jag skapade den där luxmetern.

För att mäta ljusföroreningar mäter jag bara lux och beräknar magnitude/ arsec2.

Jag kan beräkna från lux till candela per suqare meter:

1 cd/m2 = 1 lux

Magnitud per kvadratbågsekund (mag/bågsek2) beskriver natthimlens bakgrund (det kallar ytljusstyrka).

Mer på wiki: Ytans ljusstyrka

För att beräkna cd/m2 till mag/arcsec2 är formeln:

[värde i mag/arcsec2] = Log10 ([värde i cd/m2]/108000)/-0,4

unihedron.com/projects/darksky/magconv.php

Steg 2: BOM

BOM
BOM

För detta projekt behöver du:

1. WEMOS D1 Mini eller någon mikrokontroller

(Jag använder wemos, eftersom det är den minsta, med usb -port kan du prova Arduino Nano)

WEMOS D1 MINI (Yanwen Economic Air Mail)

WEMOS D1 MINI (AliExpress Standard Leverans)

WEMOS D1 MINI 10 st (Kina postregistrerat luftpost - gratis leverans)

usb -kabel för programmering och uppladdning av kod till wemos

2. TSL2591 Sensor

TSL2591 (Yanwen Economic Air Mail)

TSL2591 (Kina postregistrerat luftpost)

TSL2591 (Kina postregistrerat luftpost)

3. HTU21D temperatur- och fuktsensor

HTU21D (Cainiao Super Economy)

HTU21D (Yanwen Economic Air Mail - gratis frakt)

4. OLED -skärm 0,96 (128 x 64)

OLED -skärm

OLED -skärm

OLED -skärm

5. 18650 batteri

18650 litiumjonbatteri

18650 litiumjonbatteri

batteri 18650 hållare

6. TP4056 laddningsmodul

tp4056

tp4056

7. växla knappar eller doppbygel

swtich röd dopp

swtichers, många olika

8. brödbräda och dupontkablar

liten brödbräda

kit för brödbräda

9. fall, jag skapar av trä + tejp

röd tejp

Prusa 3D -skrivare, jag hoppas att jag kommer att göra fodral av plast: D

Steg 3: Krets

Krets
Krets

Kretsen är ganska enkel:

Anslut alla i2c -moduler (TSL2591, OLED, HTU21D) till SCL- och SDA -stift på wemos (SDA -> D2, SCL -> D1).

Driv dem med 3,3 V från wemos.

Anslut batteriets plusterminal till 5V -stiftet på wemos och batteriet + stiftet på tp4056 -laddningsmodulen till plusterminalen på batteriet.

Anslut alla grunder tillsammans.

Steg 4: HTU21D -sensor

HTU21D -sensor
HTU21D -sensor

Jag köper en ny temperatursensor, som mäter med noggrannhet 0,3 ° C!

Saker du bör veta om denna sensor (från sparkfun):

  • Använder I2C -gränssnittet
  • Typisk fuktighetsnoggrannhet på ± 2%
  • Typisk temperaturnoggrannhet på ± 0,3 ° C
  • Fungerar från 0 till 100% luftfuktighet men den här sensorn rekommenderas inte för tuffa miljöer där den kan komma i kontakt med vatten (t.ex. regn).
  • 3.3V -sensor - använd inline -logiknivåomvandlare eller 10k -motstånd för att begränsa 5V -signaler
  • Endast en HTU21D -sensor kan ligga på I2C -bussen åt gången

Min sammanfattning: det är en bra sensor, eftersom den mäter med noggrannhet 0,3 ° C och både - temperatur och luftfuktighet. Fördelar är I2C -störningar och nackdelar med 3.3V, men det spelar ingen roll i mitt fall.

Steg 5: TSL2591

TSL2591
TSL2591

Denna sensor är bra för att mäta föroreningar på natthimlen på grund av dess känslighet (till 188 mikro lux!).

1. är dioder med möjlig ir och fullmått. Jag använder den inte.

2. spänningsregulator från 5V till 3,3V

Chipspecifikationer (från adafruit):

  • Närmar sig mänskligt ögonsvar
  • Extremt brett dynamiskt område 1 till 600 000 000 räkningar
  • Lux -intervall: 188 uLux -känslighet, upp till 88 000 Lux -ingångsmätningar.
  • Temperaturområde: -30 till 80 *C
  • Spänningsområde: 3,3-5V in ombordregulator
  • Gränssnitt: I2C
  • Detta kort/chip använder I2C 7-bitars adress 0x29 (fast)
  • Mått: 19 mm x 16 mm x 1 mm /.75 "x.63" x.04 "Vikt: 1,1 g
  • 2 dioder för mätning både - IR och Fullspektrum

Sammanfattning:

188 uLux är perfekt, även I2C -kommunikation är enkel. Kanske kan problemet fixas I2C -adressen (0x29). Ombord regulatorn är också bra och möjlig att använda sensorn under vintern (frost).

Steg 6: Kod

Du behöver dessa bibliotek (jag lägger till dem i en zip -fil):

  • Adafruit-GFX-Library-master
  • adafruit_gfx_library_master
  • Adafruit_HTU21DF_Library-master
  • Adafruit_Sensor-master
  • Adafruit_TSL2591_Library-master

Kod: du kan använda min eller skapa egen. Glöm inte att ställa in maximal integrationstid (600 MS) och förstärkning till max (GAIN_MAX) för natthimelmätning.

Om du försöker använda min kod, ladda ner ino -filen. När jag kopierar från instruerbar min kod, är det något fel med bibliotek

Jag använder laddningsbilden av månen bara för skojs skull. Du kan använda vilken som helst, bara använda den här sidan för att få array:

javl.github.io/image2cpp/

//https://lastminuteengineers.com/oled-display-arduino-tutorial///https://javl.github.io/image2cpp/ // mcd to magnitude https://unihedron.com/projects/darksky/magconv.php… // HD44780 är en styrenhet för teckenbaserade LCD-skärmar. https://unihedron.com/projects/darksky/magconv.php… #include

#omfatta

#include #include #include "Adafruit_HTU21DF.h" #include "Adafruit_TSL2591.h" int counter; // OLED display TWI address #define OLED_ADDR 0x3C Adafruit_SSD1306 display (-1); // - 1 för omstartskärm med omstartsknapp på arduino -kortet Adafruit_HTU21DF htu = Adafruit_HTU21DF (); Adafruit_TSL2591 tsl = Adafruit_TSL2591 (2591); // skicka in ett nummer för sensoridentifieraren (för din användning senare) uint32_t lum; uint16_t ir, full; int ulux; float lux; float temp; flyta rel_hum; float mag_arcsec2; // visuella mags/bågsekund² [värde i mag/arcsec2] = Log10 ([värde i cd/m2]/108000)/-0,4 // symboler // grad för Celsius konstant osignerad teckengrad] PROGMEM = {0xe, 0x11, 0x11, 0x11, 0xe, 0x0, 0x0, 0x0}; // exponent 2 const unsigned char exponent PROGMEM = {0xe, 0x1b, 0x3, 0x6, 0xc, 0x18, 0x1f, 0x0}; // 'moon_logo', 128x64px const unsigned char intro PROGMEM = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xc0, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfd, 0x, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xfc, 0x07, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xf8, 0xff, 0xff, 0x, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xbe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xcc, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xc0, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xc0, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x3f, 0x80, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x3,, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x ff, 0xff, 0xf0, 0x00, 0x3f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xe0, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x60, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe1, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x07, 0xff, 0x, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x18, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x38, 0x 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x48, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x80, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x, 0xff, 0xff, 0xc0, 0xc4, 0x1f, 0xff, 0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x60, 0x0f, 0x, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x, 0xc0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0, 0x43, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x4f, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x5f, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0,, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x01, 0xff, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x03, 0xff, 0xff,, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0x0f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x 00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x1f, 0xff, 0xc7, 0xff, 0xff, 0xff, 0x, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; void setup () {// htu21d htu.begin (); // tsl2591 sensor_t sensor; tsl.getSensor (& sensor); tsl.setGain (TSL2591_GAIN_MAX); // MAX, HIGH MED, LOW, tsl.setTiming (TSL2591_INTEGRATIONTIME_600MS); // 100MS, 200 MS, 300MS, 400MS, 500MS, 600MS // installation för oled display display.begin (SSD1306_SWITCHCAPVCC, OLED_ADDR); display.clearDisplay (); display.display (); display.drawBitmap (0, 0, intro, 128, 64, WHITE); display.display (); fördröjning (1000); display.setTextSize (1); display.setTextColor (VIT); display.setFont (& FreeSerif9pt7b); display.clearDisplay (); } void loop () {lux = 0; ulux = 0; mag_arcsec2 = 0; temp = 0; rel_hum = 0; fördröjning (100); lum = tsl.getFullLuminosity (); ir = lum >> 16; full = lum & 0xFFFF; fördröjning (100); lux = tsl.calculateLux (full, ir); // ljusintensitet i microlux ulux = lux*1000000; om (ulux <0) {ulux = 0; } mag_arcsec2 = log10 (lux/108000)/-0,4; // (log ((ulux/108000)) /(-0.4) temp = htu.readTemperature (); rel_hum = htu.readHumidity (); display_values ();} void display_values () {//display.drawPixel(120, 50, WHITE); display.clearDisplay (); display.setCursor (1, 15); display.print (temp); display.drawBitmap (42, 2, degree, 8, 5, WHITE); display.setCursor (50, 15); display.print ("C"); display.setCursor (70, 15); display.print (rel_hum); display.setCursor (114, 15); display.print ("%"); display.drawLine (1, 20, 127, 20, WHITE); display.drawLine (67, 1, 67, 20, WHITE); display.setCursor (1, 35); display.print ("ulux ="); display.setCursor (50, 35); display.print (ulux); display.setCursor (1, 55); display.print ("mag/arsec"); display.drawBitmap (70, 45, exponent, 8, 8, WHITE); display. setCursor (83, 55); display.print (mag_arcsec2); display.display ();}

Steg 7: Inuti

Inuti
Inuti
Inuti
Inuti

Jag skapar ett eget fodral och jag använder brödbräda med dupontkablar som du kan se.

Jag använder TP4056 för att ladda batteriet med usb -kabel (behöver swtich dip -bygel).

För att slå på/av använder jag dip -bygel.

För dagsljus visar TSL2591 0 och mag/arcsec2 är nan.

För natthimlen ska TSL2591 visa från 0 till 1000 000 microlux (ulux) och motsvarande mag/bågsek2

(cca. 14 till 22 mag/arsec2).

För fullMoon mätte jag 50k ulux vilket är 0,05 lux.

Rekommenderad: