フォト
2018年4月
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          
無料ブログはココログ

« Arduino 1.8.5環境でATtiny13Aを利用する | トップページ | ATtiny13Aで赤外線リモコン受信センサーを使う(2) »

2018年4月14日 (土)

ATtiny13AでHC-SR04を使った距離計測

Arduino IDE 1.8.5の環境で、ATtiny13Aの開発が出来るようになったので、
試しに、HC-SR04を使った距離計測を実装してみました。

スケッチは、アルゴリズム雑記さんの下記の記事を参考にさせていただきました。
・【Arduino】超音波距離センサ(HC-SR04)の測定精度を向上(気温考慮)
  https://algorithm.joho.info/arduino/ultrasonic-distance-sensor-hcsr04-temp/

実装

09

実行結果

08

測定結果は、シリアルコンソールに出力します。
とりあえず、それらしく動いています。

スケッチサイズは、ジャスト1024バイト、ぎりぎり書き込めました。

09_2

スケッチ

(修正) 2018/04/14 ライブラリBasicSerial3をlibraliesに配置するように修正しました。

//
// 超音波距離センサHC-SR04を使った距離計測  
//
// ATMEL ATTINY13 / ARDUINO
// 利用パッケージ:https://github.com/MCUdude/MicroCore
//
//                 +-V-+
// Reset      PB5 1|    |8 Vcc
// Tx         PB3 2|    |7 PB2 
// Rx         PB4 3|    |6 PB1 ECHO
//            GND 4|    |5 PB0 TRIG
//                 +----+
//

// シリアル通信ライブラリ
//   AVR half-duplex software UART supporting single pin operation
//   http://nerdralph.blogspot.jp/2014/01/avr-half-duplex-software-uart.html
//
#define BAUD_RATE 38400
#include "BasicSerial3.h"

#define Tx    PB3 // (変更する場合、BasicSerial3.S修正が必要)
#define Rx    PB4 // (変更する場合、BasicSerial3.S修正が必要)

// HC-SR04
#define TRIG  PB0 // 出力ピン
#define ECHO  PB1 // 入力ピン
#define TEMP  180 // 温度補正 気温(℃)*10

// 整数を10進数で出力
void OutDEC(uint16_t d) {
int8_t n =-1;
  uint16_t v = 10000;
  for (uint8_t i=0; i<5; i++) {
    if (d >= v) {
      TxByte(d/v + '0');
      d %= v;
      n=i;
    } else {
      if (n!=-1||i==4) TxByte ('0');
    }
    v/=10;
  }
}
void setup() {
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
}

void loop() {
  // 超音波の出力終了
  digitalWrite(TRIG,LOW);
  delayMicroseconds(1);

  // 超音波を出力
  digitalWrite(TRIG,HIGH);
  delayMicroseconds(11);
 
  // 超音波を出力終了
  digitalWrite(TRIG, LOW);

  // 出力した超音波が返って来る時間を計測
  uint16_t d = (uint16_t)pulseIn(ECHO, HIGH, 200000);

  // 計測した時間と音速(気温を考慮)から反射物までの距離を計算
  uint16_t k=(3315+TEMP*6)/20; // 係数
  uint16_t v=d/100*k;
  uint16_t h=v/100;
  uint16_t l=v%100;

  // 計算結果をシリアル通信で出力
  OutDEC(h); TxByte('.'); OutDEC(l);
  TxByte('\n');
  delay(250);
}

シリアル出力はNerd Ralphさんが公開しているライブラリ、BasicSerial3 を利用しています。
  ・Nerd Ralph - AVR half-duplex software UART supporting single pin operation
   http://nerdralph.blogspot.jp/2014/01/avr-half-duplex-software-uart.html

   ライブラリをダウンロードし、BasicSerial3を\librariesに配置する必要があります。
   さらに、BasicSerial3.Sのピン指定を修正しています。
     #define UART_Tx 3
     #define UART_Rx 4   

スケッチの全ソースは、下記のサイトに置いています。
https://github.com/Tamakichi/Arduino_ATtiny13_HC_SR04

50円マイコン、容量の制約が厳しいですが、それなりに実装でき、十分楽しめますね。

« Arduino 1.8.5環境でATtiny13Aを利用する | トップページ | ATtiny13Aで赤外線リモコン受信センサーを使う(2) »

arduino」カテゴリの記事

ATtiny13A」カテゴリの記事

AVR」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/66610333

この記事へのトラックバック一覧です: ATtiny13AでHC-SR04を使った距離計測:

« Arduino 1.8.5環境でATtiny13Aを利用する | トップページ | ATtiny13Aで赤外線リモコン受信センサーを使う(2) »