« Arduinoで作ろう(15) LM35DZの温度計 | トップページ | Arduinoで作ろう(17) MPL115A2で大気圧測定 »

2018年6月30日 (土)

Arduinoで作ろう(16) HC-SR04 で距離の測定

Multifunctionshield_hcsr04_

 Multi function shieldに測距センサHC-SR04をつないで距離計を作ってみました。
前回はLCDに表示させてますが,今回は7セグLEDです。

このシールドは,どこに何の端子が出ているのか分かりにくいのですが,この回路図とか,Fritzingのパーツの絵を見ると分かりますよ。3×4列のピンヘッダのところにD5,D6,D9,A5と+5V,GNDのピンがあります。
そういえば,この基板上にジャンパピンが2つありますが,これの役割も上記の回路図を見ると確認できます。これ,結構重要な情報ですよね。


スケッチはこちら→ 20180701.ino


/*
Multi_function_shield
超音波センサ HC-SR04
*/

#include
const int LAT = 4; // Latchピン
const int CLK = 7; // Clockピン
const int SDI = 8; // Serial Data In ピン
const int trig = 5;
const int echo = 6;
int time;
float distance;
int Buffer[4] = {0}; //1~4桁 数字のバッファ

byte digit[10] = //7seg 点灯パターン
{
B00000011, // 数字 0
B10011111, // 1
B00100101, // 2
B00001101, // 3
B10011001, // 4
B01001001, // 5
B01000001, // 6
B00011011, // 7
B00000001, // 8
B00001001 // 9
};

const byte keta[4] =
{
B00010000, //1桁め
B00100000, //2桁め
B01000000, //3桁め
B10000000 //4桁め
};

void setup() {
pinMode(SDI, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(LAT, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
Serial.begin(9600);
}

void loop() {
digitalWrite(trig, LOW);
delayMicroseconds(1);
digitalWrite(trig, HIGH);
delayMicroseconds(11);
digitalWrite(trig, LOW);

time = pulseIn(echo, HIGH);
distance = (time / 2) * 0.0340 * 10;
Serial.println(distance / 10);

Buffer[3] = int(distance) / 1000;
Buffer[2] = (int(distance) % 1000) / 100;
Buffer[1] = (int(distance) % 100) / 10;
Buffer[0] = (int(distance) % 100) % 10;
Disp();
}

void Disp() {
for (byte j = 0; j < 4; j++) {
digitalWrite(LAT, LOW);
shiftOut(SDI, CLK, LSBFIRST, digit[Buffer[j]]);
if (j == 1) {
shiftOut(SDI, CLK, LSBFIRST, digit[Buffer[j]]&B11111110);
}
shiftOut(SDI, CLK, LSBFIRST, keta[j]); // 桁
digitalWrite(LAT, HIGH);
delay(4);
}
}

|

« Arduinoで作ろう(15) LM35DZの温度計 | トップページ | Arduinoで作ろう(17) MPL115A2で大気圧測定 »

Arduino」カテゴリの記事

トラックバック


この記事へのトラックバック一覧です: Arduinoで作ろう(16) HC-SR04 で距離の測定:

« Arduinoで作ろう(15) LM35DZの温度計 | トップページ | Arduinoで作ろう(17) MPL115A2で大気圧測定 »