Arduino入门(二)
接上篇文章介绍的一些部件,今天给整整传感器跟显示有关的部件
1.水位 / 湿度传感器
水位跟湿度传感器的脚位相似,都是三个脚位。通过接线和代码配合便可实现水位以及湿度的监测。
 
 
通过代码的配合即可实现一些有趣的操作。
水位湿度传感器接线:
那么该如何使用水位湿度传感器呢?
 
 
三条接线配合代码即可实现对水位以及湿度的监测。
水位传感器驱动代码:
驱动他的代码挺简单,这里直接放上代码:
| 12
 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);
 }
 
 
 | 
湿度传感器的驱动代码:
湿度传感器由于其特性也自带温度监测,所以代码略多,这里直接放上代码:
| 12
 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;
 }
 
 
 
 dht11 DHT11;
 
 
 
 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矩阵板。

关于四位数码管的接线

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

四位数码管的驱动代码
这里的代码可以满足我们0-9999任意数字的显示,这里放上代码:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 | 
 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的一些基础物件的介绍和使用的记录到此也就结束了,接下来会继续更新本学期学到的知识,若有纰漏烦请指出~