Try   HackMD

Lesson 3:UART、超音波模組

tags: 基於物聯網之實境應用設計

UART

  • (Universal Asynchronous Receiver/Transmitter)非同步收發傳輸器

  • 同步、非同步

  • 單工、半雙工、全雙工

  • 實現多種非同步傳輸介面,ex:RS-232,RS-422

  • USB-to-UART


  • Baud rate是單位時間內傳輸資訊的個數,單位bits/sec。非同步傳輸裡,傳送端與接收端必需選擇相同的傳輸速率(1200, 2400, 4800, 9600等等)

Serial library

  • 7697要跟電腦通訊的時候,使用 Serial 指令
  • Serial port 使用 TX (pin 1) 跟 RX (pin 0) 這兩個腳位來傳送與接收資料。
  • 實作:接收PC的輸入
void setup() {
  Serial.begin(9600);//設定baud rate
  Serial.print("Send number");
}

void loop() {
  char receive_num;
  if(Serial.available()>0){//有收到數值時,會回傳>0的值
    receive_num=Serial.read();//讀取接收到資料的第一個位元組
    Serial.print("recive:");
    Serial.println(receive_num);
    }
}

點開序列埠監控視窗

超音波模組

  • HC-SR04 腳位從左至右分別為 Vcc、Trig、Echo 與 GND,超音波的發射與接收依靠 Trig 與 Echo 這兩個腳位。送出 10 微秒的 5V 高電位訊號給 Trig,觸發超音波的發射,接著 Echo 腳位就會處於 5V 高電位狀態,當接收到反射的超音波訊號時,Echo腳位就會處於0V低電位狀態,所以藉由計算Echo電位從high到LOW的時間,可知超音波來回時間而計算與物體距離。
  • 函式
    pulseIn(pin, value, timeout) :讀取pin腳的脈衝時間

  • 實作:超音波模組
const int Trig_Pins = 3;//trig 腳位
const int Echo_Pins = 2;// echo 腳位

float get_distance(int trig, int echo){//計算距離
    float duration;
    pinMode(trig, OUTPUT);
    pinMode(echo, INPUT);
    digitalWrite(trig, HIGH);
    delayMicroseconds(10);//給予trig 10us TTL pulse,讓模組發射聲波
    digitalWrite(trig, LOW);
    duration = pulseIn(echo, HIGH, 5000000);//紀錄echo電位從high到low的時間,就是超音波來回的時間,若5秒內沒收到超音波則回傳0
    return duration / 29 / 2;// 聲速340m/s ,換算後約每29微秒走一公分,超音波來回所以再除2
}

void setup() {
   Serial.begin(9600);
}

void loop() {
   float result= get_distance( Trig_Pins, Echo_Pins);
   Serial.print(result);
   Serial.println("cm");
   delay(1000);
}

  • 課堂作業:利用超音波模組控制呼吸燈,距離3cm~15cm之間,距離越近呼吸燈越亮