2015年1月12日 星期一

[專題] 第五組 - 水位感測器

第五組








水位感測器
使用元件
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:
    
    }

影片:

沒有留言:

張貼留言