Оглавление:

Портативная метеостанция для наблюдателей за ночным небом: 7 шагов (с изображениями)
Портативная метеостанция для наблюдателей за ночным небом: 7 шагов (с изображениями)

Видео: Портативная метеостанция для наблюдателей за ночным небом: 7 шагов (с изображениями)

Видео: Портативная метеостанция для наблюдателей за ночным небом: 7 шагов (с изображениями)
Видео: Тайные артефакты Аненербе. Они опередили время. Секретные технологии И тайны третьего рейха. 2024, Июль
Anonim
Портативная метеостанция для наблюдателей за ночным небом
Портативная метеостанция для наблюдателей за ночным небом

Световое загрязнение - одна из многих проблем в мире. Чтобы решить эту проблему, нам нужно знать, насколько ночное небо загрязнено искусственным светом. Многие студенты с учителями в мире пытаются измерить световое загрязнение с помощью дорогих датчиков. Я решил заменить свой портативный люксметр (подробнее см. Предыдущий проект «Портативный люксметр») на метеостанцию с датчиком TSL2591. Этот датчик достаточно чувствителен для измерения ночного загрязнения. Также я добавляю HTU21D для измерения температуры и влажности.

Шаг 1. Что такое ночное загрязнение и как его измерять

Что такое ночное загрязнение и как его измерять
Что такое ночное загрязнение и как его измерять

Ночное загрязнение - это свет от ламп, автомобилей, домов, огромных ЖК-панелей в городе и всех источников света, созданных человеком. Этот свет называют искусственным. Для наблюдателей искусственное освещение - главная проблема, чтобы увидеть звезды из города, и они должны выходить за город. Для человека вредно высокое световое загрязнение. А также для деревьев, травы и животных.

Чтобы проверить световое загрязнение вашего дома, вы можете посмотреть здесь карту светового загрязнения.

Это всего лишь модель, и реальные значения могут отличаться. Вот почему я создал этот люксметр.

Для измерения светового загрязнения я измеряю только люкс и рассчитываю величину / арсек2.

Я могу рассчитать от люкс до кандел на квадратный метр:

1 кд / м2 = 1 люкс

Величина на квадратную угловую секунду (mag / arcsec2) описывает фон ночного неба (это называется поверхностной яркостью).

Подробнее о вики: Яркость поверхности

Для расчета кд / м2 в mag / arcsec2 используется формула:

[значение в mag / arcsec2] = Log10 ([значение в кд / м2] / 108000) / - 0,4

unihedron.com/projects/darksky/magconv.php

Шаг 2: спецификация

Спецификация
Спецификация

Для этого проекта вам понадобятся:

1. WEMOS D1 Mini или любой микроконтроллер

(Я использую wemos, потому что он самый маленький, с USB-портом вы можете попробовать Arduino Nano)

WEMOS D1 MINI (Yanwen Economic Air Mail)

WEMOS D1 MINI (Стандартная доставка AliExpress)

WEMOS D1 MINI 10 шт. (Заказная Авиапочта Китая - бесплатная доставка)

USB-кабель для программирования и загрузки кода в Wemos

2. Датчик TSL2591

TSL2591 (Yanwen Economic Air Mail)

TSL2591 (Заказная Авиапочта Китая)

TSL2591 (Заказная Авиапочта Китая)

3. Датчик температуры и влажности HTU21D

HTU21D (Cainiao Super Economy)

HTU21D (Yanwen Economic Air Mail - бесплатная доставка)

4. OLED-дисплей 0,96 (128 x 64)

OLED-дисплей

OLED-дисплей

OLED-дисплей

5. Аккумулятор 18650

Литий-ионный аккумулятор 18650

Литий-ионный аккумулятор 18650

аккумулятор 18650 держатель

6. Зарядный модуль TP4056.

tp4056

tp4056

7. кнопки переключателя или перемычка.

swtich красный дип

swtichers, много разных

8. макетные и dupont кабели.

небольшой макет

макетная плата

9. футляр, создаю из дерева + скотч

Красная лента

Принтер Prusa 3D, надеюсь сделаю корпус из пластика: D

Шаг 3: Схема

Схема
Схема

Схема довольно простая:

Подключите все модули i2c (TSL2591, OLED, HTU21D) к контактам SCL и SDA на wemos (SDA -> D2, SCL -> D1).

Подайте на них напряжение 3,3 В от Wemos.

Подключите плюсовую клемму аккумулятора к выводу 5 В на wemos, а вывод + аккумулятор на зарядном модуле TP4056 - к плюсовой клемме аккумулятора.

Соедините все заземления вместе.

Шаг 4: Датчик HTU21D

Датчик HTU21D
Датчик HTU21D

Я покупаю новый датчик температуры, который измеряет с точностью до 0,3 ° C!

Что вам следует знать об этом датчике (от sparkfun):

  • Использует интерфейс I2C
  • Типичная точность измерения влажности ± 2%
  • Типичная точность измерения температуры ± 0,3 ° C
  • Работает с влажностью от 0 до 100%, но этот датчик не рекомендуется использовать в суровых условиях, когда он может контактировать с водой (например, под дождем).
  • Датчик 3,3 В - используйте встроенные преобразователи логического уровня или резисторы 10 кОм для ограничения сигналов 5 В
  • Только один датчик HTU21D может находиться на шине I2C одновременно.

Резюмирую: это хороший датчик, потому что он измеряет с точностью до 0,3 ° C и одновременно - температуру и влажность. Плюсы - помехи I2C и минусы 3,3 В, но в моем случае это не имеет значения.

Шаг 5: TSL2591

TSL2591
TSL2591

Датчик хорош для измерения загрязнения ночного неба из-за своей чувствительности (до 188 мкл!).

1. это диоды с возможной ик и полной мерой. Я этим не пользуюсь.

2. регулятор напряжения от 5 В до 3,3 В

Характеристики чипа (от adafruit):

  • Приблизительный отклик человеческого глаза
  • Чрезвычайно широкий динамический диапазон от 1 до 600 000 000 отсчетов
  • Диапазон люкс: чувствительность 188 люкс, входные измерения до 88 000 люкс.
  • Диапазон температур: от -30 до 80 * C
  • Диапазон напряжения: 3,3-5 В на бортовом регуляторе
  • Интерфейс: I2C
  • Эта плата / чип использует 7-битный адрес I2C 0x29 (фиксированный)
  • Размеры: 19 мм x 16 мм x 1 мм / 0,75 дюйма x 0,63 дюйма x 0,04 дюйма Вес: 1,1 г
  • 2 диода для измерения как ИК, так и полного спектра

Резюме:

188 uLux отлично, а также связь по I2C проста. Возможно, проблема может быть решена по адресу I2C (0x29). Также на борту неплохой регулятор и можно использовать датчик зимой (на морозе).

Шаг 6: Код

Вам понадобятся эти библиотеки (я добавляю их в один zip-файл):

  • Adafruit-GFX-Библиотека-мастер
  • adafruit_gfx_library_master
  • Adafruit_HTU21DF_Library-master
  • Adafruit_Sensor-master
  • Adafruit_TSL2591_Bibrary-master

Код: вы можете использовать мой или создать свой. Не забудьте установить максимальное время интегрирования (600 мс) и максимальное усиление (GAIN_MAX) для измерения ночного неба.

Если вы попытаетесь использовать мой код, загрузите ino-файл. Когда я копирую свой код из инструктируемого, что-то не так с библиотеками

Я использую загружаемое изображение луны просто для удовольствия. Вы можете использовать любой, просто используйте эту страницу для получения массива:

javl.github.io/image2cpp/

//https://lastminuteengineers.com/oled-display-arduino-tutorial///https://javl.github.io/image2cpp/ // mcd к величине https://unihedron.com/projects/darksky/magconv.php… // HD44780 - это контроллер для символьных жидкокристаллических дисплеев (ЖКД). https://unihedron.com/projects/darksky/magconv.php… #include

#включают

#include #include #include "Adafruit_HTU21DF.h" #include "Adafruit_TSL2591.h" int counter; // OLED-дисплей TWI-адрес #define OLED_ADDR 0x3C Adafruit_SSD1306 display (-1); // - 1 для отображения перезапуска с кнопкой перезапуска на плате arduino Adafruit_HTU21DF htu = Adafruit_HTU21DF (); Adafruit_TSL2591 tsl = Adafruit_TSL2591 (2591); // передаем число для идентификатора датчика (для дальнейшего использования) uint32_t lum; uint16_t ir, full; int ulux; float lux; температура поплавка; float rel_hum; float mag_arcsec2; // визуальные метки / arcsecond² [значение в mag / arcsec2] = Log10 ([значение в кд / м2] / 108000) / - 0,4 // символы // градус для Цельсия const беззнаковый char градус PROGMEM = {0xe, 0x11, 0x11, 0x11, 0xe, 0x0, 0x0, 0x0}; // показатель степени 2 const беззнаковый символ экспоненты 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, 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 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, 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, 0x8fx, 0xff, 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, 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, 0xff, 0xff, 0xfc, 0x00, 0x3f, 0x80, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0x0f, 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, 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, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xffc, 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, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x18, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0x38, 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 0xff, 0xff, 0xc0, 0xc4, 0x1f, 0xff, 0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x60, 0x0f, 0x80, 0xff, 0xff, 0x80 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, 0xff, 0xf0 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00e 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, 0xff, 0x03, 0xff, 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, 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, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 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, 0xf0x00, 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, 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, 0x00ff, 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 сенсор; tsl.getSensor (& сенсор); tsl.setGain (TSL2591_GAIN_MAX); // МАКС, ВЫСОКОЕ СРЕДНЕЕ, НИЗКОЕ, tsl.setTiming (TSL2591_INTEGRATIONTIME_600MS); // 100 мс, 200 мс, 300 мс, 400 мс, 500 мс, 600 мс // настройка для OLED-дисплея display.begin (SSD1306_SWITCHCAPVCC, OLED_ADDR); display.clearDisplay (); display.display (); display.drawBitmap (0, 0, вступление, 128, 64, БЕЛЫЙ); display.display (); задержка (1000); display.setTextSize (1); display.setTextColor (БЕЛЫЙ); display.setFont (& FreeSerif9pt7b); display.clearDisplay (); } void loop () {lux = 0; ulux = 0; mag_arcsec2 = 0; темп = 0; rel_hum = 0; задержка (100); lum = tsl.getFullLuminosity (); ir = lum >> 16; полный = lum & 0xFFFF; задержка (100); lux = tsl.calculateLux (full, ir); // интенсивность света в микролюксе ulux = lux * 1000000; если (ulux <0) {ulux = 0; } mag_arcsec2 = log10 (люкс / 108000) / - 0,4; // (log ((ulux / 108000)) /(-0.4) temp = htu.readTemperature (); rel_hum = htu.readHumidity (); display_values ();} void display_values () {//display.drawPixel(120, 50, БЕЛЫЙ); display.clearDisplay (); display.setCursor (1, 15); display.print (temp); display.drawBitmap (42, 2, deg, 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, БЕЛЫЙ); display.drawLine (67, 1, 67, 20, БЕЛЫЙ); 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 ();}

Шаг 7: внутри

Внутри
Внутри
Внутри
Внутри

Я создаю собственный корпус и использую макетную плату с кабелями dupont, как видите.

Я использую TP4056 для зарядки аккумулятора с помощью кабеля USB (нужна перемычка swtich dip).

Для включения / выключения я использую перемычку.

Для дневного света TSL2591 показывает 0, а mag / arcsec2 - нано.

Для ночного неба TSL2591 должен показывать от 0 до 1000000 микролюкс (люкс) и соответствующий mag / arcsec2.

(примерно от 14 до 22 маг / арсек2).

Для fullMoon я измерил 50 тыс. Люкс, что составляет 0,05 люкс.

Рекомендуемые: