防犯ブザーの自作

子供のおもちゃを製作する際に、サイレンとかアラーム音がなってLEDが光れば喜んでもらえるため、こうした警報音ICをいくつか購入しています。以前、aitendoで購入した警報音サウンドIC「3L710」(サンプル回路図上では「3Y710」と表記されています。)というのを購入していました。

実際、音を鳴らしてみると、防犯ブザーとしてよく使われているような音が鳴ります。ICもSOP8で小型ですし、音を大きくすると防犯ブザーとして実用的なものであることがわかりました。

ここでは、サンプル回路図が少し抽象的でしたので、実動作を確認した回路図と、設計方法を紹介します。

f:id:mnishikawa:20200430205157j:plain

自作防犯ブザー

 

目次

 

 

こんなふうに動きます

まずは、実際に動作させた動画を御覧ください。 


防犯ブザーの自作

 

 

警報音サウンドIC・3L710(3Y710) を使った防犯ブザー用回路図

aitendoのサンプル回路図が少し抽象的で、Webで探してもデータシートが見つからなかったので、ちょっと苦労しました。

 ▼3L710商品ページ

  https://www.aitendo.com/product/18456

 

 最終的に、実動作を確認した回路を掲載します。

f:id:mnishikawa:20200430215601j:plain

防犯ブザーの回路図

回路図データはgithubで公開していますのでご活用ください。

github.com

 

 

警報音サウンド「3L710」の特徴

・警報音とは、防犯ブザー(痴漢防止ブザー)みたいな音がなります。実際、防犯防止ブザーの音源として作られたICかもしれません。ブザーっぽい音ですが、動作確認した回路では、ダイナミックスピーカーを接続しています。

・電源を入れると警報音がなり続け、PanicKeyを接続すると、ブザーの鳴動を止めることができます。また、On/Offキーのピンがありますが、何故か機能しません。上記2つのキーは、実際は電源のON/OFFで鳴動制御できそうなので回路図からは除外しています。

・サンプル回路ではVDD 4.5Vですが、3.3Vでも動作することを確認しました。

 

・今回の構成で組み上げて、iPhoneの騒音測定アプリでは72dB~80dbぐらい出てました。相当な大音量です。

 

 

自作防犯ブザーの製作

さて、この回路図に従って実装してみます。

パーツも少なく、コイン電池(CR2032)でも十分に動作することがわかったので、100均で買ってきた小型のアクセサリーケースを加工して収めました。

小さい基板に実装するため、抵抗・LED・コンデンサ表面に、メインの3L710はシール基板を使って裏面に実装しました。

 

f:id:mnishikawa:20200430143012j:plain

警報音サウンドIC「3L710」

これで2.5センチ四方のユニバーサル基板にすべて載ります。

実装するとこんな感じ。

f:id:mnishikawa:20200430185132j:plain

自作防犯ブザーの基板

f:id:mnishikawa:20200430185116j:plain

自作防犯ブザーの基板

出来上がったのがこちら。

f:id:mnishikawa:20200430205157j:plain

自作防犯ブザー

電源を入れたらブザーが鳴って、LEDがチカチカ光るというシンプルな防犯ブザーです。

 

f:id:mnishikawa:20200430205206j:plain

防犯ブザーの裏側

裏側には、ストラップか何かをつけれるように金具を付けておきました。

 

 

まとめ

シンプルな機能のICで、1個50円(2020年4月現在)とお安いのと、なかなかの大音量です。他のシステムと組み合わせて、警報音を鳴らしたりするのに有用そうです。

 

 

 

主要なパーツリスト

最後に、主要なパーツをリストアップしておきます。

 

・警報サウンドIC(3L710)

www.aitendo.com

 

・ダイナミックスピーカー

 

 ・ NPNトランジスタ

 

 

  •  抵抗

 

 

 

 

  • ユニバーサル基板 

 

 

 安いですがちゃんと動くので重宝しています。

 

 

 

 

Ubuntu環境上でのUSBaspファームウェアバージョンアップ手順

小型ゲーム機「Tynyjoypad」の製作、58曲メロディICの制御のために小型AVRマイコンATTiny85を使用しました。このATTiny85のROMライターとして、USBaspを使用しています。私はAmazonで安く手に入った「HiLetgo 2個セット 51 AVR Atmega プログラムUSBasp USBASP 10ピン USB プログラマー 3.3V/5V ワット/ケーブル [並行輸入品]」を使用しています。2020年4月現在で2個750円という非常にお買い得なAVRライターです。ATTiny85に限らずArduinoブートローダー書き込みなどにも使えますので、一家に一台、是非購入しておきたいツールです。

さて、このUSBaspはATTiny85に書き込む際は特に問題なく使えてお買い得で満足なのですが、Amazonで入手できるものはファームウェアのバージョンが古いようで、ATTiny10の書き込みをする際に問題がありそうです。ATTiny85の書き込みをしているときも、「ファームウェアが古い」みたいなエラーがずっと出ます。

今回、私が開発に使用しているUbuntu18.04でUSBaspのファームウェアアップデートを行いましたので、自分のメモ程度に記載しておきます。

 

目次

 

 

avrdudeのインストール

まず、AVR書き込みプログラムをインストールします。

Ubuntuではパッケージマネージャから簡単にインストールができます。

 

$ sudo apt-get install -y avrdude

  

 

接続方法

私が購入したUSBaspは2個セットだったので、片方のUSBaspでもう片方のUSBaspをアップデートしました。次の写真のように接続します。

f:id:mnishikawa:20200407204332j:plain

USBaspのファームウェアアップデート

書き込まれる側(これからアップデートする側)のUSBaspのJP2をショートします。スルーホール用テストワイヤがあるとジャンパピンを半田付けしなくても良いので便利です。

ubuntuだと、ドライバのインストールは不要で、書き込みを行う側のUSBaspをPCに挿せば接続完了です。

 

 

ファームウェアのダウンロード

次のサイトより、最新版(2011年5月28日版)をダウンロードします。

www.fischl.de

ダウンロードしてきたファイルを展開し、

bin/firmware/usbasp.atmega8.2011-05-28.hex

というファイルが存在することを確認します。

 

 

ファームウェア書き換えコマンドの実行

先程ダウンロードしたファームがある場所に移動して、次のコマンドを実行してください。

 

$ avrdude -P usb -c usbasp -p m8 -U flash:w:usbasp.atmega8.2011-05-28.hex

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9307 (probably m8)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: reading input file "usbasp.atmega8.2011-05-28.hex"
avrdude: input file usbasp.atmega8.2011-05-28.hex auto detected as Intel Hex
avrdude: writing flash (4700 bytes):

Writing | ################################################## | 100% 2.95s

avrdude: 4700 bytes of flash written
avrdude: verifying flash memory against usbasp.atmega8.2011-05-28.hex:
avrdude: load data flash data from input file usbasp.atmega8.2011-05-28.hex:
avrdude: input file usbasp.atmega8.2011-05-28.hex auto detected as Intel Hex
avrdude: input file usbasp.atmega8.2011-05-28.hex contains 4700 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 2.44s

avrdude: verifying ...
avrdude: 4700 bytes of flash verified

avrdude: safemode: Fuses OK (E:FF, H:D9, L:9F)

avrdude done. Thank you.

 

上記のようなメッセージが出れば書き換え完了です。 

 

 

参考になったサイト

USBaspファームウェア更新を行う上で参考になったサイトをリストアップしておきます。

 

・USBasp

ht-deko.com

とても詳しく、わかりやすい記事を記載いただいています。

いつも参考にさせていただいています。

 

 

・USBaspファームウェア配布元

www.fischl.de

 

 

使った部品・ツールのリスト

最後に、このページで使用した部品・ツールをリストアップしておきます。

 

・USBasp 

 

・スルーホール用テストワイヤ

akizukidenshi.com

 

 

 

アルコール除菌ポンプを手を触れずに噴霧できるようになるArduinoモジュールの製作(実装編)

先日、Arduinoを使ってアルコール消毒液ポンプを自動噴霧する記事を載せました。

これは自宅で作ったのですが、会社のオフィスに持っていくと明るすぎてセンサーがなかなか動作しなかったりします。使用環境に応じてセンサー動作の閾値を変える必要があったのと、この設定を表示できること、さらには、消耗度合いなどを管理できるように使用回数を表示できることが必要と考えました。

今回は使用回数表示やセンサーの感度調整を追加して、オフィスで使えるようにケースに実装を行いました。

f:id:mnishikawa:20200424170330j:plain

アルコール除菌ポンプに触れずに作動できるArduinoモジュール

 

実際の動作ムービーはこちら。 


Arduinoを使ったアルコール除菌ポンプ自動噴霧器の製作

 

部品も安くて入手性の良いものを用いてますので、みなさんのご家庭やオフィスのアルコール消毒液ポンプの機能拡張にも役立てていただければと思います。

 

 

目次

 

 

 

回路図

回路図を示します。

f:id:mnishikawa:20200424212526j:plain

Arduinoアルコールポンプ噴霧器の回路図

 

fritzingの回路図データはgithubにて公開しています。

ポイントは以下の通り。

 

CdSセンサー

Arduinoのアナログ入力A0ピンにCdSセンサー(最大0.5MΩ)を接続。

CdSセンサーは暗いところでは抵抗値が大きくなり、明るいところでは抵抗値が小さくなります。この特性に従ってArduinoのアナログ入力値が変化するので、センサーに手をかざしてちょうど良いポイントでサーボモーターを動かせば、自動噴霧器の基本動作が実現できます。

 

また、センサーを置く位置も使い勝手に影響します。

ポンプの噴射口から離れると手をかざしにくくなりますし、Arduino基板の近くに実装してポンプの噴霧口の近くに置くと基板にアルコールがかかり、故障の原因になるかもしれません。

そこで、CdSセンサーは小型の丸いケースに入れて、センサーの端子だけ導線で伸ばしてArduinoの制御ユニットとはコネクタで接続するようにしました。CdSセンサーに極性はありませんので、ケースに2つ穴を空けて動線を通し、センサーと結線するだけで作成することができます。ケースは上が透明で水の侵入を防げれば何でもOKです。

これで取り回しのしやすいセンサーユニットが完成します。

f:id:mnishikawa:20200424171250j:plain

CdSセンサーユニット

 

 

サーボモータ

前回の記事では2.0kg・cmの小型サーボを使っていましたが、今回はAmazonで見つけた20kg・cmのより強力なもの(DS3218 20kg高トルク フルメタルデジタルステアリングサーボ 防水サーボ バハのラジコン対応 (180°))に変えています。

今回使ったポンプのボタンがなかなか重たくて、輪ゴムで予め引っ張って補助していたものの蓋の固定器具が少しでもずれるとサーボの力が足りず、引っ張れなくなったりするので、力ずくで解決しました。 

 

 

キャラクタ液晶

16文字2行表示のキャラクタ液晶「1602A」(HiLetgo® 2個セットDC 5V HD44780 1602 LCD ディスプレイモジュール 16×2キャラクタ LCDブルーブラックライト [並行輸入品])を使用しました。

今回は噴霧した回数とセンサーの閾値設定のみを表示するのに使っています。結線の本数は多いですが、制御はArduinoLCDライブラリがそのまま使えるので表示制御は簡単です。(詳しくはソースコードで。

f:id:mnishikawa:20200424170330j:plain

キャラクタ液晶を使った噴霧回数とセンサー閾値の表示

キャラクタ液晶1602Aは、VOピンへの入力電圧でコントラストを調整することができます。今回の作品ではセンサーの閾値設定にボリューム可変抵抗を使い、同じようなボリュームが増えると操作がわからなくなるので、事前にちょうど良さそうな抵抗値を見つけて固定の抵抗素子(4.7kΩ)をはさんでます。

 

電源

今回使用したサーボモーターとArduino制御基板はともに5Vを電源とします。

また、計測してみると最大電流は2A弱まで必要とわかりましたので、iPadを充電できるぐらいの2A出力できるUSB電源を用いることにしました。

USBから電源を取るためにAmazonで安いコネクタを購入。 

 最初、これをArduino制御基板に直接半田付けしたのですが、表面実装のコネクタにそれほど強度を確保できず、少しでもコネクタにストレスがかかると基板から剥がれてしまいます。(これで何度も半田付けすることに・・・。)

結果、このコネクタ部分を外に出して、Arduino制御基板とは普通のピンヘッダで接続することにしました。

f:id:mnishikawa:20200419174810j:plain

USB電源コネクタ

これでUSBコネクタが壊れてもここだけ交換すればOKです。

 

Arduinoソースコード 

githubで公開しています。

github.com

基本的な制御は、ボリューム可変抵抗の値を閾値として読んで、CdSセンサーから得た値がそれを下回ったらサーボモーターを回してポンプを動かすというものです。

センサーの検知周期などはお好みにあわせてカスタマイズしてください。 

 

ユニバーサル基板への実装

ArduinoLCD(1602A)、スイッチ、コネクタ類をユニバーサル基板に実装します。

センサーユニット、USB電源ケーブルサーボモーターとはピンヘッダで接続します。

f:id:mnishikawa:20200424164917j:plain

ユニバーサル基板への実装

裏側の参考実装はこちら。

f:id:mnishikawa:20200424163633j:plain

ユニバーサル基板への実装
  • 一番結線の多いArduinoの10番ピン~13番ピン、LCDのD4~D7を真横に並べて指すことで配線を減らしています。
  • LCDで多用するVCCライン、GNDラインを確保することで、できるだけ接続をシンプルにしています。
  • 電源側のピンが3つ余ってますが、これは追加の外付けデバイスを 接続できるように予め用意したものです。 
  • ArduinoのPC接続用ピン5本を残しています。これは、ソフトアップデート用です。

 

最終的に組み上げたシステム構成がこちら。

f:id:mnishikawa:20200424171251j:plain

アルコール除菌ポンプに触れずに作動できるArduinoモジュール

 

最後に

今回はArduinoと制御しやすくて安いCdSセンサーを用いたシステムを組みました。実装もシンプルなので、複数台作るのもそれほど難しくないと思います。

ただ、明るさは部屋によってまちまちで、誤動作も起きそうな気がします。調整機能はつけましたが、そこが扱いづらい点だと思います。

将来的には、CdSセンサーを距離センサー(ELEGOO Arduino用 HC-SR04超音波距離センサー5PCS)に置き換えて、センサーに手を近づけたときだけ動作するように置き換えたいなあと考えてます。

 

 

パーツリスト

今回使った主要な部品をリストアップしておきます。

 

 

 

  • CdSセンサー 
【10個入り】CdSセル 光可変抵抗器 5mm GL5516

【10個入り】CdSセル 光可変抵抗器 5mm GL5516

  • メディア: ホーム&キッチン
 

 

 

  • ボリューム型可変抵抗 

 

 

  • トグルスイッチ

  

 

  •  抵抗

 

 

  •  ユニバーサル基板 

 

 

  • ケース

akizukidenshi.com

 

 

 

ATTiny85と58曲メロディICを使った小型メロディボックスの製作その2(ダイナミックスピーカー対応大音量版)

先週、超小型58曲メロディIC「M8058S」とATTiny85を使って小型のメロディボックスを作りましたが、せっかくSOP8パッケージのICを使ってるのにピッチ変換基盤に載せて使ってました。また、ATTiny85で動かすためにIOの本数を削減したのにも関わらず、2桁7セグメントLEDの制御用に16ピンのシフトレジスタICを乗せたりしてたので、小型ケースに入れるには結構ギリギリの設計で作っていてもしんどかったです。また、ボタン電池(CR2035)を採用のため省電力な圧電スピーカーに変更。このメロディICはダイナミックスピーカーをつないだほうが音が綺麗だったので、性能を十分に活かせていませんでした。前回の記事から回路図の構成は変えていませんが、いくつか部品を置き換えてうまく動いたので、自分のメモ程度に記録しておきます。

f:id:mnishikawa:20200412134742j:plain

新型58曲メロディボックス

 

目次

 

 

回路図・ソースコード

ここで扱う小型メロディボックスの回路図・ソースコードは先週と基本的には同じです。(59曲目を選択できてしまって何も音がならないバグがあったので一部修正。)ソース・回路図はgithubにてBSDライセンスで公開しているので、自由にご活用ください。

 

github.com

 

 

置き換えポイント(1):メロディICとシフトレジスタ、抵抗素子を表面実装して小型基板化

シフトレジスタと7セグメントLED接続用の抵抗だけでも、表面実装に変更するだけでこれだけ小型化します。

f:id:mnishikawa:20200412173154j:plain

シフトレジスタと抵抗の小型化

メロディIC(SOP8)と場所を取るシフトレジスタのSOPパッケージ版(TC74HC595AF)を並べればSOP24になるのではないかという安易な発想でチャレンジしてみました。今回使ったSOP変換基盤はチップ抵抗をつけるスペースもあるので、IC2つ、抵抗10個が一つの小型基板に載ります。

akizukidenshi.com

 

変換基盤に一通り半田付けした様子がこちら。

f:id:mnishikawa:20200411103335j:plain

メロディICとシフトレジスタ、抵抗を実装した様子

かなりコンパクトに、すっきり実装できた気がします。

しかし、、、ICを小型化しただけで配線が減るわけではないので、単純にマイコンやスイッチへの配線を引っ張り出すと以前と同じことになります・・・。

f:id:mnishikawa:20200411155008j:plain

導線を接続。

表面実装部品での小型化メリットを活かすには、自分でプリント基板を起こすなどが必要ですね・・。

 

 

置き換えポイント(2):乾電池(単4×2本)で電力アップ・ダイナミックスピーカーの採用

冒頭でも記載した通り、このメロディIC「M8058S」は、ダイナミックスピーカーに接続したほうが良い音がなります。しかし、ボタン電池では電力的に厳しく、音量を下げるなどの対応が必要でした。今回、ICの実装を小型化したので、確保したスペースを生かして単4電池2本を5Vに昇圧して動かすことにしました。

単4電池2本が収まるケースとして、無印の小物入れを使いました。

f:id:mnishikawa:20200411061717j:plain

無印の小物入れ

 

あとは小型ケースに穴を空けて、電池とさきほどの基板を詰め込んで完成です。

f:id:mnishikawa:20200412134742j:plain

小型58曲メロディボックスの製作

 

こんなふうに動きます

できあがったのがこちら。 


ATTiny85と58曲メロディICを使った小型メロディボックスの製作その2(ダイナミックスピーカー対応大音量版)

 

前回の圧電スピーカー版より大音量で音質がよくなってます。

小型化と乾電池化のために表面実装にチャレンジしましたが、自作でユニバーサル基板に実装しているレベルでは、めちゃくちゃしんどい割には効果が小さいので、今後は設計面で別の手段を考えようと思います・・・。(良い練習にはなりましたが。)

 

 

部品リスト

最後に、今回の作品を作るのに使った主要な部材をまとめておきます。

  •  ATTiny85

 

  • 58曲メロディIC・M8058S

www.aitendo.com

 

  • 小型7セグメントLED2桁表示・アノードコモン

akizukidenshi.com

 

akizukidenshi.com

 

 

SOP24ピン変換基板

akizukidenshi.com

 

 

  • 小型ダイナミックスピーカー

akizukidenshi.com

 

  

  • ボリューム型可変抵抗(10kΩ) 

akizukidenshi.com

 

 

 

  • チップ抵抗 

  

 

  •  抵抗

 

 

 

  • スイッチ 

  

  • ユニバーサル基板 

 

  •  ケース

無印良品で購入した小型ケース。

電子工作に使えるかな~という思いつきで2020年1月に120円で購入。

ポリプロピレン小物ケース・M 64×52×20mm 通販 | 無印良品

 

 

 安いですがちゃんと動くので重宝しています。

 

 

 

 

 

 

 

アルコール除菌ポンプを手を触れずに噴霧できるようになるArduinoモジュールの製作

アルコール除菌のポンプを、上部のポンプのプッシュボタンに触れずに、手をかざすだけで噴霧できるように改造しました。

こんな感じで動きます



アルコール除菌ポンプを手を触れずに噴霧できるようになるArduinoモジュールの製作

 

会社の居室の入り口にこのアルコールのプッシュポンプが2つ置いてあったのですが、先々週、ついに1つは詰替パックがなくなり使いようがなかったので、先週自宅に持って帰らせてもらって、このアタッチメントを作りました。
とはいえ、先週の頭から原則在宅勤務になったのと、持っていったところで中身が無いという問題が・・・。

(ちなみに、テスト動画で噴霧されてる液体はただの水です。)

 

古くなったタッパーを土台にして、輪ゴムと紐で引っ張るという原始的な方法で組み立ててまててます。

f:id:mnishikawa:20200405162148j:plain

アルコール除菌ポンプを触らずに噴霧する装置の開発

プッシュボタンがわりと強い力で押さないといけないので、輪ゴムで補助してるところが苦しいです。。。コロナが空けたら、うちの会社の機構設計のプロに見てもらって改良します。

 

f:id:mnishikawa:20200405151315j:plain

輪ゴムでプッシュボタンの押下を補助

 

また、プッシュポンプ部を引っ張ってるサーボは、Arduino pro mini互換機(500円~800円ぐらい)で制御しています。手をかざしたら反応するのは、1個20円ぐらいのCdSで検出してますので、かなり安上がりな構成です。

とりあえず作った程度なので、ソースコードも回路図も適当に書いてますが、githubのsandboxスペースに公開しておきました。

 

github.com


ご参考にしていただければ幸いです。

 

 

部材リスト

最後に、今回の製作に使った主要な部品をリストアップしておきます。

 

 

 

 

  •  抵抗

 

 

 

 

ATTiny85と58曲メロディICを使った小型メロディボックスの製作

一つ前の記事で、小型58曲メロディICをArduinoで制御する方法をまとめました。先にArduinoで方式を確立し、いよいよATTiny85を使って小型・省電力・低コストなメロディボックスの製作に移ります。

出来上がったのはこちら。

f:id:mnishikawa:20200330212112j:plain

58曲内蔵小型メロディボックス

左下のボリューム型可変抵抗を回すと、選曲番号(0~57番の58曲)が7セグメントLEDに表示されます。再生したい曲を選んで、青色の再生ボタンで再生します。

 

ボタン電池で駆動し、手軽に持ち運んでその場にあった曲をいつでも再生することができる、小型電子オルゴールです。

こんなふうに動きます。 


ATTiny85と58曲メロディICを使った小型メロディボックスの製作

 

メインマイコンが130円、メロディICが150円で、周辺デバイスとあわせても500円ぐらいで、(製作工数を無視すれば・・。)低コストなのも魅力です。

 

基本的な設計・要素開発は前の記事で書いたArduino版で確立させたため、この記事ではATTiny85対応と機構設計・実装についてまとめます。

 

目次

 

 

超小型58曲メロディIC「M8058S」の制御

基本的な設計・要素開発は前の記事で書いたArduino版にまとめています。

ATTiny85にあわせて作った回路図・ソースコードは、githubにて公開しています。

github.com

 

Arduino版にてすでにATTiny85対応を見越して5ピンでの制御を行っていたため、ピンアサインを変えただけで対応できます。Arduino版との比較表はこちら。

機能割り振り ピンアサイ
Arduino ATTiny85版
メロディIC(M8058S)へのコマンド送信用 D2 D0
7セグメントLED制御用(LATCH) D3 D1
7セグメントLED制御用(RCLK) D4 D3
7セグメントLED制御用(SER) D5 D4
入力状態判定用アナログ入力 A0 A1

 

 

ソースコードも、同じArduino IDEで開発ができるため、ターゲットをATTiny85にすれば書き込みが可能です。Arduino開発環境を使ってATTiny85に書き込むための手順は、こちらの記事を参考にしてください。

mnishikawa.hatenablog.com

 

今回、小型化のためにボタン電池駆動になるため、省電力にするためにATTiny85の内部クロックは8MHzで書き込んでいます。

 

ブレッドボードでの動作確認

まずは、ブレッドボードで動作確認を行います。

マイコンへのピンアサイン以外はArduino版と同じになりますので、Arduinoを抜き取ってATTiny85を差し込み、マイコン周りの配線を変えただけのものになります。

f:id:mnishikawa:20200329075527j:plain

Arduino版からATTiny85への差し替え

ここで、コイン電池CR2032で動作することも確認しておきます。

結果、もともと直流安定化電源で電源供給し、ダイナミックスピーカーでいい音を出していたのですが、コイン電池の電流不足かメロディICの駆動が不安定になるようです。スピーカーを小型の圧電スピーカーに変えると音質は悪くなりますが、安定して動くようになったので、スピーカーを変更しています。

最終的な回路図はこちら。

f:id:mnishikawa:20200404171017j:plain

58曲メロディボックスATTiny85版

 

機構設計・実装

動作の確認が取れたので小型ケース・基板に実装していきます。 

今回の部品を並べてみたところ。

f:id:mnishikawa:20200329104622j:plain

小型58曲メロディボックスの部品

まずは、操作パネルとなる上のフタの加工です。

最初に、部品を並べてみて、穴を開けるところを決めます。

ケースは、秋月電子で売ってる50円の小型ケースを使ってます。

f:id:mnishikawa:20200329105747j:plain

f:id:mnishikawa:20200329110536j:plain

ケースへの部品取り付け検討

取り付け場所にサインペンで印をつけて、ピンバイスなどで1mmの穴を空けていきます。はんだ付けした配線を通す穴は、1.5mm~1.8mmぐらいの穴にしておくと良いでしょう。

f:id:mnishikawa:20200329150059j:plain

f:id:mnishikawa:20200329150107j:plain

ボタンの取り付け

ケースの下面につける部品もテープで仮止めしておき、上部と干渉しないように位置決めを行っていきます。過去の記事でも記載しましたが、スイッチ類は先にケーブルをはんだ付けしておいて、その後穴に通すと良いでしょう。

今回、スイッチ入力とボリューム型可変抵抗はまとめて1つのアナログ入力にまとまるため、フタ部分に小型の別基盤として実装しました。これを、マイコンやメロディICなどメイン部品のある下の基板とコネクタで接続します。

一通り実装が終わったのがこちら。

f:id:mnishikawa:20200330014157j:plain

58曲メロディボックスATTiny85版の基板実装

蓋側の基板の裏側はこんな感じ。

f:id:mnishikawa:20200330014223j:plain

58曲メロディボックスATTiny85版の基板実装

メイン基板の裏側。

ほとんどが7セグLED用ですが、配線多すぎたので、もう少しICの配置を考えたい・・。

f:id:mnishikawa:20200330014234j:plain

メイン基板の裏側

ほぼ自分のメモ用ですが、蓋側基板とメイン基板のコネクタ配線はこちら。

f:id:mnishikawa:20200404175026j:plain

コネクタピンアサイ

 

というわけで完成したのがこちら。

f:id:mnishikawa:20200330212112j:plain

58曲メロディボックスATTiny85版の完成

 

 

まとめ

58曲再生できるメロディICを単純に制御するということで、ATTiny85を使って小型化にチャレンジしました。限られた制御ピンで多数のスイッチ入力、ボリューム入力の検討をしたり、7セグメントLEDの制御を最適化したりして、これから作るものにも活かせそうなノウハウをためることができました。

 

 

部品リスト

最後に、今回の作品を作るのに使った主要な部材をまとめておきます。

  •  ATTiny85

 

  • 58曲メロディIC・M8058S

www.aitendo.com

 

  • 小型7セグメントLED2桁表示・アノードコモン

akizukidenshi.com

 

  

  • 圧電スピーカー

akizukidenshi.com

 

 

  • ボリューム型可変抵抗(10kΩ) 

 

 

 

 

  •  抵抗

 

 

 

  • スイッチ 

 

 

  • 小型スチロールケース

akizukidenshi.com

 

  • ユニバーサル基板 

 

 

 

 

 

 

58曲メロディICをArduinoで制御する(2桁7セグメントLEDで曲数表示対応)

58曲のメロディが入った「M8058S」という超小型メロディICがあります。

SOP8パッケージということでかなり小型です。

僕の人差し指の先に乗せて撮ってみた写真がこれ。

f:id:mnishikawa:20200329085103j:plain

超小型メロディIC(M8058S)

 

高品質なメロディが58曲も入っていて、電子オルゴールとしてはかなり高機能で小型なものが作れます。しかも150円。

そのままサンプル回路通り結線しても楽しめるのですが、この回路では一曲ずつ選んで再生する機能しかなく、58曲目を聴くためにはかなりボタンを押しまくらないとたどり着くことができません。また、たくさんの曲の中から、何番目の曲を選択しているのか、状態を確認することができないのも悩みどころです。

このICには、マイコンからのシリアル入力でコマンドを送って選曲する機能もあるので、曲数表示とあわせてArduinoで制御してみることにします。

 

目次

 

まずは58曲メロディICの音楽を再生してみる

 

最初に、ICのメロディと機能確認のために、リファレンス実装通りにブレッドボードで動かしてみました。


58曲メロディIC(M8058S)をサンプル回路通りにブレッドボードで実装して再生する

 

回路はaitendoさんのホームページにあります。

引用したのはこちら。

f:id:mnishikawa:20200404135327j:plain

58曲メロディIC「M8058S」のサンプル回路

 

音色も良い感じです。

ただ、全部聴くのが大変・・・。

マイコンArduino)で状態表示と、コマンド制御することにします。

 

Arduino pro miniで制御する

58曲メロディICM8058SとArduino pro miniをブレッドボードで接続した様子がこちら。

f:id:mnishikawa:20200328144634j:plain

58曲メロディIC「M8058S」とArduino pro

 

Arduino pro miniで制御するための回路図とソースコードgithubにて公開しました。

github.com

ここでは、各ポイントだけ解説していこうと思います。

 

  1. 7セグメントLEDに選曲番号を表示する
  2. 選曲はボリューム型の可変抵抗で行うようにする
  3. ボタンを押したら再生・停止が行えるようにする
  4. 小型・多機能オルゴールボックスを最終ゴールとするため、1ピンのアナログ入力と4ピンのデジタルIOのみで制御できるように制御ピンを最小化する

特に、4番がポイントです。

Arduinoだと十分な数のGPIOがあるので制御は容易ですが、このあと、小型化のためにATTiny85に移植します。ATTiny85では、5ピンしか制御ピンが無いので、ボタンそれぞれにGPIOを使ってると7セグメントLEDとメロディIC制御を行うためのピンが足りなくなります。今回、1つのアナログ入力で選曲用のボリューム可変抵抗の読み込みとボタンの状態読み込みをまとめて制御することにより、ATTiny85にも対応するようになっています。

 

回路図

接続の回路図です。

f:id:mnishikawa:20200404141212j:plain

M8058をArduinoで制御する回路図

Arduinoの各I/Oピンの使い方

Arduinoの各I/Oピンの使い方は以下の通り。

  • D2:メロディIC(M8058S)へのコマンド送信用。
    メロディICの7番ピンに接続する。
  • D3:7セグメントLED制御用(LATCH)。
    シフトレジスタ(74HC595)のLATCHピンに接続する。
  • D4:7セグメントLED制御用(シフトレジスタ用クロック)。
    シフトレジスタ(74HC595)のRCLKピンに接続する。
  • D5:7セグメントLED制御用(シリアル入力)。
    シフトレジスタ(74HC595)のSER(シリアル入力)ピンに接続する。
  •  A0:入力状態判定用アナログ入力。
    選曲用ボリューム可変抵抗とボタンで構成された複合抵抗を読み込んで入力判定するのに使用する。

 

58曲メロディIC「M8058S」をマイコンからコマンド制御する

M8058SのVOLボタンを接続してる7番ピンに、データシートのタイミングの通りにコマンドを送れば、メロディ選曲や音量調整、再生・停止、再生モードなどが可能です。ArduinoのD2ピンにつないで、データシートに記載されているタイミングでシリアルデータを送ります。 

f:id:mnishikawa:20200404145001p:plain

M8058Sのコマンドタイミング

このコマンド送信のためのArduinoのソースコードはgithubを御覧ください。

void send_melody_command(int command) {
int i=0;

// Initialize port
digitalWrite(PIN_MELODYIC_CTRL, LOW);

// Send header to melody IC
digitalWrite(PIN_MELODYIC_CTRL, HIGH);
delay(6);
digitalWrite(PIN_MELODYIC_CTRL, LOW);

// Send DATA
for(i=0;i<8;i++){
if( ((command>>i)&0x1) == 1){
delayMicroseconds(500);
digitalWrite(PIN_MELODYIC_CTRL, HIGH);
delayMicroseconds(1500);
} else {
delayMicroseconds(1500);
digitalWrite(PIN_MELODYIC_CTRL, HIGH);
delayMicroseconds(500);
}
digitalWrite(PIN_MELODYIC_CTRL, LOW);
}

return 0;
}

 

 送信できるコマンドは次のとおりです。

aitendoのホームページより引用。

<16進数コマンド>

・曲を指定する
0X00:メロディ1
0X01:メロディ2
...
0X3A:メロディ58

・動作ステータス
0XE8:メロディ再生+LED点滅
0XE9:メロディ再生のみ
0XEA:LED点滅のみ
0XEB:メロディ再生+LED常時点灯

・出力音量レベル設定
0XF0:音量レベル1
0XF1:音量レベル2
0XF2:音量レベル3
0XF3:音量レベル4
0XF4:音量レベル5
0XF5:音量レベル6
0XF6:音量レベル7
0XF7:音量レベル8
0XE8:音量レベル9

・動作を制御する
0XFB:再生
0XFC:次の曲
0XFD:前の曲
0XFE:音量
0XFF:再生停止

 

 

ボリューム型可変抵抗とボタン入力を一つのアナログ入力で読み込む

Arduinoだと十分な数のGPIOがあるのでこんなことをやる必要は無かったのですが、このあと、小型化・省電力化(さらには低コスト化)のためにATTiny85に移植を行います。

ATTiny85では、5ピンしか制御ピンが無いので、ボタンそれぞれにGPIOを使ってると7セグメントLEDとメロディIC制御を行うためのピンが足りなくなります。今回、1つのアナログ入力で選曲用のボリューム可変抵抗の読み込みとボタンの状態読み込みをまとめて制御することにより、ATTiny85にも対応するようになっています。

今回、この複合入力抵抗を構成するために、次のような回路構成を組んでいます。

f:id:mnishikawa:20200404145748j:plain

ボリューム型可変抵抗とボタン入力を一つのアナログ入力で読み込むための回路

 

  • Arduinoのアナログ入力ピンを2.2kΩでプルアップします。
  • ボリューム型可変抵抗は最大10kΩのものを使用しています。これに2.2kΩの抵抗を直列につなぎ、最小抵抗2.2kΩ、最大抵抗12.2kΩのラインを構成します。
  • 可変抵抗と並列に、押したら1kΩのラインとし、停止ボタン機能を割り振ります。
  • 可変抵抗と並列に、押したら150Ωのラインとし、再生ボタン機能を割り振ります。

 

上記の回路構成により、可変抵抗の位置・ボタンの押下状況にあわせて、アナログ入力には次の値が得られることが算出できます。 

f:id:mnishikawa:20200404150424j:plain

可変抵抗と固定抵抗の複合入力のアナログ読み込み値

結果、ボリューム可変抵抗の読み取り値と、ボタンの押下状況は、次のアナログ入力値によって判定が可能となります。

  • ボリューム可変抵抗はアナログ読み込み値512~867の値を取る。(多少の誤差があるのでマージンをもつ必要はある。)これをメロディ曲数で割れば、選曲に使用できる。
  • 再生ボタンを押したときは、65付近の値を取る。これで、再生ボタンが押されたかどうか判定できる。
  • 停止ボタンを押したときは320あたりの値を取る。これで、停止ボタンが押されたかどうか判定できる。

 

githubのソースコードは、多少の抵抗のばらつきを考慮した値にチューニングしてあります。

 

2桁7セグメントLEDで曲番号とメロディ再生状態を表示する

今回、現在選曲している曲番号の表示は小型の2桁7セグメントLED(アノードコモン)を使用しました。ここでも、ピンの節約を工夫しています。

マイコン側は5ピンの制約で設計しているため、上述のメロディICの制御で1ピン、キー入力・選曲で1ピン使うと、残り3ピンとなります。今回使用する7セグメントLEDは10ピンあるため、8ビットのシフトレジスタを使っても2つ足りません。そこで、今回は次のポイントを工夫しています。

  1. マイコンArduino)から表示するのは、数値表示の7ビットとし、DP用のLEDは、メロディIC(M8058S)の再生状態表示LEDの表示場所として活用する。
  2. 7セグメントLEDの表示桁選択ピン(6番ピンと9番ピン)を、シフトレジスタに送るデータの最下位ビットに割り振り、この状態によって表示桁切り替えを行う。

 

1つめの工夫は、メロディICの再生状態表示LED用の8番ピンを、7セグメントLEDのDP表示用ピン(5番ピン)に接続すればOK。再生中は、7セグメントLEDのDP(小数点)の桁がチカチカして再生状態がわかるようになります。

 

2つ目の7セグメントLEDの表示桁を制御するために、8ビットシフトレジスタの出力最下位ビットの状態は、必ず次のような状態にする必要があります。

  • 選曲番号の1の位を表示する(最下位ビットが0のとき):
    7セグLEDの6番ピンにHIGHを出力、9番ピンにLOWを出力
  • 選曲番号の10の位を表示する(最下位ビットが1のとき):
    7セグLEDの6番ピンにLOWを出力、9番ピンにHIGを出力

 つまり、7セグメントLEDの6番と論理が逆の信号を9番ピンに出力する必要があります。このため、シフトレジスタの最下位ビットは7セグメントLED6番ピンに接続する出力信号の他に、論理が逆の出力(NOT回路)を作って7セグメントLEDの9番ピンに接続しています。

回路図では、この部分になります。

 

f:id:mnishikawa:20200404153941j:plain

2桁7セグメントLEDの桁表示切り替えを1ピンで制御する回路

この回路により、選曲番号表示は次のようなソースコードで制御しています。

void display_melody_num(int number) {
char num1, num2, dispnum;

num1 = number / 10;
num2 = number % 10;

if(led_digit == 0) {
dispnum = data[num1] | 0x01;
led_digit = 1;
} else {
dispnum = data[num2] & 0xFE;
led_digit = 0;
}
digitalWrite(PIN_LATCH, LOW);
shiftOut(PIN_SER, PIN_RCLK, LSBFIRST, dispnum);
digitalWrite(PIN_LATCH, HIGH);

}

 

7セグメントLEDは各桁の表示処理しかできないので、表示処理が回ってくるごとに、表示桁を切り替えて、残像が見えることで全桁表示しているように見せています。

 

まとめ

Arduinoに書き込んで動作を確認している動画がこちら。 


58曲メロディICをArduinoで制御する(2桁7セグメントLEDで曲数表示対応)

 

 58曲のメロディを、ボリューム型のツマミで自由に選曲して再生させることができます。

開発用にArduinoで制御しましたが、最終的にはこのソースコードをATTiny85に移植して動作させます。Arduinoの豊富なI/Oを使えばいろいろな工夫は不要ですが、アナログ入力、シフトレジスタ論理回路を使ったI/Oの節約制御は他にも活用できると思いますので、参考にしていただければと思います。

ATTiny85で動作させるための続きの記事は 次のブロクで記載します。

 

 

部材リスト

主要な部品リストです。

  • 58曲メロディIC・M8058S

www.aitendo.com

  

 

  • 小型7セグメントLED2桁表示・アノードコモン

akizukidenshi.com

 

  

  • ダイナミックスピーカー
ELPA 小型スピーカー φ57mm HK-SP57H

ELPA 小型スピーカー φ57mm HK-SP57H

  • メディア: Tools & Hardware
 

 

  • ボリューム型可変抵抗(10kΩ) 

 

 

 

 

  •  抵抗

 

 

 

  • スイッチ