2016年6月24日 星期五

利用超音波測量距離和速度

從這邊抄來的,放這邊當作自己的筆記本: http://a-chien.blogspot.tw/2016/06/arduino.html

這可以利用超音波模組測距離,同時配合時間算出速度和加速度。要做到這件事情,測量的時間間隔就要短,所以會一下子跳出大量的數據。只要從serial monitor抓取數據,就可以進行運動學分析。

不過這時候把數據用LCD呈現就沒意義了。不過沒關係,我還是把數據丟給LCD,不過只丟距離的數據就好,LCD就單純測距囉。

阿簡這個設計,還可以利用藍芽模組收數據。利用HC-05, or 06。

接線方式

接線方式
超音波模組
VCC to arduino 5v
GND to arduino GND
Echo to Arduino pin 13
Trig to Arduino pin 12


藍牙模組
VCC to arduino 5v
GND to arduino GND
RXD to D1
TXD to D0

注意藍芽模組的包率要調到9600, 方法在這邊


要怎麼用電腦收到藍芽的數據呢?

1.把arduino先弄好,包含超音波偵測、藍芽模組、code甚麼地都弄好
2.arduino打開,讓電腦連到HC-05
3.到電腦的裝置管理員,找到藍芽模組是哪一個COM
4.打開arduino, 選擇那個藍芽COM
5.打開serial monitor




修改後的程式碼如下

#include <Wire.h>  // Arduino IDE 內建
// LCD I2C Library,從這裡可以下載:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>

// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // 設定 LCD I2C 位址


#define trigPin 12
#define echoPin 13
int x0=0;//一開始的位置
int v0=0;//初速
float temp=20.0;//溫度
float c=(331.5+0.6*temp)/10000;//單位是每微秒幾公分
float intervaltime=100;  //每幾毫秒測量一次
float duration, distance,velocity,acceleration;

void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
lcd.begin(16, 2);
}


void loop() {

digitalWrite(trigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);//超音波來回經過的時間,單位是微秒
distance = (duration/2) *c;//單位是公分
velocity=(distance-x0)/(intervaltime/1000);//每秒速度
acceleration=(velocity-v0)/(intervaltime/1000);//每秒加速度

x0 = distance;
v0=velocity;
Serial.print("E");
Serial.print(distance);
Serial.print(",");
Serial.print(velocity);
Serial.print(",");
Serial.println(acceleration);
lcd.clear();
lcd.print("D=");
lcd.print(distance);
lcd.print(" cm");
delay(intervaltime);

}



沒有留言: