Table des matières:

Station météo portable pour les observateurs du ciel nocturne : 7 étapes (avec photos)
Station météo portable pour les observateurs du ciel nocturne : 7 étapes (avec photos)

Vidéo: Station météo portable pour les observateurs du ciel nocturne : 7 étapes (avec photos)

Vidéo: Station météo portable pour les observateurs du ciel nocturne : 7 étapes (avec photos)
Vidéo: 7 Applications (smartphone) Utiles pour l'ASTRONOMIE 2024, Juillet
Anonim
Station météo portable pour les observateurs du ciel nocturne
Station météo portable pour les observateurs du ciel nocturne

La pollution lumineuse est l'un des nombreux problèmes dans le monde. Pour résoudre ce problème, nous devons savoir à quel point le ciel nocturne est pollué par la lumière artificielle. De nombreux étudiants avec des enseignants dans le monde essaient de mesurer la pollution lumineuse avec des capteurs coûteux. J'ai décidé de changer mon luxmètre portable (pour plus d'informations, consultez le précédent projet d'instructables Portable Luxmeter) en station météo avec capteur TSL2591. Ce capteur est suffisamment sensible pour mesurer la pollution nocturne. Aussi, j'ajoute HTU21D pour la mesure de la température et de l'humidité.

Étape 1: Qu'est-ce que la pollution nocturne et comment la mesurer

Qu'est-ce que la pollution nocturne et comment la mesurer
Qu'est-ce que la pollution nocturne et comment la mesurer

La pollution nocturne est la lumière des lampes, des voitures, des maisons, d'énormes panneaux LCD en ville et chaque lumière faite par l'homme. Cette lumière appelle artificielle. Pour les observateurs, la lumière artificielle est le principal problème pour voir les étoiles depuis la ville, et elles doivent sortir de la ville. Pour l'homme, une pollution lumineuse élevée est nocive. Et aussi pour les arbres, l'herbe et les animaux.

Pour vérifier la pollution lumineuse de votre logement, vous pouvez voir ici lightpollutionmap

Ce n'est qu'un modèle, et les valeurs réelles peuvent varier. C'est pourquoi j'ai créé ce luxmètre.

Pour mesurer la pollution lumineuse, je ne mesure que le lux et calcule la magnitude/arsec2.

Je peux calculer de lux à candela par mètres suqare:

1 cd/m2 = 1 lux

La magnitude par seconde d'arc carré (mag/arcsec2) décrit le fond du ciel nocturne (elle appelle la luminosité de la surface).

Plus sur wiki: Luminosité de la surface

Pour calculer cd/m2 à mag/arcsec2 est la formule:

[valeur en mag/arcsec2] = Log10([valeur en cd/m2]/108000)/-0.4

unihedron.com/projects/darksky/magconv.php

Étape 2: nomenclature

Nomenclature
Nomenclature

Pour ce projet, vous avez besoin de:

1. WEMOS D1 Mini ou tout microcontrôleur

(J'utilise wemos, car c'est le plus petit, avec un port USB, vous pouvez essayer Arduino Nano)

WEMOS D1 MINI (Yanwen Economic Air Mail)

WEMOS D1 MINI (expédition standard d'AliExpress)

WEMOS D1 MINI 10 pièces (courrier aérien recommandé par la poste chinoise - livraison gratuite)

câble usb pour programmer et télécharger le code vers wemos

2. Capteur TSL2591

TSL2591 (courrier aérien économique de Yanwen)

TSL2591 (courrier aérien recommandé par la poste chinoise)

TSL2591 (courrier aérien recommandé par la poste chinoise)

3. Capteur de température et d'humidité HTU21D

HTU21D (Super économie de Cainiao)

HTU21D (Yanwen Economic Air Mail - livraison gratuite)

4. Écran OLED 0,96 (128 x 64)

Écran OLED

Écran OLED

Écran OLED

5. batterie 18650

batterie lithium-ion 18650

batterie lithium-ion 18650

support de batterie 18650

6. Module de charge TP4056

tp4056

tp4056

7. boutons de commutation ou cavalier DIP

trempette rouge

commutateurs, beaucoup de différents

8. planche à pain et câbles dupont

petite planche à pain

kit de planche à pain

9. cas, je crée à partir de bois + ruban adhésif

ruban rouge

Imprimante 3D Prusa, j'espère que je ferai un boîtier en plastique:D

Étape 3: Circuit

Circuit
Circuit

Le circuit est assez simple:

Connectez tous les modules i2c (TSL2591, OLED, HTU21D) aux broches SCL et SDA sur wemos (SDA -> D2, SCL -> D1).

Alimentez-les avec 3,3 V de wemos.

Connectez la borne plus de la batterie à la broche 5V du wemos et la broche + de la batterie sur le module de charge tp4056 à la borne plus de la batterie.

Connectez tous les motifs ensemble.

Étape 4: Capteur HTU21D

Capteur HTU21D
Capteur HTU21D

J'achète un nouveau capteur de température, qui mesure avec une précision de 0,3 °C !

Ce que vous devez savoir sur ce capteur (de Sparkfun):

  • Utilise l'interface I2C
  • Précision d'humidité typique de ±2%
  • Précision de température typique de ±0,3 °C
  • Fonctionne de 0 à 100 % d'humidité, mais ce capteur n'est pas recommandé pour les environnements difficiles où il pourrait entrer en contact avec de l'eau (comme la pluie).
  • Capteur de 3,3 V: utilisez des convertisseurs de niveau logique en ligne ou des résistances de 10 k pour limiter les signaux de 5 V
  • Un seul capteur HTU21D peut résider sur le bus I2C à la fois

Mon résumé: c'est un bon capteur, car il mesure avec précision 0,3 °C et les deux - température et humidité. Les avantages sont les interférences I2C et les inconvénients de 3,3 V, mais cela n'a pas d'importance dans mon cas.

Étape 5: TSL2591

TSL2591
TSL2591

Ce capteur est bon pour mesurer la pollution du ciel nocturne en raison de sa sensibilité (jusqu'à 188 micro lux !).

1. sont des diodes avec ir possible et pleine mesure. Je ne l'utilise pas.

2. régulateur de tension de 5V à 3,3 V

Spécifications des chips (de adafruit):

  • Réponse approximative de l'œil humain
  • Plage dynamique extrêmement large de 1 à 600 000 000 points
  • Gamme de lux: sensibilité de 188 uLux, jusqu'à 88 000 mesures d'entrée de lux.
  • Plage de température: -30 à 80 *C
  • Plage de tension: 3,3 à 5 V dans le régulateur embarqué
  • Interface: I2C
  • Cette carte/puce utilise l'adresse I2C 7 bits 0x29 (fixe)
  • Dimensions: 19 mm x 16 mm x 1 mm / 0,75" x 0,63" x 0,04" Poids: 1,1 g
  • 2 diodes pour mesurer à la fois - IR et spectre complet

Sommaire:

188 uLux est parfait, la communication I2C est également simple. Peut-être que le problème peut être corrigé par l'adresse I2C (0x29). Le régulateur embarqué est également bon et il est possible d'utiliser le capteur pendant l'hiver (gel).

Étape 6: Coder

Vous avez besoin de ces bibliothèques (je les ajoute à un fichier zip):

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

Code: vous pouvez utiliser le mien, ou créer le propre. N'oubliez pas de définir le temps d'intégration maximal (600 MS) et le gain au maximum (GAIN_MAX) pour la mesure du ciel nocturne.

Si vous essayez d'utiliser mon code, veuillez télécharger le fichier ino. Lorsque je copie à partir d'instructable mon code, quelque chose ne va pas avec les bibliothèques

J'utilise le chargement de l'image de la lune juste pour le plaisir. Vous pouvez utiliser n'importe lequel, utilisez simplement cette page pour obtenir un tableau:

javl.github.io/image2cpp/

//https://lastminuteengineers.com/oled-display-arduino-tutorial///https://javl.github.io/image2cpp/ // mcd à l'ampleur https://unihedron.com/projects/darksky/magconv.php… // Le HD44780 est un contrôleur pour les écrans à cristaux liquides (LCD) à base de caractères. https://unihedron.com/projects/darksky/magconv.php… #include

#comprendre

#include #include #include "Adafruit_HTU21DF.h" #include "Adafruit_TSL2591.h" compteur int; // Adresse TWI de l'affichage OLED #define OLED_ADDR 0x3C Adafruit_SSD1306 display(-1); // - 1 pour l'affichage de redémarrage avec le bouton de redémarrage sur la carte arduino Adafruit_HTU21DF htu = Adafruit_HTU21DF(); Adafruit_TSL2591 tsl = Adafruit_TSL2591 (2591); // passez un nombre pour l'identifiant du capteur (pour votre utilisation ultérieure) uint32_t lum; uint16_t ir, plein; int lux; flotteur lux; température flottante; float rel_hum; float mag_arcsec2; // visual mags/arcsecond² [valeur en mag/arcsec2] = Log10([valeur en cd/m2]/108000)/-0.4 // symboles // degré pour Celsius const unsigned char degré PROGMEM = { 0xe, 0x11, 0x11, 0x11, 0xe, 0x0, 0x0, 0x0}; // exposant 2 const exposant de caractère non signé 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, 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, 0 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, 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, 0x 0ffx, 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, 0, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x3f, 0x80, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x 00, 0xf, 0x00, 0xf, 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, 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, 0xc 0xff, 0xff, 0xff, 0xff, 0xe1, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x07, 0xff, 0 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x18, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,ff, 0x38, 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, 0x, 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, 0xc0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0xff, 0ff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe, 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, 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, 0ffx, 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, 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, 80, 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, 0xf0, 0 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, 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0 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, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; void setup() { // htu21d htu.begin(); // tsl2591 sensor_t capteur; tsl.getSensor(&sensor); tsl.setGain(TSL2591_GAIN_MAX); // MAX, HAUT MOYEN, BAS, tsl.setTiming(TSL2591_INTEGRATIONTIME_600MS); // 100MS, 200 MS, 300MS, 400MS, 500MS, 600MS // configuration pour l'affichage oled display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR); display.clearDisplay(); display.display(); display.drawBitmap (0, 0, intro, 128, 64, BLANC); display.display(); retard(1000); display.setTextSize(1); display.setTextColor(BLANC); display.setFont(&FreeSerif9pt7b); display.clearDisplay(); } boucle vide() { lux = 0; lux = 0; mag_arcsec2=0; temp=0; rel_hum=0; retard (100); lum = tsl.getFullLuminosity(); ir = lum >> 16; plein = lum & 0xFFFF; retard (100); lux = tsl.calculateLux(complet, ir); // intensité lumineuse en 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, BLANC); 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, BLANC); 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(); }

Étape 7: À l'intérieur

À l'intérieur
À l'intérieur
À l'intérieur
À l'intérieur

Je crée mon propre boîtier et j'utilise une maquette avec des câbles dupont comme vous pouvez le voir.

J'utilise TP4056 pour charger la batterie avec un câble USB (besoin d'un cavalier à bascule).

Pour allumer/éteindre, j'utilise un cavalier DIP.

Pour la lumière du jour, TSL2591 affiche 0 et mag/arcsec2 est nan.

Pour le ciel nocturne, le TSL2591 doit afficher de 0 à 1000 000 microlux (ulux) et le mag/arcsec2 correspondant

(environ 14 à 22 mag/arsec2).

Pour la pleine lune, j'ai mesuré 50 000 ulux, soit 0,05 lux.

Conseillé: