水位感測器
使用元件
Arduino 電路板、HC-SR04 超音波感測器、led燈泡
分析電路
解析超音波感測器的內部電路
先來看發射電路
接收電路
我們所想到可以透過這樣的電路感測器所做的應用,平常使用飲水機盛水的時候常常會因為杯子的材質不為透明,而無法看到水位的高度。 所以我們透過感測器,當水位越來越高的時候,LED燈泡就會越亮越快,就可以知道水位已經很接近杯緣,然後適時的停止供水。
程式碼如下:
//demo
#define TRIGPIN 12
#define ECHOPIN 13
#define LED1 8
#define LED2 9
int time=0;
int intervaltime=1000;
int row = 0;
long ping() {digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
return pulseIn(ECHOPIN, HIGH)/58;
}
void setup() {
Serial.begin (9600);
pinMode(TRIGPIN, OUTPUT);
pinMode(ECHOPIN, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
Serial.println("CLEARDATA");
Serial.println("LABEL,Time,X");
// put your setup code here, to run once:
}
void loop() {
long cm = ping();
if (cm <= 15) {
digitalWrite(LED1, HIGH);
delay(cm*5 + 10);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(cm*5 + 10);
digitalWrite(LED2, LOW);
//delay(intervaltime);
//Serial.print("DATA,");
//Serial.print(time);
//Serial.print(",");
//Serial.println(distance);
}
delay(50);
float duration, distance;
int intervaltime=1000;
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(1000);
digitalWrite(TRIGPIN, LOW);
duration = pulseIn(ECHOPIN, HIGH);
distance = (duration/2) / 29.1;
Serial.print("DATA,");
Serial.print(time);
Serial.print(",");
Serial.println(distance);
time = time + intervaltime;
row ++;
//delay(intervaltime);
if (row > 1000)
{
row=0;
Serial.println("ROW,SET,2");
}
// put your main code here, to run repeatedly:
}
影片:




沒有留言:
張貼留言