Sommario:

Stazione meteorologica portatile per osservatori del cielo notturno: 7 passaggi (con immagini)
Stazione meteorologica portatile per osservatori del cielo notturno: 7 passaggi (con immagini)

Video: Stazione meteorologica portatile per osservatori del cielo notturno: 7 passaggi (con immagini)

Video: Stazione meteorologica portatile per osservatori del cielo notturno: 7 passaggi (con immagini)
Video: CHPDB Live! - Osservazione del cielo in diretta! 2024, Luglio
Anonim
Stazione meteorologica portatile per osservatori del cielo notturno
Stazione meteorologica portatile per osservatori del cielo notturno

L'inquinamento luminoso è uno dei tanti problemi del mondo. Per risolvere questo problema, dobbiamo sapere quanto il cielo notturno è inquinato dalla luce artificiale. Molti studenti con insegnanti nel mondo cercano di misurare l'inquinamento luminoso con sensori costosi. Ho deciso di cambiare il mio luxmetro portatile (per ulteriori informazioni sul precedente progetto di istruzioni luxmetro portatile) alla stazione meteorologica con sensore TSL2591. Questo sensore è abbastanza sensibile per misurare l'inquinamento notturno. Inoltre, aggiungo HTU21D per la misurazione della temperatura e dell'umidità.

Passaggio 1: cos'è l'inquinamento notturno e come viene misurato

Che cos'è l'inquinamento notturno e come si misura
Che cos'è l'inquinamento notturno e come si misura

L'inquinamento notturno è la luce di lampade, automobili, case, enormi pannelli lcd in città e ogni luce prodotta dall'uomo. Quella luce chiamata artificiale. Per gli osservatori, la luce artificiale è il problema principale per vedere le stelle dalla città e devono andare fuori città. Per l'uomo, l'inquinamento luminoso elevato è dannoso. E anche per alberi, erba e animali.

Per controllare l'inquinamento luminoso del tuo posto, puoi vedere qui lightpollutionmap

È solo un modello e i valori reali possono variare. Ecco perché ho creato quel luxmetro.

Per misurare l'inquinamento luminoso, misuro solo lux e calcolo magnitudo/arsec2.

Posso calcolare da lux a candela per metri quadrati:

1 cd/m2 = 1 lux

La magnitudo per secondo d'arco quadrato (mag/arcsec2) descrive lo sfondo del cielo notturno (chiama la luminosità della superficie).

Altro su wiki: Luminosità superficiale

Per calcolare cd/m2 in mag/arcsec2 è la formula:

[valore in mag/arcsec2] = Log10([valore in cd/m2]/108000)/-0,4

unihedron.com/projects/darksky/magconv.php

Passaggio 2: Distinta materiali

BOM
BOM

Per questo progetto hai bisogno di:

1. WEMOS D1 Mini o qualsiasi microcontrollore

(Io uso wemos, perché è il più piccolo, con la porta USB, puoi provare Arduino Nano)

WEMOS D1 MINI (Posta aerea economica Yanwen)

WEMOS D1 MINI (Spedizione Standard AliExpress)

WEMOS D1 MINI 10 pezzi (Posta raccomandata della cina - spedizione gratuita)

cavo usb per la programmazione e il caricamento del codice su wemos

2. Sensore TSL2591

TSL2591 (Posta aerea economica Yanwen)

TSL2591 (Posta Aerea Raccomandata Dell'alberino Della Cina)

TSL2591 (Posta Raccomandata Dell'aria Dell'alberino Della Cina)

3. Sensore di temperatura e umidità HTU21D

HTU21D (Cainiao Super Economy)

HTU21D (Posta aerea economica Yanwen - spedizione gratuita)

4. Display OLED 0,96 (128 x 64)

Display OLED

Display OLED

Display OLED

5. Batteria 18650

18650 batteria agli ioni di litio

18650 batteria agli ioni di litio

supporto batteria 18650

6. Modulo di ricarica TP4056

tp4056

tp4056

7. pulsanti di commutazione o dip jumper

swtich tuffo rosso

swtichers, un sacco di diversi

8. breadboard e cavi dupont

piccola tagliere

kit tagliere

9. custodia, creo da legno + nastro adesivo

nastro rosso

Stampante 3D Prusa, spero che farò caso dalla plastica:D

Passaggio 3: circuito

Circuito
Circuito

Il circuito è piuttosto semplice:

Collega tutti i moduli i2c (TSL2591, OLED, HTU21D) ai pin SCL e SDA su wemos (SDA -> D2, SCL -> D1).

Alimentali con 3,3 V di wemos.

Collegare il terminale positivo della batteria al pin 5V su wemos e il pin + batteria sul modulo di ricarica tp4056 al terminale positivo della batteria.

Collega tutti i terreni insieme.

Passaggio 4: sensore HTU21D

Sensore HTU21D
Sensore HTU21D

Compro un nuovo sensore di temperatura, che misura con precisione 0,3 °C!

Cose che dovresti sapere su questo sensore (da sparkfun):

  • Utilizza l'interfaccia I2C
  • Precisione tipica dell'umidità di ±2%
  • Precisione tipica della temperatura di ±0,3 °C
  • Funziona da 0 a 100% di umidità, ma questo sensore non è consigliato per ambienti difficili in cui potrebbe entrare in contatto con l'acqua (come la pioggia).
  • Sensore da 3,3 V: utilizza convertitori di livello logico in linea o resistori da 10 k per limitare i segnali a 5 V
  • Sul bus I2C può risiedere solo un sensore HTU21D alla volta

Il mio riassunto: è un buon sensore, perché misura con precisione 0,3 °C ed entrambi - temperatura e umidità. Pro è l'interferenza I2C e contro 3,3 V, ma non importa nel mio caso.

Passaggio 5: TSL2591

TSL2591
TSL2591

Questo sensore è adatto per misurare l'inquinamento del cielo notturno grazie alla sua sensibilità (fino a 188 micro lux!).

1. sono diodi con possibile ir e misura piena. Non lo uso.

2. regolatore di tensione da 5V a 3,3 V

Specifiche del chip (da adafruit):

  • Approssima la risposta dell'occhio umano
  • Gamma dinamica estremamente ampia da 1 a 600, 000, 000 conteggi
  • Gamma Lux: 188 uLux sensibilità, fino a 88.000 misurazioni Lux in ingresso.
  • Intervallo di temperatura: da -30 a 80 *C
  • Gamma di tensione: 3,3-5 V nel regolatore di bordo
  • Interfaccia: I2C
  • Questa scheda/chip utilizza l'indirizzo I2C a 7 bit 0x29 (fisso)
  • Dimensioni: 19 mm x 16 mm x 1 mm / 0,75 "x 0,63" x 0,04" Peso: 1,1 g
  • 2 diodi per misurare entrambi - IR e spettro completo

Riepilogo:

188 uLux è perfetto, anche la comunicazione I2C è semplice. Forse il problema può essere risolto con l'indirizzo I2C (0x29). Buono anche il regolatore di bordo e possibile utilizzare il sensore durante l'inverno (frost).

Passaggio 6: codice

Hai bisogno di queste librerie (le aggiungo a un file zip):

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

Codice: puoi usare il mio o crearne uno tuo. Non dimenticare di impostare il tempo di integrazione massimo (600 MS) e il guadagno al massimo (GAIN_MAX) per la misurazione del cielo notturno.

Se provi a utilizzare il mio codice, scarica il file ino. Quando copio da istruibile il mio codice, qualcosa non va con le librerie

Uso l'immagine di caricamento della luna solo per divertimento. Puoi usare qualsiasi, basta usare questa pagina per ottenere l'array:

javl.github.io/image2cpp/

//https://lastminuteengineers.com/oled-display-arduino-tutorial///https://javl.github.io/image2cpp/ // da mcd a grandezza https://unihedron.com/projects/darksky/magconv.php… // L'HD44780 è un controller per display a cristalli liquidi (LCD) basati su caratteri. https://unihedron.com/projects/darksky/magconv.php… #include

#includere

#include #include #include "Adafruit_HTU21DF.h" #include "Adafruit_TSL2591.h" int counter; // Display OLED indirizzo TWI #define OLED_ADDR 0x3C Adafruit_SSD1306 display(-1); // - 1 per la visualizzazione del riavvio con il pulsante di riavvio sulla scheda arduino Adafruit_HTU21DF htu = Adafruit_HTU21DF(); Adafruit_TSL2591 tsl = Adafruit_TSL2591(2591); // passa un numero per l'identificatore del sensore (per l'uso successivo) uint32_t lum; uint16_t ir, pieno; int ulux; lux galleggiante; temperatura di galleggiamento; galleggiante rel_hum; float mag_arcsec2; // visual mags/arcsecond² [value in mag/arcsec2] = Log10([value in cd/m2]/108000)/-0.4 // simboli // gradi per Celsius const unsigned char degree PROGMEM = { 0xe, 0x11, 0x11, 0x11, 0xe, 0x0, 0x0, 0x0 }; // esponente 2 const unsigned char esponente 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, 0ff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x 0xff, 0xff, 0xff, 0xc0, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfd, 0xff, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x 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, 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,, 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, 0xfe, 0xc0, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x3f, 0x80, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x,00, 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, 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, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x 0xe0, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x60, 0xff, 0xff, 0xff, 0xff, 0xef, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x 0xff, 0xff, 0xff, 0xff, 0xe1, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x18, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x38, 0 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, 0xc0, 0xc4, 0x1f, 0xff, 0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x60, 0x0f, 0xff, 0 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 0xc0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0, 0 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x 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, 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, 0x03,, 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, 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,, 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, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x, 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, 0xff, 0xff, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x 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, 0x 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x 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, 0x, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; void setup() { // htu21d htu.begin(); // tsl2591 sensore_t sensore; tsl.getSensor(&sensore); tsl.setGain(TSL2591_GAIN_MAX); // MAX, MEDIO ALTO, BASSO, tsl.setTiming(TSL2591_INTEGRATIONTIME_600MS); // 100MS, 200 MS, 300MS, 400MS, 500MS, 600MS // configurazione per display oled display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR); display.clearDisplay(); display.display(); display.drawBitmap(0, 0, intro, 128, 64, WHITE); display.display(); ritardo(1000); display.setTextSize(1); display.setTextColor(BIANCO); display.setFont(&FreeSerif9pt7b); display.clearDisplay(); } ciclo vuoto() { lux = 0; lux =0; mag_arcsec2=0; temperatura=0; rel_hum=0; ritardo(100); lum = tsl.getFullLuminosità(); ir = lum >> 16; pieno = lum & 0xFFFF; ritardo(100); lux = tsl.calculateLux(full, ir); // intensità luminosa 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, 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, esponente, 8, 8, WHITE); display. setCursor(83, 55); display.print(mag_arcsec2); display.display(); }

Passaggio 7: dentro

Dentro
Dentro
Dentro
Dentro

Creo il mio caso e uso breadboard con cavi dupont come puoi vedere.

Io uso TP4056 per caricare la batteria con cavo USB (ho bisogno di un ponticello swtich dip).

Per accendere/spegnere uso il dip jumper.

Per la luce del giorno, TSL2591 mostra 0 e mag/arcsec2 è nan.

Per il cielo notturno dovrebbe TSL2591 mostrare da 0 a 1000 000 microlux (ulux) e corrispondente mag/arcsec2

(cca. da 14 a 22 mag/arsec2).

Per FullMoon ho misurato 50k ulux che è 0,05 lux.

Consigliato: