ラベル mbed の投稿を表示しています。 すべての投稿を表示
ラベル mbed の投稿を表示しています。 すべての投稿を表示

2016年7月10日日曜日

はい撤収

1年ぐらい前から、LPC1114FN28と200円の8x8マトリクスLEDを1枚の基板に乗っけて、I2Cで並列接続して大きなLEDマトリクスを安く簡単に作るような「部品」を売り出す…というのを進めていたんですが、量産しないと値段が下がらない、量産しても果たして売れるのかそんなもの…というところでウダウダしてました。世間様にお披露目したのは去年のmbed祭りだっけか。


ウダウダしているうちに出ちゃいました。

しかも、私はただのディスプレイで考えていましたが、ゲームにするなんて考えてもいませんでした。
IchigoDotS(イチゴドットS) 小型ワンキーゲーム機

価格も私のルートで量産した場合の原価とほぼ同じ。

アイディアも価格も完敗(笑)。

Eagleの設計データはここに公開します。ガーバーファイルも入れておきますので、Elecrowにzipそのまま送ればちゃんと基板になって出来上がってきます。

上のデモを動かしているプログラムはこちら。

さあ次行こう、次。次は「他人の褌」で相撲を取る(w

2016年6月21日火曜日

450円でESPでもArduinoでも使える高精度RTC

電子工作でRTCっていうとDS1307 / 1302あたりが定番だと思うんですが、秋月で売ってるRX-8025NBって、なかなか良いと思うんです。TXCO使ったものだともっと精度の高いものもあるんですが(NXPのPCF2129など)、450円で月差13秒程度ってのはなかなかのバランスだと思います。

秋月電子のサイトから

ずっと以前に買ってあったものの使う機会がなくて部品沼に沈んでましたが、在庫リストを見ていたら出てきたので使ってみました。

配線は、SDA - SDA, SCL - SCL, Vcc - Vcc, Gnd - Gndで何のひねりもありません。動作電圧範囲が広いのでmbedでもArduino / ESP8266/ ESP-WROOM-02どれでもそのまま使えます。

欠点としては、バッテリバックアップのラインが別になっていないので、電池やスーパーキャパシタをつなぐときにはSBRダイオードなどで一手間かかってしまいます。

この点、VddとVbatが分かれているDS1307+とかPCF2129は便利なんですよね。

余談ですが、こないだPCF2129で基板を作ったんですが動作しなくて泣いています。その辺の顛末はまたいつかブログに書きます。

■ソース■

こちらの記事を参考にさせていただきました。ありがとうございます。

RTCに多いんですが、年月日時分秒すべて60進数のBCDです。通常の10進をそのままセットするとまともな値が返ってこないので、セット前 / 読み出し後に変換してやる必要があります。fromClockFormatはBCD(60進)から10進、toClockFormatは10進からBCDへの変換を行ってます。

time_t(unix時間:1970年1月1日 00:00:00.000からの経過ミリ秒)とグレゴリアン歴との変換は標準関数で済ませてしまいました。テヘペロ。

起動するとWiFiに接続してsntpから時間を取得してRTCにセットし、あとはRTCから読み込んでは時間を表示しているだけです。

このRTCにはアラームをセットして割り込みを掛けたりする機能もあるのですが、使っていません。ESP-WROOM-02でRSTにつないでやると、deep sleepの後に指定した時刻に立ち上がる、なんてこともできると思います。



いい感じで動いているからあと何個か買っておこう。

…秋月にアフィリエイトがないのが残念です(笑)。

2016年1月8日金曜日

赤外線リモコンとLチカがあれば聴覚障害でもOK

私みたいに耳が悪いと何が不便って後ろで何が起こっているかわからないんですよね。「声をかける」というのが他人の注意を喚起する上で如何に有効なものであることか(詠嘆)。10mぐらい離れた人同士が会話しているのって、ほんと魔法みたいに見えます。

で、以前、赤外線リモコンのボタンを押すとLEDが点滅して誰かが呼んでいることを知らせてくれるデバイスを作りました。結構便利でした。

でもね、所詮はLED、仕事に夢中になっていると気づかないことも。

ということで、作りました。少し大きなリモコン付きのLチカを。


ビデオでは最大1wぐらいにおさえていますが、フル点灯30wの状態を直接見ると目が痛いです。

■材料■

プラットフォームはmbed、LPC1114FN28とLEDドライバと電源、それに赤外線受光器です。

以前、「普通の基板に表面実装パワーLEDを並べて何ワットぐらい点灯できるか?」を調べようとElecrowで起こした基板を引っ張りだしてきました。うーん、まだホームリフロー試行錯誤中だったので表面実装のハンダが汚いorz せっかく基板を作るのだからとファン駆動回路やPIR接続ピンなどインタフェースがてんこ盛りになっており、その1つとして「赤外線受光器インタフェース」も付いてます(実は基板見るまですっかり忘れてた)。よくある5v電源3ピンの赤外線受光器を挿すだけで使えます。なお、私が買ったものは5v電源を与えてもVoutが3vまでしか上がらないものだったので直結していますが製品や電源電圧によって異なります。買ってきたら出力電圧を確かめてもし3.3vを越えるようならば電源を3.3vにするか出力を抵抗で分圧してください。



手前の黒い直方体はDC/DCです。24vから3.3vまで落とすとさすがに通常の三端子レギュレータはかなり熱くなります。

LEDドライバはCL6807を3セット、電流検出用のシャント抵抗は0.1ΩなのでLED 7個ずつの各ストリングには1Aまで流せます。電源24vではVfの7倍にはちょっと足りないのですが、そこはマージン見越して動かしてます。なお、CL6807は秋月の「1000mA 可変定電流パワーLEDドライバーキット」にも使われています。このキット、我が家の洗面台の自動点灯LEDにも使っていますが、安定していて使いやすいです。ただし、マイコンから制御するためには多少の改造が必要です。CL6807はバラでも売ってますし、プリント基板を起こさなくてもSOT89-5用基板とSBD、シャント抵抗(0.1 - 1.0Ω)、4.7μFの積層セラミックコンデンサ、ユニバーサル基板があれば自作も可能です。なおメーカーの応用回路例には書いてないのですが、LEDへの出力の両端にパスコン(1μF)をつけると点灯が安定します。

なお基板の裏には放熱器を高品質グリースで貼り付けてありますが、これぞ焼け石に水。フルパワーにすると室温20度でも基板温度は50度を越えていきます。我ながら何をしたかったのかわからない基板です(笑)。

■ソフト■

AQ0802、IR Receiverなどのライブラリを使って、組み立てました。ループは1秒間に10回まわっていて、Lチカの基本周期となっています。リモコンの信号を受けると、「あと何回点滅させるか」という変数に値を代入します。その変数が偶数なら点灯、奇数なら消灯、という決まりにすることで、0.1秒ごとにペカペカ点滅します。これだと複数のLEDを逆相や追いかけるように点滅させるのがラクです。

2015年11月15日日曜日

Solidarite


人は愚かだ。

しかし、英知は何物も乗り越えることができる。


mbed, LPC1114FN28使用。ライブラリはJacob Bramley氏のPixelArrayを使用しました。

Thanks, Jacob!

このライブラリはBurstSPIを利用しています。SPI/MOSI端子を出力ピンとして使用し、WS2811/2812のDin端子と接続してください。Din信号は周波数特性に敏感なので、なるべく配線を短くしてつなぎます。誤動作するとLED全点灯側に振れますので、電源がヤバいです。配線を長くしなくてはいけない場合は両端にSN751768などを入れてRS485信号に変換し、ツイステッドペアのシールド線で配線すれば少し安心だと思います。

2015年9月28日月曜日

32bit CPU搭載インバータ改良

iPhone6s plus、カメラの性能すげええ

前回はとりあえず20khzで発振して、ボリュームに応じてデューティー比を変えるだけで32bit CPU Cotrtex-M0をまったく活かしておりませんでした。

今回は、少し仕事をしてもらっています…とはいえ、8bitどころか4bitで十分なレベルなのですが。

■仕様■

出力電圧をボリュームで設定できるように。

■実装■

メインループでは設定電圧と現在の電圧を測定し、その差でパルス幅を設定します。設定電圧以上なら出力をオフにし、設定電圧より低ければその差に応じてパルス幅を決めます。差が大きければ大きいほどパルス幅を広くしてインダクタンスに貯める電力を増やします。

その他、100m秒ごとに電圧設定のためのボリュームを読みに行きます。

■ハード■

前回はMOSFETとSBDの耐圧が限界となって電圧を上げられませんでした。今回は、耐圧500vのMOSFETと1000vのダイオード、それに400vの電解コンデンサを使います。

ただ、一つ問題があって、高耐圧のMOSFETはゲートがオンになる電圧も高く、今回使った2SK3234の場合は約5v以上必要です。そのため3.3vのLPC1114では直接ドライブできないので、小さなMOSFETを一段追加しそれでゲートを駆動します。電源電圧も5v以上必要です。何かすごーい遠回りをしているような気もしますが、気にしないで作ります。

あとどのぐらいの出力かを示すLEDと、出力電圧を測定するための分圧抵抗などを追加しました。

なおMOSFETが1個余計に入ったので、出力の論理が反転しています。つまり、mbedから「1」を出力するとパワーMOSFETがoffになります。そのためにPWMへの出力では 1.0 - width としてデューティー比を反転させています。


■mbedのPWM■

当初はボリュームでPWM周波数を変更できるようにしていました。インダクタンスを使っているので、どのぐらいの周波数でパルスを出力するのが一番効率が良いのかをさぐるためです。

で、100m秒ごとにボリュームからanalog inで読み取った値をもとにpwm.periodの値をセットしたのですが…これを行うとPwmOutの値を0にしていても100mSごとに出力がon / offする、つまり約5hzの太いパルスが出てしまいます。

設定電圧を0にしていても約40vの電圧が出てMOSFETがヤケに熱いので、何だろうと思ったのですが…ともかく回路が壊れなくて何よりです。

もう一つ、LEDをPWMで駆動しているのですが、当初まったく点灯しませんでした。これは、PWMの周波数がデフォルトのまま(約20m秒=50hz)なのにそれよりも早い周期でPWMへの書き込みを実行していたためです。ledに書き込みをしているループは1m秒で1回回りますので、それより十分早い10khzを出力するよう変更したところ、無事点灯しました。

いやはや…。

■動かしてみて■

設定電圧を急速に上げるとLEDが明るく点灯し、電圧が上昇して設定電圧に近づくとすーっと暗くなっていきます。逆に急に下げてやるとLEDはしばらく消灯した後、設定電圧に近づくとすっと点灯します。だいたい狙い通りです。強烈なノイズ発生源の近くにあるのでanalog inの値はそうとうバラついているはずで、安定しなければ移動平均処理を加えようかと思っていたのですが、なしでも安定してます。

時間積分効果とでも言いましょうかw

なお、こういう制御(PD)の場合、設定電圧よりも少し低いところで安定します。今回はボリュームを使っているので気にならないですが、電圧を数値で設定する場合にはそのための補正が必要です。

昔、Skycamという製品のためにモーターぶんまわし系の制御をしていた時にはずいぶん苦労したものです…(遠い目

なお、現在、出力値と電圧差の関係は単純な比例ですが、より安定かつスムーズな制御を行うためには二次関数式で比例させることもできます。つまり電圧差が少ないときには少しだけパルスを出して、差が大きい時はドカッと出すわけです(何その小学生なみの表現)。その先にはPID制御などが…ってキリがないw

電源電圧5vと9vで試しましたが、どちらも200vまできっちり上がりました。一応設定限度を200vにしているんですが、波形を見る限りもうちょっと上げられそうです。消費電流は多いですねぇ…9v電源から100vまで上げた時で70mA前後です。冬の太陽だと手持ちの0.5w太陽電池では無理で、2-5wぐらいのセルでないと安定して動かすのは難しいでしょうねぇ。大きいと風の影響なども考えないといけないし…ああどんどん違う方向へ(笑)。

■ソース■

特に珍しいことはしていません。このソースはフリーで公開します。つまり、何にどう使ってもいいですが、責任は問いませんよライセンスです。


2015年9月12日土曜日

32bit CPU搭載インバータw

「マイナスは黒」と書いてあるのはインダクタが赤に届かなかったので

■追記1■

当初この記事では「ジュールシーフ」と表記していましたが、「電子工作部」で「これはジュールシーフではなくてチョッパ型昇圧インバータ」というご指摘をいただきました。ありがとうございます、訂正致しました。

あと、適当に転がっていた0.5wの太陽電池をつないでみたところ、0.2vから動作を開始し0.6vでフル作動の状態になり、この時の電流は約50mAでした。

また、MacのBluetoothキーボードで使用できなくなったマンガン電池では0.2vまでしっかり電池を絞り尽くしました。そういう意味ではジュールシーフと言えなくもw

■追記2■

もうちょっとマシな制御をして指定した電圧でぴたっと止まるようにした続編はこちらです。

■32bit発信器w■

また無駄遣いをしてしまいました。しかも32bit CPUは単に

#include "mbed.h"
AnalogIn vol(dp4);
PwmOut pwm(dp18);
int main() {
    pwm.period(1.0/20000.0);
 
    while(1) {
        pwm = vol;
        wait(0.1);
    }
}

って書いているだけ。要するに単なるデューティー比可変方形波発振回路、CPUのムダにも程があるw

LPC810の方が向いている(こっちも32bitだけど)規模なのですが、LPC810にはADCがないのでLPC1114FN28を使いました。

■昇圧回路1■

回路は「芸が無いにも限度というものが!」と怒られそうですが、電池の1.2vをPFMで3.3vに昇圧してLPC1114と黄色LEDとインバータ回路の電源に。

HOLTEK社 HT77xxA仕様書より引用

■昇圧回路2■

LPC1114で約20khzのPWMを出力して、チョッパ型インバータ回路を構成するMOSFET 2SK2232をスイッチングしています。L1のところにつながっている電源はVccと書いてありますが、実際には電池のプラス極です。逆流防止ダイオードはショットキーバリヤー1S4、パワーインダクタは68μHの表面実装ものにピンヘッダをハンダ付けしたもの、あとは出力用の電解コンデンサ50v22μF、分圧抵抗1kΩと直列の青色LEDです。ボリュームはアナログ入力につながり、PWMのデューティー比を調整しています。

これ書くのに1時間近くかかった…IC1が立派すぎる

PWMをoff(0%)にしてもほんのわずか青色LEDが点灯して電流が流れますが、これは電池の1.2vが素通りになっているためです。Vfが3v近い青色LEDでも1.2vで点灯しちゃうんですね。

前記の通り手持ちの部品の耐圧が最大40v(1S4)しかないので30vまでしか試していませんが、部品(MOSFET, ダイオード, C1)をもっと高耐圧のものにしてLEDとR3を外せば200vぐらいは余裕で出せます。

■LPC1114fn28への書き込み■

いつも説明を省略していますが、LPC1114fn28への書き込み方法はここ(プログラムをフラッシュに書き込む)が詳しいです。

私はmbedのブラウザIDEからダウンロードしたbinをlpc21ispを使ってLPC1114FN28に送っています。

まずターミナルで ls /dev/tty.usb* を実行してUSBシリアルのドライバ名を表示します。私のところでは /dev/tty.usbmodem24131 でした。
USBシリアルのTXDをdp15, RXDをdp16に接続し、あと3.3vとVcc、GNDとGNDを接続します。なお、USBシリアルによってはTXDではなくTXと表記されている場合もあるのでご注意を。で、mbedでのコンパイルが終わるとバイナリがダウンロードされます。そうしたらLPC1114FN28のdp24をGNDに接続し、dp23をちょいとGNDに接触させて離し、dp24も離します。で、ターミナルで以下のコマンドを実行します。なお、このプログラムでは問題ないですが、dp23/24をGPIO特にDigitalOutやPwmOutとして使っている場合、そのままGNDに接続するとチップを破損します。なので、330-1kΩぐらいの抵抗を通じてGNDに接続すると安全です。
lpc21isp -bin <mbedから落ちた.binファイル> /dev/tty.usbmodem24131  115200 48000
メッセージとSector 1:のあとに「.」がととととと…と表示され、書き込みが行われます。もし表示が「Synchronizing (ESC to abort)..」の先に進まないようなら、もう一度dp23とdp24をGndに落としてみてください。
Now launching the brand new code
lpc21isp version 1.97
File Chopper_LPC1114.bin:
loaded...
image size : 11492
Image size : 11492
Synchronizing (ESC to abort)....... OK
Read bootcode version: 1
7
Read part ID: LPC1114.../102, 32 kiB FLASH / 4 kiB SRAM (0x1A40902B)
Will start programming at Sector 1 if possible, and conclude with Sector 0 to ensure that checksum is written last.
Erasing sector 0 first, to invalidate checksum. OK
Sector 1: ...........................|.........................|.........................|.........................
Sector 2: ...........................|.........................|.........................|.........
Sector 0: ..........................|.........................|.........................|.........................
Download Finished... taking 8 seconds

2015年5月7日木曜日

Elecrow発注第二弾:洗面所用LEDランプドライブ基板

長穴の要らないDC Jackが欲しい(右上/下にある3つのでかい穴)

「それってPIR一個でいいんじゃないの?」という声を意識の外に押しやって開発した、洗面室所に入るとライトがフワッと自動点灯し、誰も居ないとすーーーっと消えるLED照明を基板にしました(現状では巨大放熱器によりファンレスで運用しておりますが)。前回よりも「I/Oをいろいろ付けたい、という欲求は必ず出てくる」という反省を元に、当面使う予定のないI2cなども並べてます。右側に横一列にGPIOを並べて、お友達のO野さんから大量にいただいたLEDラインをそのまま差せるようにしています。白、青、緑、黄色、赤…などのLEDが並んでいて、ステータス表示に便利。

発注から到着までは:

4/27 発注、DHL便を指定
5/05 発送
5/07 受取

という感じ。約10日。出荷までの日数は前回より2日遅かったけど、発送からは圧倒的に早いですね(当たり前だけど)。費用は前回は2,202円、基板はほぼ同じ仕様ですが円安とDHLオプションで3,610円になりました。ファミレスでビールでも飲めばこのぐらいは軽く越えちゃうので、「成田届いてるのにまだかよ…」とイライラするよりはマシかもしれません(前回は日本に着いてから7日かかりましたw)。

あと、前回はエアキャップ(プチプチ)で1.5層ほどくるんで封筒に入って届きましたが、今回はDHLを使ったせいかどうかわからないけど、なんと箱入りでした。それも基板の周囲にはしっかりエアキャップが入っていて、空港などで多少ぶん投げられても大丈夫なレベルw 以下開梱図です。





2015年5月2日土曜日

磁束密度をFFTで処理しグラフ表示


わー、なんだか久しぶり。

以前、磁石の動きを検出するのにアナログ出力のホール素子を使ってみたのですが、かなり強力な磁石を使っても10cm程度がやっとで、あとはノイズに埋もれてしまいました。まぁアナログ技術のある人ならもうちょっとマシな結果になるかもしれませんが。

ふと思い立って、FRDM-KL46Zについている電子コンパスMAG3110を使ってみました。測定してみると何もしなくても地球磁場が600-1200ぐらいの値を返してくるのですが、すぐ近くにネオジム磁石をおいてみても200程度しか値が変わりません。ただ、地球磁場は当然ながら安定しているので、ネオジム磁石の動きは十分信号として検出できそうな気配。

ということで、ずっと部品沼で眠っていたAQM1248(秋月の超小型グラフィック液晶)、最速の誉れも高き大浦先生のFFTライブラリなどを寄せ集めて、実験してみました。

■まず予備実験■

FRDM-KL46Z内蔵のMAG3110(ライブラリ:MAG3110…ワーニング出まくるので、あとで直してpush requestしたい)を内蔵の液晶(ライブラリ:SLCD)で表示してみました。MAG3110でボード内部のI2C端子名を指定するんですが、参照した資料が間違っていて苦労しました。
MAG3110 mag(PTE25, PTE24);
これで使えます、ご参考まで。

さて、表示してみると前述の通り、値は向きによって600-1200程度の幅で変化します。そこにネオジム磁石を近づけると200ぐらい増減します。当然離すと急激に弱くなりますが、値としてはわりとはっきりしているので、たとえば自転車のホイール回転のように周波数レンジの決まっているものであれば何とか処理できそう。

ということで信号処理はFFTを使い、表示に超小型グラフィック表示液晶を使うことにしました。

■まずAQM1248■

電子工作を再開したばかりのころ、秋月の「超小型液晶」を基板にナナメにハンダ付けしてしまったのは良い思い出…今も元気に活躍しておられます、ナナメのままで。

ということで、まずフラックスを塗って置いてしばらく放置し一カ所だけハンダ付けをして向き角度などを確認してから装着。FRDM-KL46Zとの配線は以下の通り:

AQM1248FRDM-KL46Z
Vcc3.3v
CSD10
RESETD9
RSD8
SCLKD13
SDID11

mbed用のほどよいライブラリaqm1248a_lcdをリンクしサンプルをそのままコピペして動作を確認。なお、同ライブラリはプラットフォーム(mbedの機種)を識別してGPIOなどを切り替える作りになっているのですが、概ね「LPC1768とKL05、それ以外」という感じなのでLPC1768とKL05, KL46以外の方はソースの中身と配線をご確認の上、お使いになった方が良いです。

一昨日aitendoのカラー液晶に悪戦苦闘したのですが、こっちは一発動作。やっぱ私にはaitendoはハードルが高すぎます。相場?の半値ぐらいで買えたんですが、家でビニール袋から出してみたら基板に液晶が接着済(笑)。工程ミスか指示ミスか知らないけど、液晶が端子を半分覆い隠す状態になっていて普通なら納品できない品だから安かったんでしょうね。まさにジャンク。

まぁそれはともかく、これで表示はばっちり。接続ピン番号埋め込まれていてちょっと不安だったものの動作は安定しているのでグラフ描画もかなり簡素化できそうな気配。ライブラリ開発者の方に改めてお礼申し上げます。

■高速FFTライブラリ■

今回はこれを使います。
コンパクトで高速で美しい…。mbedで使うには、

  1. パッケージをダウンロード、解凍
  2. fft4g.cをブラウザ上のmbedプロジェクトにドラッグ&ドロップ
  3. ファイル名をfft4g.cppに変更
  4. あとはサンプルを参考に書くだけ
余談ですが、サンプルではfft->ifftで誤差を確認する、という処理が書かれていて、「FFT+IFFTでフィルタ作りたい」と思っている私には拍子抜けするほど簡単w

数学どころか算数レベルの私には基数って何よ?の世界なのですが、ともかくこれも一発動作。今まで使ったFFTライブラリの中で一番簡単だったかもしれません。

■ということでプログラムの構造■

  • IntervalでMAG3110を読みバッファに値を書き込んでいく
  • メインループでバッファをチェックし、一杯になったらFFTかけて液晶にグラフ表示
これだけです。

で処理の結果ですが…まず、電子機器で一杯の室内で放置した状態でのスペクトル


ごらんのように、ほぼ全域に不規則な成分が出てます。実は圧倒的に直流成分が多いのですがスケールアウトしてしまうのでカットしてます(そりゃそうだ)。そして次が、FRDM上約10cmのところでネオジム磁石をおおよそ2秒で3往復ほどの周期で振ってみたところのスペクトル


明確にでかい山が出来てます。必死に高速フリフリをすると右へ移動するし、ゆっくりにすると左へ移動するので、なんとなくできてるかなーと。さて、次は、「こういうぐあいにでっかい山ができていることを検出する処理」というのを書かないといけないのですが、パターン認識とか苦手なんす。どなたかアイディアください。

以下ソースです。

ほとんどサンプルからのコピペですが、mbedリポジトリに公開しましたのでご笑覧くださいませ。下にも貼っておきますが、何かの参考にされるのであればリポジトリの方をご覧下さい(基本的に以下のソースは更新し忘れることが多いと思うので)。

2015年3月7日土曜日

仕事に役立つ電子工作w



私は耳が遠いのですが、一日中補聴器をつけていると汗疹ができたりして具合が悪いので基本的に仕事場では外しています。

しかし、それではミーティングの招集に気づかなかったりで何かと不便。いちいちチャットで教えてもらうのも何だかなぁだし。

というわけで、呼び出しデバイスを作りました。

LEDと電池とスイッチでいいじゃん、とも思ったのですが、無駄な努力こそ電子工作。

第一号機は以前、「無駄に豪華な自転車用ストップランプ」の流用で、「叩く→点灯」というシンプルな装置。加速度センサADXL345で装置を叩いた時の振動を検出し、MSP430G2553でFFTかけてノイズなどの影響を排除して「叩かれたかどうか」を判断してLEDを点灯するのですが…今ひとつ反応が鈍いしLEDまで電線ひっぱるのが面倒くさい。

だったらリモコンにすりゃあいいんじゃね?とできたのが2号機。上の写真です。赤外線リモコン受光器とLPC1114FN28を使って、そこらに転がっているリモコンからの信号が来たらLEDを激しく点滅させる方式としましたw

こんなん1時間もあれば終わるわ、と始めたのですが…IR Remoteが何故かFRDM-KL46で正常に動作せず2時間ほど捕まってしまいました。安直に動かそうとFRDMを使ったことが裏目にorz

あきらめてLPC1114FN28を使うことにしたら、dp27がオープンコレクタだと忘れていて「LEDが点灯しない…いや電圧が出ていないじゃん?」と頭を抱えたこと以外は特に問題ありませんでした。

ああ無駄な工作は楽しいw

2014年10月26日日曜日

読書灯:ミスった 組み立てた 動いた

しかし、デカいな>28pin 600mil幅

先日オーダーした基板、設計のミスで一部のグラウンドが配線されておりませんでした。部品をハンダ付けした後のチェックで発覚。三端子レギュレータから電圧出てなくて調べてみたら三端子は正常、外部センサー用のGNDが宙ぶらりんになっていました。

うーん、GNDクラスに設定してあるし、チェックでもエラー出なかったんですが…とEagleの自動配線頼りきりなのがバレバレな話。ジャンパ一本で済む話ですが、良い教訓になりました…。

元はこんな状態(この他にCL6807用のサブ基盤)だったのですが、だいぶすっきりしました。
下にあるのは「カンパチ」

ブレッドボード上でいろいろ改良していこうと思って作ったものなんですが、一発目でかなりいい感じに動いてしまい、いつもの「動いてるんだから、いーんじゃねーのーw」病が出てしまいました。UIとしてPIRと距離センサを付けて、当初シリーズの定電流回路だったものをCL6807に変えたりはしましたが。

さて、「製品」が出来上がればブレッドボードはお役御免です。どうもモノに思い入れしてしまうタチなので、バラす前につい手を合わせてしまったり。

短い間だったけど、お疲れ様。


余談ですが、一度使った抵抗、1個1円なので、作業に要する時間を考えたら捨てた方が効率良いのはわかってます。でも、もったいなよね。


2014年9月17日水曜日

HRM1017でANCS


HRM1017、買った後でGPIOの電流容量が0.5mAしかないと知り、さてどう使ったものか…と考えたままと止まってましたが、使わないのはもっと勿体無いので、とりあえずサンプル動かしたみました。

参考にしたというか丸っきり書いてあることをなぞったのは以下のページ。


ここのページのサンプル「ANCS」を試します。

MacとHRM1017をmini USBで接続し、「BLE_ANCS_SDAPI_IRC」のところにある「import program」をクリックし、mbedのオンラインIDEにインポートします。その際にdeviceとしてNordic nRF51822を選びます。HRM1017も使用可能になっているのですが、このサンプルではdevice.hが見つからない、と言われます。

あとは、サンプルに書いてある通り。iPhoneに着信するとターミナルにメッセージがバラバラ…っと出てきます。めでたしめでたし。

なお、MacでUSBシリアルと通信するには、ターミナル.appを起動し
screen /dev/tty.usbmodem***** 9600
とタイプします。*****のところには5桁ぐらいの数字が入ります。その数字を見つけるには、まずHRM1017を接続していない状態で ls /dev/tty.usb* で一覧表示し、次に接続してからもう一度同じコマンドを繰り返します(カーソルキー上向き↑、returnで繰り返せます)。そこで、接続前と違うポートが出てきたら、それがアナタのHRM1017。

…通常は1つしか出ないですよね。うちはArduinoデジタル時計その他をつないだままなので、バラバラ出てくるのですw

ではでは。

2014年1月26日日曜日

LPC1114FN28のアナログ入力で躓く



タイトルの通り「可変抵抗で入力電圧を変えるとその通りにPWMでLEDが明暗する」というのを作ろうとして、見事にハマりました。

結論からいうと、LPC1114FN28のAD変換器(AnalogIn)は、基準電圧0vと3.3vをつながないと正常に動かないよ、ということです。AnalogInが0-3.3vに変化するならば、pin8をGND、pin7を3.3vにつなぐ必要があります。

まぁ、分かってしまえばバカバカしいことなのですが…AnalogInのリファレンスを見ても、基準電圧を設定するためのAPIが見当たらなかったので、0-3.3vになっている、と思い込んでいました。PwmOutも正常に動いているし、AnalogInへの電圧も0-3.3vで変化しているし…あとはAnalogInしかありません。でもググってもそれらしい記事は見当たらない。これはもう、何か根本的なミスだろうと、何度目かの配線チェックをしていて「AVIN」「AGND」に気づいた、という展開でした。

あと、副産物ですが、PwmOut led(dp18);と定義して led = 0.0f; を出力してもLEDは消えません。うっすらと点灯しています。でも、led = 0; と整数をセットすると消えます。

また余談ですが、基板の上で光っているLEDは秋月で10個250円で買って来た「超高輝度赤色LED」です。20mAぐらいでもかなり明るいのですが、連続最大定格の60mAを流すと直視できません。安くなったもんだなぁ…。

2014年1月22日水曜日

Macで初mbed

秋月で買ってきてそのまま引き出しで眠っていたLPC1114FN28、今日ようやく陽の目を見ました。

ジャンパが足りなかったりブレッドボードが小さかったりでムダに苦労しましたが、一昨日FT232の基板にフラックスを塗っておき(秋月の半完成基板は昔からハンダの乗りが悪いような気がします)、昨日FT232を組み立てて、今日会社から戻ってからブレッドボードに組み立て、mbedにサインアップ、lpc21ispのビルド、lpc21ispでのインストール…で、LEDチカチカまでたどり着きましたw

マイコン界のHello,World、Lチカw

なお、秋月のUSBシリアル変換キットFT232RLを買ったのですが、J1のジャンパの説明が今ひとつピンと来なかったので、回路図をにらめっこしJ1のジャンパはGND表記の側、J2ジャンパを差して、最終的にはUSBをつないだ状態でテスターで電圧を測り「3V3」と「VIO」が3.3V前後になっていることを確認しました。最近のLSIは昔より大分丈夫になりましたが、電源間違えると死ぬ確率は飛躍的に高くなります。しっかり確認しましょう。

回路図で電池ってどうやって書いたっけ?w

なお、今回の試作にあたっては、こちらのサイトが大変参考になりました。ありがとうございます。

  [lang:ja] mbed LPC1114での遊び方

なお、補足ですが、Macでの lpc21isp のビルドは

  • LPC21ISPをダウンロード&解凍
  • ターミナルを起動し、解凍してできたLPC21ISPのディレクトリに移動
  • make -f Makefile clean all
  • chmod +x lpc21sp
  • sudo mv lpc21isp /usr/sbin 

これで lpc21ispが使えるようになります。

次にいよいよLPC1114FN28への書き込みですが、その前にシリアルポートの名称を調べる必要がありますが、それにはターミナルで ls /dev/cu.* と入力するとusbserialとか何とかと出てきます。あるいは /dev/cu. まで入力してTabキーを押すと残りが出てくるはずです。では書き込みましょう。

  • USBを接続する
  • リセットボタンとISPボタンを同時に押す。
  • リセットを先に離し、ISPボタンも離す。
  • mbedサイトから落としたバイナリのあるディレクトリへ移動
  • ターミナルで
  • lpc21isp -bin HelloLED_LPC1114.bin /dev/cu.usbserial-AH01KSGF 115200 48000
  • 転送中の表示の後、自動的に実行開始。

28pin、秋月…というとワンチップデジタル時計のMN5311を思い出してしまうんですが、今はこんな高機能なチップが100円かそこらで買えるなんて凄いですね。