Cuprins:

Stație meteo portabilă pentru observatorii cerului nocturn: 7 pași (cu imagini)
Stație meteo portabilă pentru observatorii cerului nocturn: 7 pași (cu imagini)

Video: Stație meteo portabilă pentru observatorii cerului nocturn: 7 pași (cu imagini)

Video: Stație meteo portabilă pentru observatorii cerului nocturn: 7 pași (cu imagini)
Video: Обсерватория Эдварда Поповича (Star Digger) под Кагарлыком. 2024, Iulie
Anonim
Stație meteo portabilă pentru observatorii cerului nocturn
Stație meteo portabilă pentru observatorii cerului nocturn

Poluarea luminoasă este una dintre multele probleme din lume. Pentru a rezolva această problemă, trebuie să știm cât de mult este cerul nocturn poluat cu lumină artificială. Mulți studenți cu profesori din lume încearcă să măsoare poluarea luminoasă cu senzori scumpi. Am decis să-mi schimb luxmetrul portabil (pentru mai multe verificări proiectul anterior al instructoarelor Portabil Luxmeter) în stația meteo cu senzor TSL2591. Acest senzor este suficient de sensibil pentru a măsura poluarea pe timp de noapte. De asemenea, adaug HTU21D pentru măsurarea temperaturii și umidității.

Pasul 1: Ce este poluarea nocturnă și cum măsoară

Ce este poluarea nocturnă și cum măsoară
Ce este poluarea nocturnă și cum măsoară

Poluarea nocturnă este lumină de la lămpi, mașini, case, panouri LCD imense din oraș și fiecare lumină făcută de om. Acea lumină numită artificială. Pentru observatori, lumina artificială este principala problemă pentru a vedea stelele din oraș și trebuie să meargă în afara orașului. Pentru om, poluarea luminoasă ridicată este dăunătoare. Și, de asemenea, pentru copaci, iarbă și animale.

Pentru a verifica poluarea luminoasă a locului dvs., puteți vedea aici lightpollutionmap

Este doar model, iar valorile reale pot varia. De aceea am creat luxmetrul.

Pentru măsurarea poluării luminoase, măsoară doar luxul și calculez magnitudinea / arsec2.

Pot calcula de la lux la candela pe suqare metri:

1 cd / m2 = 1 lux

Magnitudinea pe secundă de arc pătrat (mag / arcsec2) descrie fundalul cerului nocturn (denumește strălucirea suprafeței).

Mai multe pe wiki: Luminozitatea suprafeței

Pentru calcularea cd / m2 la mag / arcsec2 este formula:

[valoare în mag / arcsec2] = Log10 ([valoare în cd / m2] / 108000) / - 0,4

unihedron.com/projects/darksky/magconv.php

Pasul 2: BOM

BOM
BOM

Pentru acest proiect aveți nevoie de:

1. WEMOS D1 Mini sau orice microcontroler

(Eu folosesc wemos, pentru că este cel mai mic, cu port USB, puteți încerca Arduino Nano)

WEMOS D1 MINI (Yanwen Economic Air Mail)

WEMOS D1 MINI (livrare standard AliExpress)

WEMOS D1 MINI 10 buc (China Post Registered Air Mail - Expediere gratuită)

cablu USB pentru programarea și încărcarea codului în wemos

2. Senzor TSL2591

TSL2591 (Yanwen Economic Air Mail)

TSL2591 (China Post Registered Air Mail)

TSL2591 (China Post Registered Air Mail)

3. Senzor de temperatură și umiditate HTU21D

HTU21D (Cainiao Super Economy)

HTU21D (Yanwen Economic Air Mail - transport gratuit)

4. Afișaj OLED 0,96 (128 x 64)

Afișaj OLED

Afișaj OLED

Afișaj OLED

5. baterie 18650

18650 baterie litiu-ion

18650 baterie litiu-ion

suport baterie 18650

6. Modul de încărcare TP4056

tp4056

tp4056

7. comutați butoanele sau jumper-ul

cu care picătură roșie

swtichers, foarte diferit

8. cabluri pentru panouri și dupont

panou mic

trusa de panou

9. carcasă, creez din lemn + bandă

birocrație

Imprimantă 3D Prusa, sper să fac carcasă din plastic: D

Pasul 3: Circuit

Circuit
Circuit

Circuitul este destul de simplu:

Conectați toate modulele i2c (TSL2591, OLED, HTU21D) la pinii SCL și SDA de pe wemos (SDA -> D2, SCL -> D1).

Alimentați-le cu 3,3 V de la wemos.

Conectați terminalul plus al bateriei la pinul de 5V pe wemos și bateria + pinul pe modulul de încărcare tp4056 la terminalul plus al bateriei.

Conectați toate terenurile împreună.

Pasul 4: senzor HTU21D

Senzor HTU21D
Senzor HTU21D

Cumpăr senzor de temperatură nou, care măsoară cu precizie 0,3 ° C!

Lucruri pe care ar trebui să le știți despre acest senzor (de la sparkfun):

  • Folosește interfața I2C
  • Precizie tipică a umidității de ± 2%
  • Precizie tipică a temperaturii de ± 0,3 ° C
  • Funcționează de la 0 la 100% umiditate, dar acest senzor nu este recomandat pentru mediile dure în care ar putea intra în contact cu apa (cum ar fi ploaia).
  • Senzor de 3,3 V - utilizați convertoare de nivel logice în linie sau rezistențe de 10 k pentru a limita semnalele de 5 V.
  • Pe magistrala I2C poate locui un singur senzor HTU21D la un moment dat

Rezumatul meu: este un senzor bun, deoarece măsoară cu precizie 0,3 ° C și ambele - temperatura și umiditatea. Pro este interferența I2C și contra 3.3V, dar nu contează în cazul meu.

Pasul 5: TSL2591

TSL2591
TSL2591

Acest senzor este bun pentru măsurarea poluării cerului nocturn datorită sensibilității acestuia (la 188 micro lux!).

1. sunt diode cu posibilă ir și măsură completă. Nu-l folosesc.

2. regulator de tensiune de la 5V la 3,3 V

Specificații pentru cipuri (de la adafruit):

  • Răspunsul aproximativ al ochiului uman
  • Gama dinamică extrem de largă de la 1 la 600, 000, 000 Contează
  • Gama Lux: 188 sensibilitate uLux, până la 88 000 măsurători de intrare Lux.
  • Interval de temperatură: -30 până la 80 * C
  • Gama de tensiune: 3.3-5V în regulatorul de la bord
  • Interfață: I2C
  • Această placă / cip folosește adresa I2C pe 7 biți 0x29 (fix)
  • Dimensiuni: 19mm x 16mm x 1mm /.75 "x.63" x.04 "Greutate: 1.1g
  • 2 diode pentru măsurarea ambelor - IR și spectru complet

Rezumat:

188 uLux este perfect, de asemenea, comunicarea I2C este simplă. Poate că problema poate fi rezolvată la adresa I2C (0x29). De asemenea, regulatorul de la bord este bun și este posibil să utilizați senzorul în timpul iernii (îngheț).

Pasul 6: Cod

Aveți nevoie de aceste biblioteci (le adaug într-un fișier zip):

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

Cod: puteți să-l utilizați pe al meu sau să creați propriul. Nu uitați să setați timpul maxim de integrare (600 MS) și să câștigați la maxim (GAIN_MAX) pentru măsurarea cerului nocturn.

Dacă încercați să utilizați codul meu, vă rugăm să descărcați fișierul ino. Când copiez codul meu instructabil, ceva nu este în regulă cu bibliotecile

Folosesc imaginea de încărcare a lunii doar pentru distracție. Puteți utiliza oricare, pur și simplu utilizați această pagină pentru a obține matricea:

javl.github.io/image2cpp/

//https://lastminuteengineers.com/oled-display-arduino-tutorial///https://javl.github.io/image2cpp/ // mcd la mărime https://unihedron.com/projects/darksky/magconv.php … // HD44780 este un controler pentru afișaje cu cristale lichide (LCD) bazate pe caractere. https://unihedron.com/projects/darksky/magconv.php… #include

#include

#include #include #include "Adafruit_HTU21DF.h" #include "Adafruit_TSL2591.h" int counter; // Afișaj OLED adresă TWI #define OLED_ADDR 0x3C Afișaj Adafruit_SSD1306 (-1); // - 1 pentru restart display cu butonul de restart pe placa arduino Adafruit_HTU21DF htu = Adafruit_HTU21DF (); Adafruit_TSL2591 tsl = Adafruit_TSL2591 (2591); // treceți un număr pentru identificatorul senzorului (pentru utilizarea dvs. ulterior) uint32_t lum; uint16_t ir, plin; int ulux; plutitor lux; float temp; plutitor rel_hum; float mag_arcsec2; // vizuale mags / arcsecond² [valoare în mag / arcsec2] = Log10 ([valoare în cd / m2] / 108000) / - 0,4 // simboluri // grad pentru Celsius const nesemnat grad de caractere 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, 0x0f, 0x 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, 0xff, 0xff, 0xc0, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfd, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xc0, 0x3f, 0xff, 0xff, 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, 0xff, 0xff, 0xff 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, 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, 0xff, 0x00, 0x3f, 0xc0, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 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, 0xff, 0xff, 0xfc, 0x00, 0x3f, 0x80, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x3f, 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, 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, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 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, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc, 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, 0xff, 0xff, 0xff 0xff, 0xff, 0xc0, 0xc4, 0x1f, 0xff, 0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x60, 0x0f, 0xff, 0xff, 0xff, 0xff 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xc0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfx, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x43, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x4f, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff 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, 0x0x,, 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, 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, 0xff, 0xfc, 0x01, 0x0f, 0x3f, 0xff, 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, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff, 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, 0xf00, 0xff 0x7f, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x1f, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 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, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x03, 0x 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, 0xff}; void setup () {// htu21d htu.begin (); // tsl2591 senzor_t senzor; tsl.getSensor (& senzor); tsl.setGain (TSL2591_GAIN_MAX); // MAX, HIGH MED, LOW, tsl.setTiming (TSL2591_INTEGRATIONTIME_600MS); // 100MS, 200 MS, 300MS, 400MS, 500MS, 600MS // configurare pentru afișaj oled display.begin (SSD1306_SWITCHCAPVCC, OLED_ADDR); display.clearDisplay (); display.display (); display.drawBitmap (0, 0, intro, 128, 64, WHITE); display.display (); întârziere (1000); display.setTextSize (1); display.setTextColor (ALB); display.setFont (& FreeSerif9pt7b); display.clearDisplay (); } bucla void () {lux = 0; ulux = 0; mag_arcsec2 = 0; temp = 0; rel_hum = 0; întârziere (100); lum = tsl.getFullLuminosity (); ir = lum >> 16; full = lum & 0xFFFF; întârziere (100); lux = tsl.calculateLux (full, ir); // light intensiti in microlux ulux = lux * 1000000; if (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, ALB); display.clearDisplay (); display.setCursor (1, 15); display.print (temp); display.drawBitmap (42, 2, grade, 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, ALB); 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 ();}

Pasul 7: În interior

Interior
Interior
Interior
Interior

Îmi creez propria carcasă și folosesc panouri cu cabluri dupont, după cum puteți vedea.

Folosesc TP4056 pentru încărcarea bateriei cu cablu USB (am nevoie de jumper).

Pentru pornire / oprire folosesc dip jumper.

Pentru lumina zilei, TSL2591 arată 0, iar mag / arcsec2 este nan.

Pentru cerul nopții TSL2591 ar trebui să prezinte de la 0 la 1000 000 microlux (ulux) și mag / arcsec2 corespunzător

(cca. 14-22 mag / arsec2).

Pentru fullMoon am măsurat 50 k ulux, care este 0,05 lux.

Recomandat: