編集履歴一覧に戻る
masayasanのアイコン画像

masayasan が 2021年10月12日21時30分16秒 に編集

初版

タイトルの変更

+

PICマイコンでのHC-SR04使用方法 備忘録

タグの変更

+

HC-SR04

+

PIC

メイン画像の変更

メイン画像が設定されました

記事種類の変更

+

セットアップや使用方法

本文の変更

+

#概要 超音波距離センサーHC-SR04の使用方法のメモ 他のサイトを見るとタイマー1のゲート機能を使用する方法が多い様だけど、 単純にタイマー機能だけで計測して距離を出してみた。 #MCC ![キャプションを入力できます](https://camo.elchika.com/8549e1aa05e8951e3099d5f60d36d0bfbb31d8ea/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f65353937646530322d363362652d346362622d383264392d326365633330353663363535/) ![キャプションを入力できます](https://camo.elchika.com/4428a9554b0cb89a70837223c8856697bd4d1e0b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f36373338353661362d393935392d346462362d613036642d333364303537306566623836/) #プログラムソース ```HC-SR04 のPICでの使用例 float Distance() { // uint16_t distance; float distance; RA5 = 0; __delay_us(2); RA5 = 1; __delay_us(10); RA5 = 0; while (RC0 == 0); uint16_t Time1 = TMR1_ReadTimer(); while (RC0 == 1); Time1 = TMR1_ReadTimer() - Time1; // distance=Time1; distance = Time1/2*(331.5+0.61*20) *100/1000000; __delay_ms(60); return (distance); //return (100); } void main(void) { SYSTEM_Initialize(); while (1) { printf("%f\n", Distance()); } } ``` #まとめ  一応距離はそれなりに計測できた。 while (RC0 == 0);と while (RC0 == 1); で止めてるのが気になる。 エコーの信号が返って来ないと永遠に止まってしまうので、ゲート機能使うのがやはり良いと思う。 ゲート機能使える様になったら、改めて設定方法などを記載します。