ページ

ラベル 電子工作 の投稿を表示しています。 すべての投稿を表示
ラベル 電子工作 の投稿を表示しています。 すべての投稿を表示

2023年8月18日金曜日

指紋認証センサー「R503」の備忘録

おひさしぶりです、ばったです。

何か作ろうにもワンルームじゃ作業スペースもなく、何とか重い腰を持ち上げて
今回は指紋認証センサーのR503をArduinoを使って色々ためしてみたいと思います。
(調べても、日本語サイトが見つからなかったので備忘録がてら書きます。)


指紋認証の仕組みについては調べたら出てくるので記載はしないですが、
指紋認証システムは大きく分けて3種類ほどあるそうで、
「光学式」「静電容量式」「超音波式」と順番に高価で高性能なものになっています。


そして、今回実験するものは「静電容量式」のものを使います。
某リンゴ製のホームボタンとかについているあれですね。




(おなじみのAliで2000円ほどで買いました。高かったです。)

このユニットのスペックをざっくりと書くと、

・電圧        :3.3V
・動作電流      :20mA
・LEDの色      :青、赤、紫
・指紋登録数     :200個
・精度(未登録突破率) :<0.001%
・精度(登録済失敗率) :<1%
・通信ポートレート  :(9600×N)bps、N = 1~12(デフォ値N = 6、57600bps)


といった感じで、かなり精度がいいものとなっています。
今回、このセンサーをArduinoで制御していきたいと思います。

このセンサーのデータシートはこちらから見ることができます。


①事前準備


さて、まずは事前に必要なものを準備しましょう。
今回使用したものは以下の通りです。

・指紋認証センサー R503          ←R502でも可。どちらも中身は一緒です。
・Arduino UNO(互換品)              ←ArduinoであればNanoでもMegaでもいいです。
・Arduino↔PC間接続コード
・PC (Windows10)

開発環境はお任せします。
では次にライブラリをインストールします。
Adafruit Fingerprint Sensor Library」というすでに公開されてあるライブラリを使用します。
こちらのGitHub上にライブラリがありますのでこれをArduino IDEにインストールしてください。
光学式の指紋センサーもこのライブラリを使用するため、ご不明な方はそちらもご覧ください。




②配線

次に、配線ですね。
センサーユニットからは計6本の配線が出ております。
以下ご参照ください。



若干配線の色が違いますが、順番は一緒です。
写真だと上から以下の通りで、Arduinoへの配線も記載しておきます。
Pin 1 赤色 :電源DC3.3V           →3.3Vへ
Pin 2 黒色 :GND                     →GNDへ
Pin 3 黄色 :アウトプット(Tx)    →デジタルPin2へ
Pin 4 茶色 :インプット(Rx)       デジタルPin3へ
Pin 5 青色 :指検出信号             →未接続
Pin 6 白色 :誘導電源DC3-6V     →5Vへ(3.3Vでも大丈夫です。)


Pin5は使用用途がないので今回使いません。
試していないのでわかりませんが、センサーに触れたら3.3Vを出力する線ですかね。
実際にA実験してみました。
センサーに触れていないときは「1(analog時は1023)」を出力し、少しでも振れれば「0(analog時も同様に0)」を出力する線のようです。
analogRead時は触れ加減によって値が変わるかと考えていましたが、そんなことはなく単純に1/0の表現でした。


配線するとこのようになります。


(コネクタは切りました。そのままだと接続できないので。)
以上で環境構築は完了です。


③プログラム

ライブラリをインストールすると、IDEの「スケッチ例」にプログラムが格納されています。指紋登録方法や認証方法などは先ほどの光学式の参考サイトに詳しく記載されていますので、詳細は省きます。

プログラムだけ見ても関数の使い方がよくわからなかったので、ここからは
いろいろ調べながら分かった関数をいくつか記載しておきます。


LED制御

まずは光学式との大きな差で言うとLEDの可否ですね。
静電容量式は「青、赤、紫」のLEDが搭載されています。
制御方法について詳しく説明していきます。

まず、LEDを光らせる関数ですがこのように構成されています。
finger.LEDcontrol(点滅方法, 点滅スピード, LEDの色, 点滅回数);

1.点滅方法
 ここでは点灯、消灯、点滅、点滅(呼吸のような)、フェードイン/アウトなどが選べます。
 点灯:FINGERPRINT_LED_ON
 消灯:FINGERPRINT_LED_OFF
 点滅:FINGERPRINT_LED_FLASHING
 点滅(呼吸のような):FINGERPRINT_LED_BREATHING
 フェードイン:FINGERPRINT_LED_GRADUAL_ON
 フェードアウト:FINGERPRINT_LED_GRADUAL_OFF

2.点滅スピード
 ここでは点滅時のスピードを制御できます。
 制御は0x00~0xffまでなので256段階で調整でき、0~255を設定します。
 ここは設定数字の×10msが1サイクルのスピードになります。
 点灯時は関係ないので、数字は何でもいいです。

3.LEDの色
 LEDは先ほども述べた通り「青、赤、紫」の3種類が組み込まれています。
 それぞれのコードは以下になります。
 青:FINGERPRINT_LED_BLUE
 赤:FINGERPRINT_LED_RED
 紫:FINGERPRINT_LED_PURPLE

4.点滅回数
 ここでは点滅時の回数を設定できます。
 0~infiniteで可能です。回数制限なしの場合、この部分は省力も可能です。
 点滅スピードと同様に、点灯時は関係ないです。
 
以上がLEDの制御方法です。
LEDの同時点灯はできないようなので、注意が必要です。


その他関数

分かったこと書きますといいましたが、そこまで書くことがなくなってきました。
とりあえずスケッチ例に載っていた関数でも書いていきます。

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

では。ノシ


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

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

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


2017年12月3日日曜日

NANDの74HC00で作るワンショット回路

こんにちは
今回は初めての論理回路実験です。

ワンショット回路はご存知ですか?
トリガー信号を入力したら一定時間だけ出力されるというものです。
なので例えば5秒入力されていても決められただけしか出力してはいけないのです。

調べてみるとタイマーICを使ってやってる方が多いようです。
そこで僕はみんなと違う方向に行きたいなと思い考えてみました。

まず回路です。
回路の説明をします。
スイッチから入力されるのがトリガー信号です。
1,2pinが0のときNOTなので3pinが1になります。
出力された信号は二つに分かれ、一つはダイオードを通りコンデンサーを充電させます。
もう一つは再びNOTで信号が反転し、6pin出力が0になります。
この時、NANDに入力されるのは13pinが0,12pinが1なので出力は1、それをNOTで反転され0になります。

ここで、1,2pinが1になったらどうなるのか。
まず、3pinが0になるのでコンデンサーの充電はストップします。
3pinが0のため、4,5pinも0、そのため6pinの出力は1になります。
コンデンサーと6pinをNANDに入力、このときコンデンサーが抵抗により放電し、その間は1です。放電し終わったら0になります。
このため、13pinは1,12pinは1が入力され、11pinは0、それを反転し、1が出力されるわけです。
コンデンサーが放電し終わると、13pinは1,12pinは0になるので11pinは0になります。
これにより、入力信号の長さにかかわらず安定した出力を行うことができます。

大体こんなところです
説明するまでもないですが。
動画作ったのでよろしければご覧ください!



この回路は多段式コイルガンで応用できます。
そのうち記事にします。
ではここらへんでノシ



↓よかったらクリックお願いします↓
にほんブログ村 その他趣味ブログ 電子工作へ

2017年3月27日月曜日

NFJ USB-DACキットの組み立て&レビュー


こんにちは
今月2度目の更新です
さぼってしまいすいませんw
今回はamazonで売ってるNFJのUSB-DACキット(NFJオリジナル設計 Ti-BB製PCM2704搭載 USB DAC/DDC自作キット )を組み立てました
amazonレビューがないので不安でしたが安かったのでw



ではいきます
セット内容を確認
しっかりあることを確認したのであとは半田地獄です
背の低い部品から組み立てていきます
はい、完成しました
早速パソコンと接続してみます
勝手にインストールが始まります
これで完了、あとは聞くだけです

~感想~
メリット
・安い
・作りやすい
・低音から高音までしっかり出ている
・良音

デメリット
・部品が偽物くさい→交換で解決

以上、聞いてみてほんとびっくりするくらいいい音です
DAC初心者にはいいかもしれません
バスパワー駆動もできますが、やはりいい音にするには外部電力供給のほうがいいと思います
久々に良工作したと思います

では

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

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

2017年1月26日木曜日

二石アンプ、原因判明

こんにちは
やっと原因が判明しました
過去記事↓
二石アンプの実験

すみません僕のミスです
2SA1015の足を勘違いしてて、エミッターとコレクター逆にしてました
とても簡単なことでしたねw
本読んでたら2SA1015出てきて、逆じゃん?!ってなりました
今度からはしっかりとしますw

まあこれで実験成功ですね
2SC1815と2SA1015の二石アンプですが、音質は書いてあるようにおもちゃですね
この音だったら100均にあってもおかしくはないです
てか部品少ないし安いので100均で売ってもいいと思うのですが

まぁ最終的にはポタアン作りたいので、ちょっと高めのトランジスターでも買ってみます

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

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

2017年1月6日金曜日

アンプ修理(2)

こんばんは
本日は冬山登山をしてまいりました
藻岩山です
雪すごいです
なかなか綺麗でしたよ
頂上までは56分くらいで登れました
途中おじさんに話しかけられて10分くらいロスしてます
なかなか興味深い内容でした
おじさんありがとうございます^^

さて、めでたく1000人超えましたが、昨日の続きです
DA-U660、ダイヤトーンのアンプの修理でございます
まずふたを開いてみました
とりあえずヒューズあたりが怪しいですね
みてみると…
案の定切れております
しかも2本
このヒューズにつながっているところをたどってみてみると
右側増幅出力につながっております
これの右側です
対になっている形でございます
部品が焦げていたりしないかくまなく捜索
しかし原因は見つかりません

長い戦いになりそうです…
とりあえず明日オーディオ用コンデンサー買ってきます

このアンプ調べたらかなりの年代物らしいですね
中古じゃなきゃ売ってませんよ^^;
ではここらへんで

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


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

2016年12月11日日曜日

クリスマスネタ 電子オルゴール

こんばんは
無線屋に行って部品買ってきました
その帰りに札幌のホワイトイルミネーション見に行ったんですけどなかなか綺麗でしたよ



はい、買ったのはこちら

・基板4枚
・メロディIC
・圧電ブザー
・ツェナーダイオード
・電池ボックス
・キムワイプ
です

今日は何作るかというとタイトルにもある通り、電子オルゴールです
クリスマス近いですよね
てことでクリスマス気分を味わおうということで買ってきました

回路図はこんな感じ

 ↑修正しました

セラコンは何でもいいです
で出来たのがこちら
見た目はきれいにできました
裏は見せませんw

では鳴らしてみます
ちょっとノイズ入りますね
なのでコンデンサ付けます
そして無事に直って完成!
今回はいつもよりクオリティ高めですw
でも本当はもっとすごいことしてるけど更新してないだけですw
 時間あったら更新しますね

そういえば買って三日で壊れたXperia z4分解したんですよね
それは明日にでも記事書きます
では


~修正~
回路図のトランジスタにベース抵抗が入ってないとご指摘いただきました
回路図書き換えました
よろしくです


↓よかったらクリックお願いします↓
にほんブログ村 その他趣味ブログ 電子工作へ
クリック

2016年12月2日金曜日

二石アンプの実験

こんにちは
無事テストも終わり(7日にもう1教科)規制していた実験をしたいと思います
いやぁ・・・今週はつらかったですね
ハードスケジュールでした
さて、テスト期間中あるものを見つけました
Indigo-Illusion のblog
こちらですね
アンプICを使わずプッシュプル回路を使っています
簡単ですね
早速作りたいところですが、手持ちのNPNとPNPが1815と1015しかありません
こちらのブログではそれはおもちゃだとか書いてありますが、
どうなんでしょうかね
では早速試してみます

とりあえず組んでみました
音が鳴りません
困りましたね、またいつものパターンですよ
原因探ってもわからないのでわかったらまた更新します
いつもながらグダグダで申し訳ない
ノシ

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

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

2016年11月25日金曜日

原因判明 中国産トランジスタ

わかりました
ピンの配置が違いました
2sc1815はこれに対し
2n5551はというと・・・・
こうなっていたのです
つまり、2sc1815でいう1ピンにエミッター、2ピンにベース、3ピンにコレクターが来ていたわけです
道理で動かないわけですね
そうと分かったので組み立てなおします
すると、、、
こんな感じでつきました!
ちなみに2sc1815の場合
こっちのほうがLED付いてる時間長いですよね
なんでだろう
抵抗挟んでみますか
長くなりましたね
これで使えますね
よかったよかった
ゴミにならなくて
これで安心してテストが受けれるわけですね!
では! 

↓よかったらクリックお願いします↓ 
にほんブログ村 その他趣味ブログ 電子工作へ

届いたもの part2

昨日言ってたNPNトランジスタと、アノニマスマスク届きました
トランジスタは2n5551。
試しに昨日の回路にぶっこんでみます
どうか...
はい、だめでした
なんでなんでしょうか。。
これで使えなかったら300個無駄…
原因の究明頑張ります。。
土日で頑張ります。。
データシート見てもこっちのトランジスタのほうが性能上回っております
 謎が深まるばかり

↓よかったらクリックお願いします↓
にほんブログ村 その他趣味ブログ 電子工作へ

2016年11月24日木曜日

届いたもの

中国から届きました
NPN トランジスタです
100個入り143円とかいう破格

 2n3904です
こちら→2n3904
同時に2n5551を200個頼んでますが時間かかってるようですね
とりあえず性能試し、力試しと行きますか
こちらはこの前テストから逃れるために作ったいたって普通の回路
スイッチを押すと一定時間LEDを光らせます
こいつの性能を見せてもらいましょう
尚、PNPは2sa1015を使っています

さてと、ブレッドボード上で組み立てますか...

組み立てました
困ったことにLED様が消えてくれません
どうしたら…
…ふと、2sc1815に変えてみても同じか?
と思ってやってみました

う ご い た 。
あれれ、あれれれれれれ
なぜよ
理解不能、迷宮入り、さよなら
テスト終わってから調べてみます
すべてテスト明けに置いといて後で後悔する奴w
明日は保険と専門科目のテストがあります
では

↓よかったらクリックお願いします↓
にほんブログ村 その他趣味ブログ 電子工作へ