Arduino入门(二)

Arduino入门(二)

接上篇文章介绍的一些部件,今天给整整传感器跟显示有关的部件

1.水位 / 湿度传感器

水位跟湿度传感器的脚位相似,都是三个脚位。通过接线和代码配合便可实现水位以及湿度的监测。

水位传感器 湿度传感器

通过代码的配合即可实现一些有趣的操作。

水位湿度传感器接线:

那么该如何使用水位湿度传感器呢?

水位传感器的接线使用 湿度传感器的接线操作

三条接线配合代码即可实现对水位以及湿度的监测。

水位传感器驱动代码:

驱动他的代码挺简单,这里直接放上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
double temp,data;
int val = 0;
void setup() {
Serial.begin(9600);
}

void loop() {
temp=(long)analogRead(0);
data=(temp/650)*4;
Serial.println(data);
delay(10);
}

湿度传感器的驱动代码:

湿度传感器由于其特性也自带温度监测,所以代码略多,这里直接放上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
double Fahrenheit(double celsius) 
{
return 1.8 * celsius + 32;
} //摄氏温度度转化为华氏温度

double Kelvin(double celsius)
{
return celsius + 273.15;
} //摄氏温度转化为开氏温度

// 露点(点在此温度时,空气饱和并产生露珠)
// 参考: http://wahiduddin.net/calc/density_algorithms.htm
double dewPoint(double celsius, double humidity)
{
double A0= 373.15/(273.15 + celsius);
double SUM = -7.90298 * (A0-1);
SUM += 5.02808 * log10(A0);
SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
SUM += log10(1013.246);
double VP = pow(10, SUM-3) * humidity;
double T = log(VP/0.61078); // temp var
return (241.88 * T) / (17.558-T);
}

// 快速计算露点,速度是5倍dewPoint()
// 参考: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
double a = 17.271;
double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity/100);
double Td = (b * temp) / (a - temp);
return Td;
}

#include <dht11.h>

dht11 DHT11;

#define DHT11PIN A0

void setup()
{
Serial.begin(9600);
Serial.println("DHT11 TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT11LIB_VERSION);
Serial.println();
}

void loop()
{
Serial.println("\n");

int chk = DHT11.read(DHT11PIN);

Serial.print("Read sensor: ");
switch (chk)
{
case DHTLIB_OK:
Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println("Checksum error");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println("Time out error");
break;
default:
Serial.println("Unknown error");
break;
}

Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 2);

Serial.print("Temperature (oC): ");
Serial.println((float)DHT11.temperature, 2);

Serial.print("Temperature (oF): ");
Serial.println(Fahrenheit(DHT11.temperature), 2);

Serial.print("Temperature (K): ");
Serial.println(Kelvin(DHT11.temperature), 2);

Serial.print("Dew Point (oC): ");
Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));

Serial.print("Dew PointFast (oC): ");
Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));

delay(2000);
}

2.四位数码管

四位数码管通俗易懂,即可以显示四位数字的LED矩阵板。

数码管图片

关于四位数码管的接线

Arduino的四位数码管接线图

四位数码管的脚位比较多,接线图比较复杂 还需要加电阻。

实际接线

四位数码管的驱动代码

这里的代码可以满足我们0-9999任意数字的显示,这里放上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "SevSeg.h" // 利用此库去驱动四位数码管

SevSeg sevseg;
byte numDigits = 4;
byte digitPins[] = {2,3,12,13};
byte segmentPins[] = {7,6,5,10,11,8,9,4};
byte hardwareConfig = COMMON_ANODE;
int numToShow = 0;
int delaycount = 0;
void setup(){
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins);
}
void loop(){
delaycount++;
if( delaycount == 1000){
delaycount = 0;
numToShow++;
}
if(numToShow > 9999){
numToShow = 0;
}
sevseg.serNumber(numToShow);
sevseg.refreshDisplay();
}

如果接线正确,四位数码管会循环显示数字,完事~

总结

到这里有关Arduino的一些基础物件的介绍和使用的记录到此也就结束了,接下来会继续更新本学期学到的知识,若有纰漏烦请指出~


Arduino入门(二)
http://blask.cn/2019/11/22/arduino入门(二)/
作者
Wayne Li
发布于
2019年11月22日
许可协议