第1步:什么是夜間污染及其測量方法
夜間污染來自燈具,汽車,房屋,城市中的巨大液晶面板和人類制造的每一盞燈。那燈光叫人工。對于觀察者來說,人造光是從城市看星星的主要問題,他們必須走出城市。對于人類來說,高光污染是有害的。還有樹木,草和動物。
為了檢查你所在地的光污染,你可以在這里看到lightpollutionmap
它只是模型,真正的價值觀會有所不同。這就是為什么我創建了這個luxmeter。
對于測量光污染,我只測量lux并計算幅度/arsec2。
我可以從lux到candela每suqare米計算:
1 cd/m2 = 1 lux
每平方秒的幅度( mag/arcsec2 )描述夜空背景(它叫表面亮度)。
關于wiki的更多內容:表面亮度
計算cd/m2到mag/arcsec2的公式為:
[mag中的值/arcsec2] = Log10([以cd/m2為單位]/108000)/- 0.4
unihedron.com/projects/darksky/magconv.php
第2步:BOM
對于這個項目,你需要:
1。 WEMOS D1 Mini或任何微控制器
(我使用wemos,因為它是最小的,有usb端口,你可以嘗試Arduino Nano)
WEMOS D1 MINI
WEMOS D1 MINI
WEMOS D1 MINI 10件
用于編程和上傳的USB線代碼到wemos
2。 TSL2591傳感器
TSL2591
TSL2591
TSL2591
3。 HTU21D溫濕度傳感器
HTU21D
HTU21D
4。 OLED顯示屏0.96(128 x 64)
OLED顯示屏
OLED顯示屏
OLED顯示屏
5。 18650電池
18650鋰離子電池
18650鋰離子電池
電池18650支架
6。 TP4056充電模塊
tp4056
tp4056
7。切換按鈕或傾角跳線
swtich red dip
swifhers,很多不同的
8。面包板和杜邦電纜
小面包板
面包板套件
9。案例,我用木材+膠帶創建
繁文縟節
Prusa 3D打印機,我希望我能用塑料做案例:D
Step 3:電路
電路非常簡單:
將所有i2c模塊(TSL2591,OLED,HTU21D)連接到SCL和SDA引腳在wemos上(SDA - 》 D2,SCL - 》 D1)。
將電池的端子連接到wemos上的5V引腳和tp4056充電模塊上的電池+引腳連接到電池上的正端子。
將所有接地連接在一起。
步驟4:HTU21D傳感器
我購買新的溫度傳感器,測量精度為0.3°C!
物聯網你應該知道這個傳感器(來自sparkfun):
使用 I2C 接口
典型濕度精度±2%
典型溫度精度±0.3°C
濕度為0到100%,但不推薦使用此傳感器惡劣的環境它可能與水接觸(如下雨)。
3.3V傳感器 - 使用內聯邏輯電平轉換器或10k電阻來限制5V信號
一次只能有一個HTU21D傳感器駐留在I2C總線上
我的總結:這是一個很好的傳感器,因為它的測量精度為0.3°C,溫度和濕度都是。優點是I2C干擾和3.3V,但在我的情況下無關緊要。
步驟5:TSL2591
該傳感器因其靈敏度(188微升lux?。┒m用于測量夜空污染。
2。電壓調節器從5V到3.3 V
近似人眼響應
極寬的動態范圍1到600,000,000計數
Lux范圍: 188 uLux 靈敏度,最高88,000 Lux輸入測量值。
溫度范圍: -30 至80 * C
電壓范圍: 3.3-5V 進入板載穩壓器
接口: I2C
這板/芯片使用I2C 7位地址0x29 (固定)
尺寸:19mm x 16mm x 1mm/.75“x .63”x .04“重量:1.1g
2個二極管用于測量 - IR和全光譜
摘要:
188 uLux是perferct,也是I2C通信很簡單。也許問題可以修復I2C地址(0x29)。板載穩壓器也很好,可以在冬天使用傳感器(霜凍)。
步驟6:代碼
您需要這些庫(我將它們添加到一個zip文件中):
Adafruit-GFX-Li brary-master
adafruit_gfx_library_master
Adafruit_HTU21DF_Library-master
Adafruit_Sensor-master
Adafruit_TSL2591_Library-master
《代碼:你可以使用我的,或創建自己的。不要忘記為夜空測量設置最大積分時間(600 MS)和增益到最大值(GAIN_MAX)。
如果您嘗試使用我的代碼,請下載ino文件。當我從instructable我的代碼復制時,庫有問題。
我使用加載月亮圖像只是為了好玩。您可以使用任何,只需使用此頁面獲取數組:
http://javl.github.io/image2cpp/
//https://lastminuteengineers.com/oled-display-arduino-tutorial/
//http://javl.github.io/image2cpp/
// mcd to magnitude http://unihedron.com/projects/darksky/magconv.php.。.
// The HD44780 is a controller for character-based liquid crystal displays (LCDs)。 http://unihedron.com/projects/darksky/magconv.php.。.
#include
#include
#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 for restart display with restart button on arduino board
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
Adafruit_TSL2591 tsl = Adafruit_TSL2591(2591); // pass in a number for the sensor identifier (for your use later)
uint32_t lum;
uint16_t ir, full;
int ulux;
float lux;
float temp;
float rel_hum;
float mag_arcsec2; // visual mags/arcsecond2 [value in mag/arcsec2] = Log10([value in cd/m2]/108000)/-0.4
// symbols
// degree for Celsius
const unsigned char degree [] 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, 0xff, 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, 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, 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, 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, 0xff, 0x00, 0x3f, 0xc0, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 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, 0x00, 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, 0xff, 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, 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, 0xc0, 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, 0xff, 0xc0, 0x18, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xc0, 0x38, 0xff, 0xff, 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, 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, 0xff, 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, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 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, 0xff, 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, 0xff, 0x00, 0x00, 0x1f, 0xff, 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, 0x00, 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, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 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, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x03, 0xff, 0xff, 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
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
// setup for oled display
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.clearDisplay();
display.display();
display.drawBitmap(0, 0, intro, 128, 64, WHITE);
display.display();
delay(1000);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setFont(&FreeSerif9pt7b);
display.clearDisplay();
}
void loop() {
lux = 0;
ulux =0;
mag_arcsec2=0;
temp=0;
rel_hum=0;
delay(100);
lum = tsl.getFullLuminosity();
ir = lum 》》 16;
full = lum & 0xFFFF;
delay(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, 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();
}
第7步:內部
我創建自己的案例,我使用面包板與杜邦電纜你可以看到。
我用 TP4056 用usb線充電(需要swtich dip jumper)。
如果打開/關閉我使用 dip跳線。
對于日光,TSL2591顯示0,mag/arcsec2為nan。
對于夜空,TSL2591應顯示 0到1000 000 microlux (ulux)和相應的mag/arcsec2
(cca。 14到22 mag/arsec2)。
完整 月亮我測得 50k ulux ,這是0.05 lux。
-
氣象站
+關注
關注
1文章
753瀏覽量
15692
發布評論請先 登錄
相關推薦
評論