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; }
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任意数字的显示,这里放上代码:
1 2 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的一些基础物件的介绍和使用的记录到此也就结束了,接下来会继续更新本学期学到的知识,若有纰漏烦请指出~