ページ

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に抵抗挟んでいませんが回路図の通り抵抗挟んだ方がいいです。
一応補足でした。

では。ノシ


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

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

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


2019年4月21日日曜日

0421

夜が明け空も明るくなってきたころなので日記らしいことでもします。
4年生になり新学期も始まりだいぶ慣れてきました。

特に面白いことでもないのですが最近物欲がやばいです。
気が付けば衝動買いしていたり...
今も故意的に手が滑り、e-onkyoでハイレゾ音源をポチってしまいました。
ちなみにジブリのピアノ曲です。
聞いていてかなり落ち着くんですよね。
ほかにもスーパー行くと必ずと言っていいほど無駄にお菓子買ってしまったり。
春休みのバイト代が入って調子乗ってるということもあるのですが、それにしては使いすぎです。
もう少し、考えてから買おうと思いました。

あ、そうそう。そういえば言ってなかったと思いますが珈琲が好きなんですよ。
んで前から豆買っては挽いてハンドドリップとかしてるんですけども。
最近だいぶ淹れるのが上手くなってきました。
それだけです。ほかに意味はありません。
まあそんなところです。
暇だったらまた書きます。では。

2019年2月20日水曜日

2100円の128GBマイクロSDカード買ってみた。

お久しぶりです!
とても久しぶりな投稿な気がします。
ここ何か月かネタはあったんですが忙しく、投稿するのもめんどくさかったので更新できませんでした。(笑)
最近、少しずつ暖かくなってきましたね。もうそろそろ春でしょうか。
早く雪が解けて自転車で遠出したいです。

前置きはさておき、今回はSDカードのお話です。
先日Amazonで2100円という破格で128GBのSandisk製MicroSDカードが売られているのを見つけました。(SanDisk microSDXC ULTRA 128GB)
これは買い時だ!と思いまして購入してみたわけですよ。
今回はこのSDカードを検証してみたいと思います。

まずは書き込みテスト、H2testwを使ってテストしてみます。

無事書き込めました。

スピードがかなり遅い気もしますが、容量詐欺ではなかったようなのでOKです。
次のテストに行きます。DiskMarkを使って書き込み速度を図ります。

いいんじゃないのって感じです。

そこそこな値。もしかしたら個体差かも。
USB3.0のカードリーダーで測っています。
Amazonのレビューではもう少し出てる人もいました。
どちらにせよ、この値段で128GBが買えるとは!
4Kビデオや高速連射に使用しないのであれば全く問題ないですね。

少し前にAliexpressで900円の128GBのメモリーカードを買ったので届いたらレビューします。
これは本当に容量詐欺ありそうです。(笑)
ではノシ