ページ

2019年6月16日日曜日

2桁7セグメントLEDを使った超音波距離計の製作

どうもみなさん。こんにちは。
久しぶりの更新ですがさっそく本題に入ります。
今日は2桁7セグメントLEDで距離を表示させる超音波距離計を製作します。

今回使った部品です。
・2桁7セグメントLED  (ELD-511SRWA)
・Arduino Nano (互換品)
・超音波センサ (HC-SR04)
・51Ω抵抗(7本)
※型番をクリックするとデータシートへ飛びます



回路図です。

こんな感じです。
ではプログラムへ行きます。

const int A = 2;
const int B = 3;
const int C = 4;
const int D = 5;
const int E = 6;
const int F = 7;
const int G = 8;
const int TRG = 12;
const int ECH = 13;

void setup() {
pinMode(TRG, OUTPUT);   //超音波センサトリガー
pinMode(ECH, INPUT);    //超音波センサエコー

/*
   a1              a2 
 f1  b1       f2  b2
   g1              g2
 e1  c1        e2  c2
    d1   dp1     d2  dp2

7seg対応ピン
a1=16, a2=11
b1=15, b2=10
c1=3, c2=8
d1=2, d2=6
e1=1, e2=5
f1=18, f2=12
g1=17, g2=7
dp1=4, dp2=9
cathode1=14, cathode2=13
*/

  pinMode(A,OUTPUT);
  pinMode(B,OUTPUT);
  pinMode(C,OUTPUT);
  pinMode(D,OUTPUT);
  pinMode(E,OUTPUT);
  pinMode(F,OUTPUT);
  pinMode(G,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);

Serial.begin(9600);
}

//光らせる部分を指定
void ledSeg(int val) {
  switch(val) {
    case 0:
      digitalWrite(A,1);
      digitalWrite(B,1);
      digitalWrite(C,1);
      digitalWrite(D,1);
      digitalWrite(E,1);
      digitalWrite(F,1);
      digitalWrite(G,0);
    break;

    case 1:
      digitalWrite(A,0);
      digitalWrite(B,1);
      digitalWrite(C,1);
      digitalWrite(D,0);
      digitalWrite(E,0);
      digitalWrite(F,0);
      digitalWrite(G,0);
    break;

    case 2:
      digitalWrite(A,1);
      digitalWrite(B,1);
      digitalWrite(C,0);
      digitalWrite(D,1);
      digitalWrite(E,1);
      digitalWrite(F,0);
      digitalWrite(G,1);
    break;

    case 3:
      digitalWrite(A,1);
      digitalWrite(B,1);
      digitalWrite(C,1);
      digitalWrite(D,1);
      digitalWrite(E,0);
      digitalWrite(F,0);
      digitalWrite(G,1);
    break;

    case 4:
      digitalWrite(A,0);
      digitalWrite(B,1);
      digitalWrite(C,1);
      digitalWrite(D,0);
      digitalWrite(E,0);
      digitalWrite(F,1);
      digitalWrite(G,1);
    break;

    case 5:
      digitalWrite(A,1);
      digitalWrite(B,0);
      digitalWrite(C,1);
      digitalWrite(D,1);
      digitalWrite(E,0);
      digitalWrite(F,1);
      digitalWrite(G,1);
    break;

    case 6:
      digitalWrite(A,1);
      digitalWrite(B,0);
      digitalWrite(C,1);
      digitalWrite(D,1);
      digitalWrite(E,1);
      digitalWrite(F,1);
      digitalWrite(G,1);
    break;

    case 7:
      digitalWrite(A,1);
      digitalWrite(B,1);
      digitalWrite(C,1);
      digitalWrite(D,0);
      digitalWrite(E,0);
      digitalWrite(F,1);
      digitalWrite(G,0);
    break;

    case 8:
      digitalWrite(A,1);
      digitalWrite(B,1);
      digitalWrite(C,1);
      digitalWrite(D,1);
      digitalWrite(E,1);
      digitalWrite(F,1);
      digitalWrite(G,1);
    break;

    case 9:
      digitalWrite(A,1);
      digitalWrite(B,1);
      digitalWrite(C,1);
      digitalWrite(D,1);
      digitalWrite(E,0);
      digitalWrite(F,1);
      digitalWrite(G,1);
    break;
  }
}
//ここまで

void loop() {

//ここから超音波計 
int diff;
float dis;
digitalWrite(12, HIGH);
delayMicroseconds(10);
digitalWrite(12, LOW);
diff = pulseIn(13, HIGH);
dis = (float)diff * 0.01715;
Serial.print(dis);
Serial.println("cm");
delay(10);
//ここまで

//数字を桁で分ける
int n = dis;                 //整数変換
int n1=0,a2=0,a1=0,i,j;

for(i=0;i<=10;i++){
  n1 = n-i*10;
  if(n1>9){
    a2 = 9;           //99以上なら2桁目を9
    a1 = 9;           //99以上なら1桁目を9
  }
  else if(0<=n1 && n1<=9){
    a2 = i;                  //2桁目の数字
    for(j=0;j<=10;j++){
      if(n1 == j){
        a1 = j;              //1桁目の数字
      }
    }
  }
  else if(n1>9) a2 = 9;
}
//ここまで

//7セグカウンタ出力
  for(int k=0; k<10; k++) {
  digitalWrite(9,LOW);
  digitalWrite(10,HIGH);
  ledSeg(a2);
  delay(10);
  
  digitalWrite(9,HIGH);
  digitalWrite(10,LOW);
  ledSeg(a1);
  delay(10);
  }
//ここまで


}

プログラムの中で一応コメント書いてあるので解説は省略します、質問ある方はコメントしてください。
はい、そしてこれをArduinoへ書き込みます。




大体50cmくらいまではかなり正確に測定できています。
それ以降はたまにかなり値がぶれます。

70cm付近で250cmなど値が荒ぶっています。


100cm以上は99と表示されます。

これで、無事完成しました。
一応備忘録のつもりですので自分が見やすいように書いています。
それと写真では7セグLEDに抵抗挟んでいませんが回路図の通り抵抗挟んだ方がいいです。
一応補足でした。

では。ノシ


にほんブログ村に参加しています。

↓よかったらクリックお願いします↓

にほんブログ村 その他趣味ブログ 電子工作へ


0 件のコメント:

コメントを投稿