#include <TM1637Display.h>
#include <TM1637.h>
#define CLK 3//pins definitions for TM1637 and can be changed to other ports
#define DIO 2
TM1637 tm1637(CLK, DIO);
int dustPin = 0; // 夏普灰塵傳感器黑色線,傳感器輸出到nano 的A0 端
float dustVal = 0; // 灰塵傳感器輸出到nano 的電壓值,與灰塵濃度成函數關系,
int ledPower = 2;
// 夏普灰塵傳感器綠色線, nano 的D2 輸出作為夏普灰塵傳感器激光頭電源,激光頭發
// 射激光遇到灰塵散射,散射越厲害,灰塵傳感器向外輸出電壓越高
int delayTime = 280;
int delayTime2 = 40;
float offTime = 9680;
void setup (void)
{
tm1637.init();
tm1637.set(BRIGHT_TYPICAL);
Serial.begin(9600); // 串口初始化,電腦可以和nano 交互
pinMode(ledPower, OUTPUT); // A0 give 傳感器5 號
pinMode(dustPin, INPUT); // Digital pin 2 give 傳感器3 號
}
void loop (void)
{
digitalWrite(ledPower, LOW);
delayMicroseconds(delayTime);
dustVal = analogRead(dustPin);// 讀取灰塵傳感器的模擬電壓輸出到nano 的A0 端
delayMicroseconds(delayTime2);
digitalWrite(ledPower, HIGH);
delayMicroseconds(offTime);
delay(1000);
// Serial.println(dustVal);// 電腦作為顯示設備看輸出的電壓,數值越高灰塵越多
dustVal = dustVal * (5.0 / 1023);
// 電壓換算 ,Arduino A0-A5 口為ADC引腳,其分辨率為10 位,也就是
//1024 級,輸出數值為0-1023,默認以輸入電壓5V 作為基準電壓。
dustVal = 0.17 * dustVal - 0.1;// 電壓值轉換為灰塵濃度線性函數關系
dustVal=dustVal*1000;//mg 和ug 的換算
Serial.println(dustVal);// 串口通信寫
int num = dustVal;
// 4位數顯示
tm1637.display(0, num / 1000);
tm1637.display(1, (num % 1000) / 100);
tm1637.display(2, (num % 100) / 10);
tm1637.display(3, num % 10);
delay(500);
} |