2018年8月29日水曜日

鳩対策は終わらない:1


ベランダについては、電撃柵などの対策により、ようやく来なくなりました。

が、共同廊下側にまた来るようになりました。公団でテグスを張ったり、私がサーボで追い払ったり、止まらないようにカバーをつけたりして、2ヶ月ぐらいは来なかったのですが。

一度来るようになると、追い払っても毎朝来ます。そして大量のフンを残します。

小手調べとして、市販のセンサーライトを設置しました。PIRを使ったもので、生物が近づくとライトが点きます。ただ、明るいところでは点灯しないためのCdSセンサーがついているので、センサーの上にアルミ箔を貼って遮光してあります。ご覧の通りの2眼式?で目っぽく見えるのが味噌。かな。

昨日設置して、とりあえず今朝は糞がありませんでした。それで喜んでいたら、その後ジョギングから戻ったツマ「いや、普通に来てたよ」とのことorz

で、プランターなど「いかにも巣を作りたくなりそうなエリア」の近くにセンサーライトを移動しました。その翌朝、糞もないし、鳩も見かけませんでした。

今のところは。

しかし鳩が一度その場所に執着してしまうと、結局は物理的に排除しないとダメ(殺すのではなく防鳥ネットなどで入れないようにするという意味ですよ>鳥獣保護法)、というのが結論ではありますが、共同の廊下なのでそうもいきません。

なので、新しいガジェットに慣れたら次のものを用意するのではなく、なれるヒマを与えず次々と用意する、ってのはどうだろう。

ということで、いろいろ考えています。基本になるのは、ラズパイとカメラを使った顔認識+PIR。鳩を認識して、ってのができれば良いのですが、学習させている間に廊下が糞だらけになってしまうので…とりあえず「何か生物が来ている」から「顔を認識したから人だわ」を引き算すれば、「人間以外の生物が来ている」と判断できるんではないかと。

後ろ向きはどうする?ってのはありますが、普通の人は顔をこっちに向けて歩いてくるので、去っていく時間に余裕を見ておけばまぁ大丈夫かなーと。

で、アクチュエーター?部分ですが:
  • プロジェクタで猛禽類の映像を投影する
  • 電池駆動プラモに最小限の改造を加えて生物を検知するとぐるぐる走り回るようなものを作る
  • 蛇のおもちゃを複数のウインチ+モーターでつってSkycamならぬSkySnakeで驚かす
  • めんどくさいからルンバのパチモノ導入
  • いっそトイドローン飛ばして驚かしたらいいんじゃね
  • 空飛ぶドラえもんとか
  • 忌避剤スプレーをセンサー検知で噴霧
  • ISD1820にPIRつないでカラスの鳴き声を流す
  • ESP32にスピーカーつないで、動きを検知したらFlash内の音を再生する。Flash内の音は適宜http server経由で入れ替えができるようにする

最後のはうっかり途中までソースを書いてしまったw

「ボタンを押すと上がっていく」程度のトイヘリコプター(「空飛ぶドラえもん」など)に紐つけて飛ばすってのが私のヘボ技術力と予算と鳩への脅威という点で良さげだったのですが、ちょうど良いトイヘリが見つからず。

というわけで、続きます。

2018年10月15日
久しぶりに糞が落ちていました。糞を片付けてからその正面にPIRセンサーライトを1つ追加しました。なにもしないと糞を発見した後はエスカレートする一方(産卵期が終わると収束)なのですが、さて今回は防げるかどうか。

2018年8月22日水曜日

ESP-IDF 3.2で一度WiFi接続に失敗すると二度と接続できない

という現象が出てしまい、頭を抱えてました。
  • v3.2で一度WiFi接続に失敗するとそのボードは二度と WiFiに接続できない。ただし、一度3.0で接続した直後は正しいStationには接続できる。
  • v3.0ではこの現象はでない
  • v3.2でもごく単純なアプリでは出ないが、複数threadにまたがって処理するような規模のアプリで出る。
というWiFiマイコンESP32にとっては致命的な現象。そのSSIDが確かに存在しているのにエラーとして「WL_NO_SSID_AVAIL」が返ってくる、というのが特徴です。

ArdunoをESP-IDFのコンポーネントとして使っていて、WiFi接続にはArduinoのWiFiクラスを使っている、というのが影響しているのでしょうか。

結果として、以下のコードで解決しました。失敗したらesp_wifi_restore()を実行する、だけです。

ググって、同様のエラーにハマっている人がいましたが、どうも解決できていないようでしたので、記事にまとめました。I'm sorry this message is in Japanese, but I hope my sample code below may help you!

2018年8月2日木曜日

なんちゃって冷やし中華

重曹入れたお湯でパスタ茹でると中華麺っぽくなる。

ならば、冷やし中華にもなるんではないか?と思って研究してみました。

  1. お湯一リットルに塩10gと重曹10gをいれて、パスタをゆでる。細めのパスタはアルデンテ+1分、太めのものは+2-3分。
  2. ザルにあげてよく水洗いする。手で揉み洗いする感じ。粗熱をとったあと氷水で締めると尚良
  3. ザルで水を切る。大事なのは、手のひらでザルにぎゅううう、と押し付けて、水を絞り出すこと。すべての冷たい麺はこれで味がぼやけなくなります。
  4. 冷やし中華たれやバンバンジーたれなどで適当に味をつけて食う

結果、ちょっと沖縄ソバにも似たプツプツした歯ごたえの麺になります。

なお、普通冷製のパスタは細い麺を使いますが、重曹でゆでると太いのでも大丈夫。先祖返りっぽいですが、ダイスカットのトマトと刻んだバジルか青じそもしくは青じそ味のドレッシングなどかけても夏の昼食として美味しゅうございます。

2018年7月16日月曜日

USBケーブル直結ジャンパーワイヤ



何を作っていいか思いつかない。そんなときに一本作っておくと便利なケーブルがこちらです。

安いUSBケーブルをぶった切りの電源線にオスのジャンパーを圧着し熱収縮チューブとカプトンで覆っただけのものです。

USBからブレッドボードに電源を供給したいとき、とても楽に使えます。

なお、使うときには先にブレッドボード側に挿しておいてから、USBハブなどに接続すること。ショートさせると大変なことになるので。

2018年7月13日金曜日

超音波カッター入手

厚いダンボールにほとんど力を入れないでスーッと刃が入っていく

Kickstarterと私の相性が非常に悪いことは一部で有名ですが、珍しくほぼオンタイムでブツが届きました。

さっそく開封して使ってみたら…いやーダンボールがトコロテンみたいに切れます! 普通のデザインナイフでコピー用紙を切るよりも手応えがない。手応えなさすぎてかえって難しいレベルです。ケーブルが結構太くて存在感があるので、取り回しを気にしながらかっちりホールドするのは慣れが必要かもしれないです。

ただ、プラスチックに関しては、スッと刃が入ったり、まったく動かなくなってしまったりで、少し慣れが必要な感じです。とりあえずフル充電して、練習しますわ。

以下開封写真。

おまけの防刃グローブ付き

開封のワクワク感は異常www


中身。あれ?

welcome back to Japan !!

こちらこそ。 

2018年5月18日金曜日

C基板用アクリル板


秋月のユニバーサル基板はサイズごとに名前がついてシリーズ化されてます。

そのうち、C基板はサイズが手頃なので、よく使います。少し前に基板にフィットするサイズのアクリル板が発売されていたので、使ってみました。

バラックなのに、いい感じに見えますw



これは空気質(TVOC:総揮発性有機化合物)とCO2濃度センサーのCCS811と0.96インチOLEDをESP32 Dev Kitで制御しているものです。友達に頼まれて作りました。

CO2、締め切って眠り、起床一番での数値は4000ppmを越えていました。あまり風がないせいか換気してもせいぜい1000ppm程度。屋外に出ても同程度でした。その後風向きが変わって大気レベルに近い450ppmまで下がりました。

前にも書きましたけど…換気は大事っすね…。

あと、当たり前ですがガス排気筒の近くは恐ろしい値になりますw

2018年5月13日日曜日

LTEモジュールでえらい目に会った



■トラブル発生■

「SIM7500JE-B2BというLTEモジュールをマイコンと接続する基板作って」という依頼を受けて試作したのですが…いやー苦労しました。

触ったことがないモジュールなので、仕様書の推奨回路の通りで作ってみたのですが…動きません。Power Key信号を送ると起動するんですが、シリアルに"AT\r\n"を送ってもOKが帰ってきません。

SIM7500JEのロジック回路は1.8V、マイコンは5Vなのでレベルシフタが必要です。レベルシフタにはTIのTXB0108RGYRが推奨されていたので、5Vでも対応可能なことを確認した上で使用しました。

信号を見ると、SIM7500JEからのLOW出力が0.4Vぐらいあります。Vthとしては微妙ってか、TXB0108RGYR的にはNG。仕様書には入力側のVL/VHは書いてあるんですが、出力については書いてないんですよね…。

■対策1-トランジスタレベルシフト回路■

結局、SIM7500JEからの出力には、昔からあるトランジスタ1個の非反転レベルシフト回路で処理しました。Arduinoで動作確認OK。

…まぁ、これで終われば半日仕事だったんですが、この後、ちょっと特殊なマイコンを使ったら動作せず。

■対策2-トランジスタとインバーター■

結局、昔からあるトランジスタ1個の反転型レベルシフト回路で1.8 → 5.0vに変換してから、インバーターで反転しなおして、Arduinoでも特殊マイコンでもOKになりました。作業時間合計11時間…バイトなので残業代でませんw

■教訓■

  1. 仕様書にVL, VHなどのごく基本的な資料すら乗っていないチップは使わない。
  2. 推奨回路など寸毫たりとも信じてはならない。そもそも双方向のレベルシフト回路いらねえじゃん、って話。
  3. 「テストポイントを用意しておくかな…でも、こんな基本的な信号で問題は出ないだろう」という判断は甘い。常に甘い。試作は全ラインを引っ張り出すぐらいの勢いが必要。でないと以下のような苦労をします(笑)。

■作業風景■

プリント基板のTxラインをUSB顕微鏡で見ながらデザインナイフでカットして、同じく顕微鏡を見ながら0.5mmピッチのコネクタからスズメッキ線で引き出しました。USB顕微鏡を買ったばかりの頃に試してみたらぜんぜんうまく出来なくて諦めていたのですが、最近背に腹は代えられぬ事態が多く、使っていたら馴れてきました。

やっぱり人間必要に迫られると適応するものです。

コツは、
  1. USB顕微鏡だと立体感がなくて上下方向の動きはよくわからないので…まず裸眼で基板近くまでコテ先やカッターを移動し、それから拡大された画面を見ながら作業する。
  2. USB顕微鏡が動かないように机にしっかり固定する
  3. 顕微鏡のステージに小指を置いて作業する
って感じでしょうか。0603(mm)のチップコンデンサなどで練習するとよろしいです。

また、写真のようなハンダ付けでは、
  1. コテがあたったら溶けてしまいそうな部品にカプトンテープを貼って保護する。その際、テープをピッタリと密着させるのではなく、熱が伝わらないように隙間を開けつつ何枚か貼ること。カプトンテープは熱伝導率が高いのでぴったり貼ると中の物を保護できません。
  2. マスキングテープで誤差0.5mmぐらいの位置にスズメッキ線を仮止めする。基板のパターンとマスクに段差があるので、この段階でピッタリの位置に置くのは難しいです。なので、あくまで仮止め。 
  3. USB顕微鏡をみながらピンセットで正しい位置に完全に合わせてから、マスキングテープをしっかり貼る。最後の0.1mm以下の調整は、スズメッキ線に直接さわるよりスズメッキ線の横からマスキングテープを押さえて調整する方が良いです。 
  4. USB顕微鏡をみながらハンダ付け箇所にクリームハンダを塗る。普段使っているシリンジだと針が太い/細い針だとクリームが出てこないので、マイナスのマイクロドライバーの先にちょこっとつけてから、左にドライバー、右手にピンセットを持って、蟹が食事をするような気分で目的の箇所にハンダを置きます。 
  5. あとはハンダゴテを目的の箇所に当てるだけ 
です。

【追記】カプトンテープはぴったり貼らないでふわっと隙間をもたせて何枚か貼ると良いとのアドバイスをいただき、記事に反映させました。ご教示いただきありがとうございますm(_ _)m【追記終わり】

島津とかモノタロウの立体顕微鏡試してみたいんですが、お試しで買って失敗したらかなり辛いお値段。私が買えるような安いやつはレンタルなんてやってないですし。お友達の歯科技工士さんは「工場落ちのニコンの中古最高」って言ってました。

うーん。でも買うんだろうなぁ…きっと…。

2018年5月11日金曜日

小手先クリーナーを掃除した衝撃映像がこちらです



4年分ぐらいでしょうか。こういう鉛を再利用してくれるところはないだろか。

でも純度低いしなぁ…。

ESP32 LEDCのちょっとめんどくさい話


ledcはESP32のLED用高精度PWM機能です。通常のPWMだけでなく、ledc_set_fade_with_timeとledc_fade_startを使えば自動的に指定秒数でfadeしてくれて大変便利。

使い方はだいたいこんな感じです。



なのですが、逆論理のLED(HIGHで消灯、LOWで点灯する回路)でちょっとハマりました。

通常消灯は
    ledc_set_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, 0);
    ledc_update_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel);
で良いのですが、逆なので、
    ledc_set_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, 1023);
    ledc_update_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel);
と書いてみたらほんのり点灯してます。細い細いパルスが出てるのですね。

1023を1024に書き換えたら治りました。

じゃあ、ってんで、fadeを
    ledc_set_fade_with_time(ledc_channel[ch].speed_mode,
                                ledc_channel[ch].channel, 1024, BlinkDuration);
    ledc_fade_start(ledc_channel[ch].speed_mode,
                                ledc_channel[ch].channel, LEDC_FADE_NO_WAIT);
にしてみたら…StackOverflowくらいましたw 【追記2018年9月7日:esp-idf 3.2では治っています。1024でもエラーにならずきっちり消灯します!】

しょうがないので、fadeは1023を使いましたけども…細いパルスが残っているのか完全には消えてくれません。演出で処理しますけども…やぁねぇ。

写真は、Kickstarterで入手したハンダ付け作業治具PCBite 2.0を使って基板を空中に浮かせている図。さすがに製品を晒すわけにはいかないのでダミーです。ケースなしでテストしているとショートの危険性があるけど、テープで止めたり剥がしたりするのも煩雑…ってんで、基板の端をバネ付きのクリップで挟んで磁石で灰皿に張り付いています。とても便利です。

クリップだけ追加注文しておけばよかったなぁ。SwitchScienceさんで扱ってくれないからし。

2018年5月9日水曜日

空気質+CO2センサー CCS811

空気質センサーとOLEDをESP32に接続し、Ambientで可視化しました。

Strawberry LinuxさんのCCS811モジュールとAdafruitさんのライブラリで何事もなく動作します。Adafruitさん、今度買うからね(AdaとSparkfunさんには購入ノルマを設定して時々お布施しています)。

ただ、ハマりポイントがいくつか。
  1. 電源、I2Cの他にReset(VDDへ)とWake(GNDへ)も接続しよう
  2. 基板裏のアドレス選択ジャンパをハンダ付けしよう(0 : 0x5A)
  3. I2CはGPIO21(SDA)とGPIO22(SCL)
これでサンプルコードは動きます。

さらに、OLEDに値を表示するようにしてみました。OLEDライブラリもCCS811ライブラリも初期化でWire.begin()呼んだりするので、初期化の順番が違うとCCS811がヘソを曲げます。この複数のライブラリが勝手にWire.begin呼び出す問題、なんとかならんですかね。どうせWireはオブジェクト一個なので、ライブラリを使うユーザが自主的に初期化すべし、の方がありがたいのですが…初心者保護でしょうがないのかなぁ…。

で、とりあえずCCS811から読んだ値をOLEDに表示できるようになった…と思ったら、途中で動作が不安定に。CCS811から値が返らなくなり、電源を切るかCCS811のRESET端子を一度GNDに落とさないと動いてくれません。I2Cの処理が干渉しているようで、それぞれの通信後にdelayを入れたら安定して動作するようになりました。あるある。

ついでにAmbientにデータを上げるようにしました。Ambientホント楽。

化学物質過敏症で困っている方に貸し出してしまったので写真はありません。いやー、歩きながらディスプレイ見ていると、時々すっごい値が出てきますね。ちょっと窓を閉めているとあっという間に1000ppmに達します。近くに手を置いただけで600ppmになったり。人間がどれだけ二酸化炭素を噴出しているかがわかります。

TVOCの最高値はとある喫煙室で、6000ppbを記録しました。おおおおお。

ってことで、ソースです。


2018年5月4日金曜日

安いお絵かきタブレットと思いきや

ebayで2000円ぐらいでdrawing tabletが出てまして。


2000円なら、最悪落書き用にでも使えりゃいいや、って買ってみたんすよ。


…LEDライトボックスでした。上の広告写真だとわからないけど、こっち(下)をよく見ると紙をクリップで止めているよね。あははははははははは。


2018年4月29日日曜日

0603のMLCCを手ハンダ

56歳会社員です。秋月で0603(mm)のMLCCが発売されたので買ってみました。


いやー…ホコリですね。顆粒ダシより細かいっす。

普段MLCCを手ハンダ付けする時には逆作用ピンセットを使うのですが、先端太すぎてまったくつかめません。最初の1個はピンセットで掴みそこねて見事に飛ばしてしまいました。さすがのDUMONTでもダメ。安いHOZANの精密ピンセットをルーターで研磨してかみ合わせを調整してから使いました。いやー、ルーターはいい買い物でした。今まで研いだりするのは大の苦手だったんですが、持っているだけで水平垂直に研磨できるので、少し荒い道具を使いやすいように仕上げることもできます。


基板は手元にあったaitendoの0.6mmピッチSOIC用。例によってサンハヤトのクリームはんだを使います。0.6mm間隔で2つクリームを盛るなんてのは無理なので、設置場所の両端を覆うように1mmぐらいのハンダ山を作りました。しまった写真取り忘れた。

ルーペはヘッドルーペではなくアームルーペ(TERASAKI)を使いました。ハンダゴテはHAKKO FX-100です。

基板をマスキングテープ(3M)で固定してから、左手にピンセット、右手にハンダゴテ。ルーペでもほぼ見えませんw MLCCをクリーム山の中央付近で保持します。コテを基板に当て、少しずつクリームに近づけて行って、クリームが溶けたところでコテを離す。これを4方向から繰り返しました。

最後にUSB顕微鏡下ではみだしたところを修正したのですが…コテ太いw



洗浄したのがこちらです。容量を測定したら70nF程度(MLCCは直流では容量が減ります…秋月のWeb参照)で、損傷せずショートもせずに取り付けできました。


電子工作に復帰して初めて表面実装部品(2012)をいじった時は「わしら年寄りはどうすればええんじゃ…」と思ったもんですが、最近は「2012でけーw」とか言ってるんですから、人間は慣れるもんですね(しみじみ)。

2018年4月22日日曜日

セミナーの進行を止める老人、それが私

Fusion 360のセミナーに参加しました。良いセミナーでした(もう1日あるけど)。Fusion 360の操作感や3Dモデルを作っていく流れを習得できるのでみなさんもぜひ。操作も大事だけど流れはもっと大切です。

セミナーに参加するのは久しぶり。

こういう技術系ハンズオンセミナーでは、まず講師が操作をしながら説明をして、それから「では、一緒に操作してみましょう」という流れになる。

ただ、余裕をもって習いたいので、私は最初の説明を聞きながら操作をして「一緒に操作をしてみましょう」のところではメモなんかを書いていたもんでした。若い頃は。

ところが、今回、最初の操作で躓いた。自分が「ごく初歩的な操作で躓いて、セミナーの進行を止める年寄り」になってしまった。ショック。

何でだろうと思ったら、昔は操作しながらでも講師の説明が頭に入ってきたんですが、今は全然耳に入らない。「聞きながら操作」しているつもりがそうではなかった。

それに気づいてからは、ちゃんと講師の説明をガン見してから自分の操作をすることにして、なんとかついていけるようになったんですが(いや、3D CADのモード切り替えや選択方法の違いなどで戸惑うことはありましたが)…自分の老化にビックリです。

で、講師の説明を聞きながら周りを見ていると…毎回進行を止める人は、やっぱり講師の説明を見てないですね。たぶん御本人は、何で自分が操作をわからないのか、わかっていないんだと思います。

かつて自然にできたことができなくなっている、それは良くあることなんですが…できなくなっていることに気づかない、というのは怖いですね。

----

セミナー会場は南千住。遠いです。写真がないと寂しいので、ランチ写真貼っておきます。

ランチってか「やよい軒」ですけどね。かつてご飯を2杯3杯とおかわりしたもんですが、今は1杯でお腹いっぱい。


あと11:22に撮影した写真がこちらです。これで何度目だ。


2018年4月13日金曜日

ESP32+Mongoos OS、入れてみました。

まず、ESP-IDFが正しくインストールされている必要があります。

で、ホストMac/PCに環境を構築します。macの場合はターミナルに3行コピペするだけ。1分もかからず終了し、ブラウザにmongoose os環境が立ち上がります。

mongoose osは、ESP上で動くOS(FreeRTOSベース?)、JavaScriptランタイム、フラームワーク、それらと連携するMac/PC上で動くホストツールなどで構成されています。フレームワークはAWS, Google IoTなど各社クラウドサービスに対応していて、お手軽に使えます。

サーバとなっているツール部分がESPと通信しながら動いているので、ブラウザIDEなのにスタンドアローンアプリ形式のIDEと同様に使えます。例えば、こんなダイアログが出てくるので、ESP32 Dev-CモジュールをUSBに接続するとシリアルポートが選べます。選んだらSelectボタン。


次にプラットフォームと書き込むアプリを選んでFlash。書き込みが自動で始まります。書き込みが終わるとデモアプリ「demo-js」が起動して、じわじわとメッセージを流してきます。


このあとSet WiFiで使用場所でのSSIDとPasswordを設定してSetボタンを押せば接続完了。

楽だなー。ESP32用の開発ツールとして一番よく出来ているかも。

JavaScriptとC/C++も簡単に連携できるし、しばらく遊んでみます。ずっと保留したままになっているニキシー管時計、これで作ってみようかしらw

ESP32 + VisualStudio Code + PlatformIO

マカーだけどいろいろあってVisualStudio Codeを入れてESP-IDFを動かすことに。参考にしたのはこの辺。ありがとうございます。
Install the IDE PlatformIO extension for Visual Studio Code

Windows版VSCだとArudino IDEプラグインが使えるんですが、このプラグインはMacには出ていないようなので、PlatformIOを使います。AtomやSublimeでもPlatformIOは使えるんですが、どうもしっくりこない。

まずVisualStudio Code、Mac版のインストール。ダウンロードして解凍すると.appができるので /Application へコピーし、ダブルクリック。

PlatformIOのインストールは、表示>拡張機能メニューから platformio を探して選びます。


試しにプロジェクトを作ってみます。PlatformIOのHome(画面下コマンド行の家アイコン)をクリックし、New Projectをクリックします。

プロジェクト名を入力し、BoardのところでESP32と入力すると候補が出てきますので、無難にEspressif ESP32 Dev Moduleを選びます。FrameworkはESP-IDFを選び、Finishをクリックすると空のプロジェクトができます。


すると勝手に依存関係が解消されていきセットアップが完了します。PlatformIO偉い。

srcを右クリックして「新しいファイル」を選び、main.cを作ります。適当なコードを入力します。とりあえずesp-idfのexamplesにあるhello_world/main/hello_world_main.cの内容をコピーしました。

シリアルモニタのポートとボーレート設定は、platformio.iniに
monitor_port = /dev/cu.SLAB_USBtoUART
monitor_baud = 115200
を追加。ポートは設定しなくても聞いてきてくれるけど、まぁこっちの方が楽かと。

では、ESP32をUSBに接続し、ウィンドウ最下行の「→」ボタンでbuild&uploadします。最初のコンパイルが長い遅いのはお約束。なお、VSCを再起動する度に再コンパイルする仕様ですが、修正してコンパイルした時は対象ファイルだけコンパイルされます。

コンパイルが終わり、ESP32へのアップロードが始まります。

終わったらウィンドウ最下行の「Monitorアイコン(横向きのACプラグ)」をクリックするとmake monitorが起動します。

なお、シリアルポートを専有するので再度uploadするときにはmonitorを止めなければいけませんが、uploadボタンをクリックすると「monitorタスク止めますか?」と聞いてくれるので安心です。

Windowsは大嫌いですが、MSの開発ツールは嫌いではありません。VSCも良く出来ています。少なくともEclipseよりもサクサク動いてくれる、ような気がしますw 

少なくともArduino IDEよりもかなりマシに使えます(※個人の感想です)。

ただ、ESP-IDFとビルド方法が異なるので、ESP-IDFで作った既存プロジェクトを開くことはできません。開こうとするとplatformio.iniが無いって言われるので適当にコピーして入れて開いても、VSCからはビルドできません。

PlatformIOで作ったらプロジェクトならビルドできますが、標準ツールと違うビルドシステムにするのは少し抵抗があります。

とりあえず、VSC上でターミナルを開き、そこで make flash を実行すれば、ビルドしてくれるんですけども…違う…そこじゃない感が凄いです。

まぁサクサクで落ちないIDEってだけでも十分っす。あとArduinoプロジェクトに関しては、Arduino IDEよりぜんぜん良いですし。

2018年4月6日金曜日

動物の活動状態を記録する@ココナラ

動いた痕跡

うわわわわ

農業試験場の研究員の方からCoconalaにて「条件を変えたときに害虫の行動にどのような影響があるかを記録したい」というご相談をいただきました。

当初のご相談は「(フォトインタラプタを使用して)通路を遮る動きをカウントしたい」ということでしたが、ラズパイを用いた画像による動体検知を提案しました。

赤外線LED、IR Picamera、Raspberry Piだけという大変シンプルな構成です。起動すると指定秒数ごとに差分を求め、全画素のうち何%が変化したかを標準出力に書き出します。オプションとしてウィンドウに画像を表示するか画像ファイルを出力するか、を指定できるようにしました。

プログラムはPython + OpenCVで書きました。当初、よくある動体検知としてBackgroundSubtractorMOGとapplyを使うタイプで試していただいたのですが、結果は少し意図と違っていました。
虫ではなく坊主頭中年体型のわたくし
ということで「背景からどのぐらい変化したか」ではなく単純に前フレームと差分を求めるプログラムに変更しました。とはいえPython不慣れ+OpenCV初心者なので、こちらのコードを参考にさせていただきました。ありがとうございます。

冒頭の画像が演算結果です。害虫がケースの中で動いているところを捉えた画像と飼育環境の写真です。

依頼者の方からは、新しい知見も含めて期待以上の結果が得られたとのご報告をいただきました。日本の農業のために微力ながらお手伝いができて何よりです。

今回のように「こういう観察がしたい」というテーマがあればご相談ください。相談だけなら500円、実装についても公的な研究機関からの公益性のあるテーマであればできるだけお力になりたいと思っています。お気軽にどうぞ。

一応ソースです…間隔指定ではなくwait指定だ、とか、いろいろ突っ込みどころはあると思いますがpython初心者ということでご寛恕いただきたく存じますm(_ _)m

【追記4月11日】
公開当初のソースは背景との差分検知をするものでした。
フレーム間差分に書き換えました。

2018年4月2日月曜日

M5Stack、ちゃんとPDM音が出ますね

命令を見るとtone系なので「あれ、せっかくのスピーカーなのにビープだけ?」って思ったんですが、回路図を見るとGPIO25がアンプ入力につながってます。

ってことで、下記の通り初期化して

void set_16k_16() {
  i2s_set_pin(I2S_NUM, NULL);
  i2s_config_t i2s_config;
  i2s_config.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_PDM);       // Only TX
  i2s_config.sample_rate = 16000;
  i2s_config.bits_per_sample = BITS_PER_SAMPLE;
  i2s_config.channel_format = I2S_CHANNEL_FMT_ONLY_RIGHT;                //right channels
  //  i2s_config.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT;                //right left
  i2s_config.communication_format = I2S_COMM_FORMAT_PCM;
  i2s_config.dma_buf_count = 4;
  i2s_config.dma_buf_len =  1024;
  i2s_config.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1;                    //Interrupt level 1
  i2s_driver_install(I2S_NUM, &i2s_config, 0, NULL);
}

これつかって PCMデータ(符号なし16ビット)を渡すと音声出ますね。

  i2s_write_bytes(I2S_NUM, (const char *)ching, sizeof(ching),   portMAX_DELAY);
  i2s_zero_dma_buffer(I2S_NUM);

2018年3月30日金曜日

ダンボールでないAIYケース


私は不器用なので、ダンボール製のAIYは見事に基板が斜めになってあちこちスキマがorz

これではちょっと家に置いておきにくい、ということで、またCAD頼みで工作しました。


makercase.comで設計してAdobe Illustratorで穴あけ指示を行い、Elecrowでカットしてもらいました。接着剤なしでぴったりと組み上がり、基板ももちろん水平です(笑)。

難点は分解がちょっと大変w

音出してみたらダンボールと違って結構良い音がでます。

【追記】取説

わりと好評だったのでスイッチサイエンスさんから売ってもらおうかと思っていたのですが、MakerCase作者の方とコンタクトが取れません。権利関係がわからないものを売るわけにはいかないので、販売予定はありません。ご了承ください。

以下は商品化のために書いていたマニュアルです。せっかく書いたので貼っておきます。

レーザーカットしたときのアクリルの匂いが凄いので荷物が届いたらまず窓を開けます。

中にはプチプチにくるまったアクリル板と2つのビニール袋とゴム足シートと品質管理/組立ライン用手袋が入ってます。

ビニール袋は白い柱みたいなのがM2.6のラズパイ固定用で底面から順番にネジ|アクリル板|10mmスペーサー|ラズパイ基板|12mmスペーサー|ワッシャー|ナットの順。もう一つ白いのはスピーカー用で外からネジ|ワッシャー|アクリル板|スピーカーフレーム|ワッシャー|ナットの順。

アクリル板から保護シート剥がす前に、底面のどのへんにゴム足を付けるかポンチかキリで印つけておくとずれないです。ラズパイ固定ネジ穴と干渉しないように気をつけること。

あとアクリル板同士をがっちり噛ませてしまうとほぼ外すのは無理(特に6面のうちの最後の2面)になるので、まずどの組み合わせになるのかをざっと並べてみておくこと。ラズパイのコネクタ穴は似通っているので注意。側面パネルは4種類とも違うけど、手前にスピーカーが来た場合、右がSD、左がEther+USB、奥がHDMIその他になります。地板の向きを側板に合わせます。天板はスピーカーの反対側にマイク。いずれも対称軸に注意。

このへんで手袋します。保護シートを剥がすには強めの荷造りテープを貼って剥がすか、目立たない隅っこを尖ったピンセットなどで剥がします。

まず底面の片面の保護シート剥がします(内側)。外側になるシートは全部剥がさずにラズパイ部分だけはがしておいて、ラズパイ取り付けます。向きに注意。ホコリに注意。キムワイプなどで拭いても静電気が強くなるだけなので、エアーブロワーなどで吹き飛ばします。

スピーカー、これは両面剥がして取り付けるほうが良いっすね。スピーカーがずれないように注意。ネジは対角線の位置から締めること。くれぐれもホコリに注意。

スイッチとマイク基板取り付け。マイク基板は3MのW-18という透明両面テープで貼るのがおすすめです。この手袋だとテープの接着面に触っても糸くず等があまり残らないので、素手で扱うよりも楽です。素手だと確実に指紋が付きますからね。

残りのアクリル板、内側の保護シートを剥がしつつ組み立てて行きます。はめるときには水平垂直を維持しながらまっすぐ押し込む方が入りやすいです。というか板が傾いていると入らないです。組み立てながら内側のホコリを取る。

最後の一枚を入れる前にちゃんとブートすること機能することなどを確かめましょう。ピンセット使えば外からSDカード出し入れできますが、配線ミスなどを直そうとしても閉めちゃってからまた開けるのはかなり難しいので。

最後の一枚をはめたら残る保護シートをはがします。ゴム足を貼ります。ゴム足は一度貼ると簡単には剥がれないので一発で確実に貼ります。

完成です。手袋はずして鑑賞して下さい。

ホコリはとにかくものすごく目立つのでご注意を。

2018年3月23日金曜日

Pmod MTDSに一言

MTDS Library Programmers's Reference Manualさん。

word形式なのは許す。

でも目次がないってどゆこと?

もしかしてwordで開くと目次出てきたりするんだろうか。

いずれにしても、もう一生Pmodは買わない。

2018年3月19日月曜日

超低価格大容量SPI Flash(ただし遅い)

【写真】予備を作ると壊れもせず一発で動く…私はそういう星の下に生まれた男だ。

W25Q32FVSSIGっていうチップを入手しました。SPI接続のフラッシュメモリです。

結論として、消去がやたら遅い(6秒程度)ので別タスクで消す等の処理は必要ですが、4MBのストレージが約50円しかも1.27mmピッチのSOICパッケージというのは扱いやすくて良いんじゃないでしょうか。

digi-keyなどでは生産中止品扱いなのですが、中国でセカンドかサードソースかコピー品が生産されているのでしょう。

■準備■

とりあえず使ってみる場合、「Arduino チップ名」か「ESP32 チップ名」でググってみると何かライブラリが出てきます。安心して配線しましょう。

SOIC、手元に変換基板がなかったので秋月のSOP8用で代用します。パターンが足の下に隠れてしまうので手ハンダではなくリフローしました。最近0.2mm間隔のチップを相手にしていたので、1.27mmなんて鼻歌です(表面張力のおかげですが)。

何度でも書きますが、自宅リフローにつかうクリームハンダはサンハヤトに限ります(笑)。これはハンダの粒子もきめ細かいですしパターン乗りもよく本当に扱いやすいです。フラックス活性が高いのかなんだか知りませんがボールなどが発生しにくいです。価格はわりと高いんですが、どうせ有効期限内に使い切れないので丁度いいのです(笑)。

Arduino IDEでESP32を選び、Library Managerで「SPIFlash」と入力するといくつかヒットしますが、とりあえずPrajwal Bhattaram氏作のSPIFlashを選びます。接続する前にESP32にFlashDiagnosticsを書き込んで起きましょう。ESP32への電源を切ってから以下の配線をします。

接続はESP32としては標準的なSPIの接続です。SOとSIはプルアップしていません。

ESP32W25Q32
IO051 CS
IO192 SO
3V33 WP
GND4 GND
IO235 SI
IO186 SCK
3V37 HLD
3V38 Vdd

■動かしてみて■

消去がものすごく遅いです。4MB消すのに6秒かかります。
Erase Chip: Data I/O test PASS Time: 5.967 s
Erase 64KB Block: Data I/O test PASS Time: 158.449 ms
Erase 32KB Block: Data I/O test PASS Time: 120.735 ms
Erase 4KB Sector: Data I/O test PASS Time: 91.357 ms

このチップ、こんなに安いんですが、100,000サイクルの消去が可能って書いてありますので、Wear Levelingは行われているみたいですね。小さい廉価品なのに大したもんだ。

【追記2018年9月5日】セクター(256bytes)で同一アドレスにひたすら消去・書き込み・読み出し…を繰り返す実験をしたら100万回越えてもエラー出ませんでした。約150万回で初めてエラーが出ました。テスト前にも相当使っていましたのでもうちょっと長いかもしれません。個体差もあるのでこの結果が保証されるというわけではありませんが、少なくとも仕様の10万回は問題ないと言えるでしょう【追記終わり】

読み書きはuSの単位なので普通に使えそうですが…Flashは消去してからでないと書き込みができない宿命なので、別タスクでメモリ消すとかリングバッファ的に管理して使う必要があります。あと、64KBずつ消すと10秒近くかかってしまいますが、一括消去だと6秒で終わるのも注目点ですね。まぁ「たかが二倍」とも言えますが。

アルゴリズムとしては1ブロック64KBとして状態を示すフラグを64個の配列にしておき、それぞれが使用中か消去済か消去要求か消去中か…を示すようにして、消去用タスクの中でループで状態を監視し、消去要求のブロックがあれば消去中に変更して消去を実行し、完了後消去済みに書き換えてから次のループ…という形でうまく動きました。タスクを使う場合は競合などに配慮する必要がありますが、この場合はタスクごとに変更可能な状態を制限しておくことで回避することができます。

使用したいブロックが消去済より少ない場合にはランダムにスキップしてやればある程度消耗度を分散させることもできます。使用中フラグは正の整数ということにして次のブロック番号を指すようにすれば簡単なシーケンシャルファイルを実装できます。

なお、Prajwal Bhattaram氏のライブラリはGNUなので、実際の装置に組み込む場合には注意が必要です。

私は例によって書き終わってからこれに気づいたので、自分で書き直しました。SPI Flashを扱うことのできるライブラリはいくつかあるんですが、みんなGNUなんですよね。幸い処理は比較的簡単です。

私が書いたやつは、そのうちお掃除したらApacheかなにかで公開します。

ESP32でI2Sから音を出す・その2

その1の方法だと再生が終わるまで帰ってきてくれないので、音が出ている最中に止めたり他の音に変更することができません。そのヘン改良したのがこちらです。

なおこちらはKickstarter製品で使ったコードの一部です。

setupではI2S関連の初期化と音を出力するためのタスクsound_loopを準備しています。

loopでは割り込み要素として加速度計を使っていて、3軸合成加速度が平均値(ほぼ重力)を一定以上越えたら音を出力するフラグsoundOnを立てます。

sound_loopではループをぐるぐる回って、大きな加速度を検知してsoundOnがonになったら音源番号iSoundを変更して再生位置iを初期化し、内側のループでi2s_push_sampleを使って1音ずつバッファにプッシュし、音を出力します。再生が終わるか、音源番号が変わったらループを抜けます。

内側のループにはウエイトを入れていないですが、DMAバッファがいっぱいになるとi2s_push_sampleで止まるので、大丈夫っぽいです(ポイかよ)。

まぁこんな感じで…。


2018年2月24日土曜日

NTT関連の電話料金を調べる

先日インターネット回線を取り替えたときに、我が家には数年間使われていないADSL回線があることが判明しました。

どうも元々のADSL回線を速いADSLに契約変更をした時に、古い契約が解除されていなかった模様。

解除するには電話番号 / 回線番号が必要だけど、クレジットカードの引き落としには「99月99日 NTT東日本(99月分) 9,999,999円」としか書いてない。電話番号はともかく昔使ってたインターネットの回線番号なんてわからんがな。

ってことで、ちょっとたらい回しになりましたが、なんとかわかりました。私は昔ちょっと会社をやっていましたが、その名義のままだったりかみさん名義の回線があったりで大騒ぎでした。

調べ方としては、まずNTTファイナンスに電話(0800-3330111:フリーダイヤル)して、本人確認などの後、クレジットカードの名義、カード番号、何月分の金額がいくらか、ということを伝えます。その場ですぐにはわからないので折り返し電話をもらいます。これで電話番号 / 回線番号を教えてもらえます。

次にNTT東日本に電話します(これもフリーダイヤル)。番号がわかれば簡単。本人確認と契約者名義(複数あるのでこれ?それともこっち?といくつか並べてもOK)と番号を伝えると、その回線の契約内容を教えてもらえます。これでようやく今使っていない回線が判明しました。完全に前のADSL担当のミスじゃねーかよ(苦笑)。

あとは、解約手続きです。何故かその回線の名義がツマだったので、ツマから連絡してもらいます。いやはや。

今回、116担当の方には本当にしっかりとサポートしていただきました。なんとか調べる方法がないか相談したところ、こういう方法があるということを教えてくださり、NTTファイナンスの担当さんに電話を直接転送して、結果として解決することができました。

…しかし、数年間数千円ずつ払いつづけてきた料金は戻ってこないんですよね。ざっと30万円ぐらいです。しくしく。

あと、電話だと本人確認の後で教えてもらえるのですが、私は聴覚障害者で電話できず、Webで調べたりしたものの文書のやり取りが必要で遅々として進みませんでした。しかし、iPhoneとBluetoothと接続可能な補聴器Widex Beyondを使ったので、普通の人と同じように電話できるようになり、数時間で解決できました。私は補聴器なしだと「いち」と「はち」、「さん」と「よん」を聞き分けできないレベルの感音障害なので、この補聴器なしだと例えば電話番号を教えてもらうのに一桁ごとに「えー? 2ですか? ツー?」てな落語のようなやり取りをしなければいけないんですが、先方がプロの電話仕事人ということもあってか、実にスムーズに会話できました。

補聴器変えた直後は耳に合わずに苦労したのですが、周波数特性などを念入れに調整していただいたおかげでここまで便利になりました。補聴器の調整にご尽力くださった眼鏡市場吉祥寺店の店長さん、心よりお礼申し上げます。

PmodMTDSループ



ちょっとマルチタッチ液晶ディスプレイでデモを作りたくて、PmodMTDSを物色

→事前にArduinoのサンプルがビルド通ることを確認。ソースを見ても他CPUへの移植はそんなに難しくなさそうだなと判断して注文

買ったのはShield版ではないですがArduino unoで動きました。

デモを動かすには別途microSDカードが必要です。

配布されているFAT32でフォーマットしたSDカードにダウンロードしたArduino版ツールを解凍するとDocumentation, Libraries, Resources, Sketchesフォルダがあります。

Resources下にある2つのフォルダごと画像をコピーしてmicroSDのルートにコピーして、MTDSにセットします。

もしArduino IDEが起動していたら終了し、Arduinoのlibraryフォルダの下にMTDSというフォルダを作り、その中にLibraries下の2つのフォルダの中身をコピーします。

Sketches下の.pdeを.inoにrenameしてダブルクリックすればArduino IDEが起動します。念のためですが、結線前のArduino unoにコードをダウンロードしておいてから結線します。

MyDispDemo1は表示だけ、2は読み込み後☆をタップすると画像が変わる、3は待ち時間wheelを表示した後でボタンをタップすると画像が変わる。3にはチェックボックスっぽいボタンが表示されているのでいろいろ期待しちゃうんだけど、ただのデモみたいっすね。

あmicroSD上の画像の処理はぜんぶPmodMTDS上で行われます。でも画像の書き換えは遅いですね。書き換えているところが目に見えます。MTDS上のCPUはPIC32なのでそんなに遅くないはずなんですが。

あとでArduinoより速いCPUでも試してみようと思ってRaspberry pi用のPmodHATも注文してしまったんですが、無駄になっちゃいましたね…。

以下はPmodMTDSとArduino unoとの結線図。

PmodMTDSArduino uno
P1 : ~CSdigital 10
P2 : MOSIICSP4 : MOSI
P3 : MISOICSP1 : MISO
P4 : SCLKICSP3 : SCK
P5 : GNDGND
P6 : VCC3V3
(下段 : NC)


2018年2月10日土曜日

ArduinoでSG90をゆっくり滑らかに動かしたい(失敗)



サーボSG90を20度/秒ぐらいで滑らかに動かしたいと思ったのですが、どうも難しいです。割り箸をホットボンドで接着するといういかにも共振したりハンチング起こしそうな条件ではありますが。

試行錯誤としては、
  • Arduino標準のServoライブラリのexample
  • 同じく、値を変えるごとにdetachしてdelayし再度attach
  • ESP32のLEDCを使って15bit PWM
  • ESP32 / Arduino unoでdelayMicrosecondsを使って正確なパルスを出す
などを試みたのですが、いずれも動画のようなブルブルっぷりでした。強いて言えばLEDCを使ったものが一番良かったですが、やっぱり震えます。今回使ったのはSG90のパチ品です。本物あるいはもっと高価なサーボを使えば滑らかに動いてくれるのでしょうか?

うーむ。

一応LEDC版のソースです。delayは「次のPWMパルスが出そうなところでledcWrite命令を出すとパルス列がコケるのではないか?」ということで一つだけ出るようなタイミングにしてみたりPWM周期を変えてみたりしましたが特に大きな変動は見られません。

こっちはdelayMicroseconds版。

2018年2月5日月曜日

Arduino nanoで肩こり対策デバイス・その2


■原理■

同僚さんから、「肩こりがひどいので電子工作で何かできないか」というご相談をいただいて作ってみたシリーズ第二弾です。第一弾は首肩の傾斜で振動するパターンでした。

今度は「ふと気がつくとモニタに近づきすぎている。近づいたら警告を」というデバイスです。モニタの上端に貼り付けて使います。

距離計測は超音波とToFを試してみたのですが、超音波は人間の顔だとあまりうまいこと検出できず、手持ちのToFは計測レンジが微妙に遠くてNG。シャープの赤外線距離測定デバイスを使うことにしました。

■製作■

Arduino nanoのパチを使いました。

距離センサー

表示にはNeoPixels / WS2812b的なLED

回路は、それぞれのGND同士をつなぎ、ArduinoのVinとセンサーとNeoPixelsの電源同士をつなぎます。距離センサーは最大約2.8vのアナログ出力なのでアナログ入力A0、ArduinoのA1とNeoPixelsのDinをつなぎます。

今回、0.19mmのエナメル線で配線しました。ワイヤリングペンも作ったので、GND-GND-GNDとつながるような場所が大変楽です…と言いたいところですが、所要時間的には架橋ポリエチレン被覆線とあんまり変わらなかったです。



ワイヤリングペン、シャープペンに通すのに例によって30cmほどに切ったワイヤを先端から差し込んで後ろの本体と接合して引っ張り出す作戦を取りました。が、前回は0.3mmだったので突き合わせでハンダ付けできたのですが、今度は0.19mm、さすがに細くて無理だったので、瞬間接着剤使いました。この時期は空気が乾燥しすぎていてなかなか固まらないので困ったもんです。今度、接着促進剤ってのを使ってみたい。

見た目は悪いけど使い勝手は良いですw


■プログラム■

起動したら、5秒間距離を計測して平均値を取ります。これが基準値で、これより近づいたら=値が大きくなったらLEDを点灯させます。

loop()ではanalogReadからの値を簡易的な移動平均処理で測定誤差をツブして無駄なチラツキを減らしています。距離センサーからの値は最大で500ぐらいなので、上記の平均値と500との中間点までは黄色、それを越えて近づいたら赤で点灯するようにしました。


2018年1月31日水曜日

補聴器の医療費控除

■補聴器代金を医療費控除する■

わりと著名なサイトに「処方箋が必要」と書かれていたので耳鼻科でそうお願いしたところ「処方箋なんて無いですよw」と言われました。

改めて、武蔵野税務署の窓口で相談してみたところ、まず、医師で聴力検査を受けた上で診断書(仕事をする上で必要なので、重度・高度難聴用の補聴器を購入する必要がある云々)を書いてもらい、その上で補聴器を購入し、他の医療費と一緒に医療費明細書(平成30年から医療費の領収書は不要になりました)に記載して、翌年の確定申告で申告する、とのことでした。

ついでに補装具費支給制度での支給を受ける場合、通常は片側のみ(1個のみ)についての支給なのですが、両耳装着によって言語明瞭度が上がるなど計測結果を添付するか、仕事の都合上両耳装着でないと業務に支障をきたす、等の事情がないと認められません(1個分のみの支給となります)。私はまだ現役の技術者であり、会議で聞き違いなどのリスクを避けるために少しでも明瞭な聞こえが必要なこと、取引先などと打ち合わせをする際に片耳だけ補聴器を装着して身体を斜めに突き出して聞き返すような形になるのは失礼なので両耳に装着する必要があること、などを記載して申請しました。

判定の結果がどうなるかはわかりませんが(追記:両耳装用が必要と認定されました)。

いずれの場合にも自治体により運用が異なる場合がありますので、医療費控除については税務署の相談窓口、補装具費支給制度については自治体の障害者福祉課などに、まず相談しましょう。

そして、医療費控除では診断書、補装具費支給制度についても医師により意見書(用紙は自治体の窓口で)が必要です。診断書と意見書が必要である胸を指定耳鼻科の窓口で伝えて診察と聴力検査を受けて、交付してもらいましょう。私の行った耳鼻科では診察1,900円、意見書と診断書がそれぞれ2,000円でした。

以上ご参考になれば幸いです。

2018年1月24日水曜日

ストレートネック矯正デバイスw

パチDigiSpark。小さいよかわいいよ。

同僚さんからストレートネックから来る肩こりに困っているので何とかなりませんか?と依頼。さくっと作ってみました。
追記

■原理■

本当は加速度センサーを2個以上使って頚椎の屈曲ぐあいを計る必要があるんですが、簡易的に頭が前傾しすぎたら警告を発するようにしました。起動から5秒間の平均値を求め、それ以上前傾したらダメ!です。

今回のユーザはメガネさんなのでメガネにセンサーを取り付けることにして、ポケットに本体と振動モータと電池を入れられるようにしました。

■構成■

マイコンとしてATTiny85のDigiSpark、センサにはADXL345(オーバースペック)、通知には秋月の振動モータ、ドライブは2SC1815です。振動モータは振動モータにしておくのがもったいないブラシレスです。ドライブ回路内蔵なので、電流制限抵抗省略、多分クランプダイオードも入ってるだろ、ということで外付けは省略。気になる人はちっこいダイオード付けておきましょう。

電源はモバイルバッテリを使いましたが、アイドリング中の消費電流が小さいのでバッテリ側で勝手に電源をオフにしてしまいます。幸い、SANYO KBC-L3S(絶版)は微小な電流でも切れないので、今回はこれを使います。cheeroのIoT機器用バッテリもこういう用途に使えるはずなのですが、ずっと欠品のままで3ヶ月です。このまま発売停止なら何か作るんだけど…出るのかでないのかはっきりしてくれい>cheero

回路図途中まで書いたけどKeynoteとEagle混合だとうまくいかず挫折orz
(あかん)


ということで配線図。

DigiSparkADXL3452SC1815モータ
5VVcc+
GNDGNDE
PB0SDA
PB2SCL
SC→5.1k→5V
SDO→5.1k→GND
PB1B(1kΩでPB1接続)
C-

CSをプルアップ(1608使用)
SDOをプルダウン(でかい)

プラスに配線、マイナスにコレクタ、ベースに1kΩと緑、プラスに赤、エミッタに黒

■追記:続編■

モニタからの距離を測定するバージョンも作ってみました。

■制御プログラム■

探すと見つかるインターネット。まず、これでADXLとDigisparkがちゃんとつながっていることを確認します。y方向に傾けるとオンボードのLEDが着いたり消えたりすればOK。

以下、
  1. 起動したら0.1秒 x 5秒間、X軸方向の加速度(傾斜)を検出し平均値を求める
  2. 平均値取得が終わったら0.1秒振動モータを回す
  3. それ以降、平均値より前傾したら振動モータを回す

だけです。つまり、メガネのツルなどにこの装置のセンサー部分(ADXL345)を取り付けて、「これ以上首を傾けたらダメ」な状態でバイブレータが鳴るまで5秒間静止します。

その後は、普通にお仕事をして、鳴ったら姿勢を改める、という仕掛けです。

なお、傾斜スイッチと振動モータと電池だけでいいじゃん、というツッコミを禁止します。


2018年1月8日月曜日

ESP32でAlexa日本語対応



Facebookで、ESP32からAlexaと日本語でやり取りできた、という記事を見かけたので試してみました。

■資材■



なお、ESP-IDFが必要です。


■作業■

https://github.com/MrBuddyCasino/ESP32_Alexaに書いてある通りですが:
  1. Githubに書いてあるとおり配線
  2. その他、GNDと3.3vも配線。しっかり確認。
  3. プログラムをGithubからcloneします。適当なディレクトリに移動し
    git clone https://github.com/MrBuddyCasino/ESP32_Alexa.git
  4. cd ESP32_Alexa
  5. github上に不足しているコンポーネントを取得します
    git submodule init && git submodule update
  6. ESP32のMACアドレスを取得。例えばこの辺のサンプルを使います。
    https://ht-deko.com/arduino/esp-wroom-32.html
  7. Alexa Authenticationを取得。Githubに書いてある通りです。
  8. make menuconfig -> Alexa ConigでSSID, Password, API Endpoint(US), Language(en-US), Anthentication Token(上記7で取得したtokenをそのままコピペします)を設定。Serial flasher conigなども設定。
  9. ESP32をUSBと接続
  10. make flash

wifiにつながって正常に起動するとスピーカーから「けけけけけ」みたいな声が聞こえます。「alexa, good morming」と呼びかけてみましょう。何かごちゃごちゃ言われます。

すっげー!

以上確認できたら日本語化します。この辺の記事を見ると、サーバ側だけでなくローカルにもLocale設定があるようで、
とりあえずGithub上で"en-US"でテキスト検索してみると、main/Kconfig.projbuildで設定している様子。なので、ja-JPが選択できるようにKconfigを変更してから、menuconigでlocaleを変更します。
  1. 設定ファイルをいじります。main/Kconfig.projbuildを開きます。
    • 以下の2箇所にja-JP / ALEXA_LOCALE_JA_JPを追加します。
      • choice prompt "Language"
      • config ALEXA_LOCALE
    • 以下の2箇所にALEXA_ENDPOINT_FE / "https://avs-alexa-fe.amazon.com"を追加します。
      • prompt "API Endpoint"
      • config ALEXA_ENDPOINT
  2. make menuconfig -> Alexa ConigでLanguage(ja-JP)を選びます。
  3. https://alexa.amazon.comで住所などを設定
  4. make flash

「けけけけけけ」が聞こえたら、「アレクサ、おはよう」と呼びかけてみてください。1月8日は、ホーキング博士についての紹介があります。



…って書くと簡単なんですが、alexa.amazon.comに住所設定してもうまくいかないし、ja-JPを選択するととたんに返事しなくなったり…大変でした。alexa.amazon.co.jpに設定しないとダメとか両方に設定があると動作がおかしくなる、等の情報もあって右往左往しまくりでした…。

■追記■

END_POINTはUSのままでも動作しますが、facebookに紹介されていたので加筆しました。情報を提供してくださってありがとうございます。お陰さまで連休中の作業が無駄になりませんでした。

あと、しばらく放置していると突然「けけけけけけ」と哭きます。大変不気味です。ログをみたらExceptionを吐いていました。Exception->再起動->起動して「けけけ」ってことですね。あんまり気持ちのいい声ではないのでビックリしました。

2018年1月4日木曜日

Amazon FreeRTOSを試してみたけれど


ターゲットへの書込みはうまくいってWiFi接続もできたんだけど、そこから先がうんともすんとも進まない。

ダメならダメでエラーメッセージ出して欲しいっす。タイムアウトなんて贅沢は言いません、せめて今何を待っているのか教えてください。