Arduinoで作ろう(16) HC-SR04 で距離の測定
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);
}
}
| 固定リンク | 0
「Arduino」カテゴリの記事
- 大型7セグLEDを4個使った表示装置(2022.01.23)
- Arduinoで作ろう(61) Digisparkで7セグLED温度計(2022.01.16)
- Arduinoで作ろう(60) Digisparkでデジタル時計(2022.01.10)
- Arduinoで作ろう(59) DigisparkのP5を使えるようにした(2022.01.08)
- Arduinoで作ろう(58) DigisparkとLM35で温度計(2022.01.02)