surga Lab

営業部でも開発したい!!

Arduinoで超音波式メジャーを作ってみました

以前試した超音波距離センサと7セグを利用して簡易超音波式メジャーを作成しました。

f:id:hisurga:20161130233251j:plain

hisurga.hatenablog.com

hisurga.hatenablog.com

基本的に組み合わせるだけですので、追加の部品などは不要です。

回路

隣に繋げるだけです。

f:id:hisurga:20170222191624p:plain:w400

コード

#include<SPI.h>

#define ECHO 6
#define TRIG 7

#define SCK 13
#define LATCH 10
#define SDI 11

const byte digits[] =
  {
    0b11111100, // 0
    0b01100000, // 1
    0b11011010, // 2
    0b11110010, // 3
    0b01100110, // 4
    0b10110110, // 5
    0b10111110, // 6
    0b11100000, // 7
    0b11111110, // 8
    0b11110110, // 9
  };

void setup()
{
  //hc-sr04
  pinMode(ECHO, INPUT);
  pinMode(TRIG, OUTPUT);
  Serial.begin( 9600 );
  //7seg
  pinMode(LATCH,INPUT);
  pinMode(SCK, OUTPUT);
  pinMode(SDI, OUTPUT);
  SPI.begin();
  SPI.setBitOrder(LSBFIRST);
  SPI.setDataMode(0);
}

void loop()
{
  double Interval = 0;
  double Distance = 0;
 
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  Interval = pulseIn(ECHO, HIGH);

  if (Interval != 0)
  {
    Interval = Interval / 2;
    Distance = Interval * 340 * 0.0001;
    Serial.print(Distance);
    Serial.println("cm");
  }
  
  //7seg  
  int d_seg = 0;
  if(Distance < 10.0)
    {
      d_seg = 0;
    }
  else if(90.0 < Distance)
    {
      d_seg = 9;
    }
  else
    {
      d_seg = Distance / 10;
    }

  digitalWrite(LATCH, 0);
  SPI.transfer (digits[d_seg]);
  digitalWrite(LATCH, 1);

  delay(500);
}

7セグが表示する値

1桁しか表示できないので、一定の範囲で変動するようにしました。
測定距離 < 10cm
0表示

90cm < 測定距離
9表示

それ以外
10の位の値のみ表示

完成

10cm未満

f:id:hisurga:20161130233255j:plain

15cmくらい

f:id:hisurga:20161130233301j:plain

30cmくらい

f:id:hisurga:20161130233305j:plain

今回はソフト面の変更が多かったですね。
それっぽい機能を実装できました。