カテゴリー別アーカイブ: technology

ATmega32U4をMacから使う


ATmega32U4 Mac

ATmega32U4 Mac


ATmega32U4マイコンボード

このボードはスイッチサイエンスで販売しています。 ATmega32U4 価格も比較的低価格でArduinoのように使うことができるマイコンボードです。最大の特徴はキーボードやマウスとして認識されるデバイスを作れることです。Arduino Leonardでも同じ事ができるらしいのですが、価格がこちらが安いので気軽に使えます。 ただしMac OSから使う場合にはちょっとクセがあります。ここに解説のページがあるのですが、Macユーザにはあまりやさしくありません。というわけで、その手順を紹介します。コードを書くにはArduino IDE(ver. 1.6.5)を使いました。

書き込みソフトウェアの準備

プログラムの書き込みはArduino IDEからは出来ません。terminalから行う必要があります。さらに標準では入っていないコマンドを使うので、そのコマンドをインストールすることから始めます。 「Macへのdfu-programmerのインストールはhome-brewで」こちらの記事が参考になります。 Home-brewを使いdfu-programmerをインストールすることになります。 Home-brewを入れていない場合はこちらを参考にしてインストールしてください。 インストール後はbrewコマンドでdfu-programmerをインストールします。インストールするためのコマンドは次のようになります。 $ brew install dfu-programmer コードを入力してreturnキーを押すとコマンドが実行されます。なんか色々と表示されますが、インストール完了したっぽいメッセージが表示されればインストール完了です。

サンプルプログラムを書き込む

マイコンボードに書き込むサンプルプログラムをスイッチサイエンスのサイトからダウンロードします。サンプルプログラムはこちら(http://trac.switch-science.com/wiki/32u4bb)のページにあります。このページの「お試しファームウェア」というところにリンクがあります。そのページを開くとhexファイルの中身が表示されます。ページの一番下に「Original Format」というリンクがあるのでそこからhexファイルをダウンロードします。ダウンロードしたhexファイルを適当なフォルダに入れます。 ターミナルでそのフォルダに移動します。例えばデスクトップにHelloArduino.hexを保存したのであれば $cd これで自分のホームディレクトリに移動します。Finderで見ると家のアイコンのフォルダの事です。

スクリーンショット 2016-07-04 7.00.50

私の場合は上図のmkbtmというフォルダ(ディレクトリ)。 $cd Desktop「リターン」 でDesktopに移動します。 $ls でファイル一覧を表示します。先ほどダウンロードしたHelloArduino.hexが表示されているはずです。 最初にATmega32U4に書き込まれているプログラムを消去します。USBケーブルで接続します。すでに文字を出力するプログラムが書き込まれているとターミナルの画面に勝手に文字が表示されてしまいます。その時にはボード上のリセットキーを押します。リセットボタンを押すと一定時間ボードが停止します。そのすきにプログラムを書き込みます。 次のコマンドで現在書き込まれているプログラムを消去します。 $dfu-programmer atmega32u4 erase 消去に成功するとそれらしいメッセージが表示されます。エラーが起きるとERRORとか表示されます。protectがどうのこうのと表示されたらforceオプションをつけて消去します。 $dfu-programmer atmega32u4 erase –force 消去後に新しいプログラムを入れる事ができます。 $dfu-programmer atmega32u4 flash HelloArduino.hex でプログラムを書き込む事ができます。1秒ごとに文字列が入力されます。

Arduino IDEで自分のコードを入力する

次にコードをArduino IDEで作りコンパイルして自分独自のプログラムを書き込んでみます。 とりあえず以下のようなコードを書きます。 スクリーンショット 2016-07-04 7.15.16 スイッチサイエンスのサンプルとして載っているものとほぼ同じです。違いがわかるように出力される文字の最後に「?」をつけてみました。ボードの種類はArduino Leonardにしておきます。他でも良いのかも? スクリーンショット 2016-07-04 7.16.58 Arduino IDEの検証ボタンをクリックしてコンパイルします。これでhexファイルが作られたのですがファイルの場所が非常にわかりにくいです。私の環境では次の場所になりました。 /private/var/folders/hp/hzg1s7hn1lv5l4yvxj3mlh380000gn/T/build861154714147673710.tmp/ 途中の英数字を羅列したようなフォルダ名は何の事かわかりません。人によって違うものかもしれません。とりえず上記のフォルダに移動します。 $cd /private/var/folders/hp/hzg1s7hn1lv5l4yvxj3mlh380000gn/T/build676234921307526154.tmp/ $ls でファイル一覧を表示させてみましょう。つぎのような画面になると思います。 スクリーンショット 2016-07-04 7.27.06 ATmega32U4test.cpp.hexが目的のファイルです。Arduino IDEでの保存名+.cpp+.hexというファイル名になります。 $ dfu-programmer atmega32u4 flash ATmega32U4test.cpp.hex で書き込みます。書き込んだ後は一度USBケーブルを抜いて挿し直す必要があるようです。 ちなみにキーボードのカーソルキーと同じ動きをするためには次のようなコードになります。カーソルキーの上と下に相当するキーコードをボードから送信しています。

スイッチサイエンスの商品説明ページにはシルク印刷が間違っているとの記述がありますが、現在は直っているようです。内部にプルアップ抵抗が入っているのでINPUT_PULLUPを指定すると外部に抵抗をつける必要がありません。スイッチをつけてGNDに落としてあげましょう。

万能投影機 Nikon V-12とRhinocerosをArduinoでつなぐ


時計作り・修理ではすでにある部品と同じ形状の物を作る必要があります。既存の部品を採寸して作るわけですが、その工程で3D CADと万能投影機を連携させて使ってみました。まずは結果からご覧ください。下の写真の左がオリジナルの部品、右が今回切削加工して作った部品です。3mm厚の真鍮板をCNCフライスで切削加工して作りました。軸受けになるルビーの受け石を入れる前の状態です。IMG_4853

万能投影機Nikon V-12とXYカウンタSC102です。測定したい部品を微動テーブルの上に乗せて使います。微動テーブルのリニアエンコーダにカウンタがつながっており1/1000mm単位で座標値を表示します。万能投影機はテレセントリック工学系で歪みが無く、真上から撮影した像をスクリーンに投影します。周辺部分も歪みが無いのでスクリーンに定規を当てて測定することも可能です。下の画像ではちょっと見にくいですが、スクリーン中央にはヘアラインの十字線が入っています。このヘアラインに読み取りたいポイントを合わせ、カウンタの座標値を読み取るという手順です。ただ、座標をメモにとってCADに入力するという事をすると手間と時間が非常にかかります。そこでこの工程を半自動化します。カウンタSC102の背面にポートがあってそこから座標値が出力されています。出力形式は7セグLEDに表示をしている数値をそのまま出力している感じで独自形式です。この出力形式はSC102のマニュアルに載っています。IMG_4859

SC-102から出力される信号を扱いやすい形式にしてパソコンに入力するための基板です。Arduino Megaを使いシールド(拡張基板)として製作しました。フラットケーブルはSC-102のコネクタにつながっており、USBケーブルはパソコンにつながります。電源はUSBバスパワーで動作します。表面実装のLEDとスイッチが付けてあります。スイッチは値の確定(出力)用が一つとモード切り替え用として7個付けてあります。今回のテストでは右端のスイッチを出力用として使っただけです。(簡単に作れるようにスイッチを表面実装にしましたが、スイッチは外部につなげるようにしたほうが良かったです。)回路は単純にフラットケーブルから来る信号をデジタル入力に接続しているだけです。IMG_4868

さてここから本番。Arduinoで受け取った信号をArduino内部で数値に変換します。一桁づつ受け取った信号を文字に直して、それをくっつけて数値に変換するといったような処理になります。そしてその信号をシリアル通信で出力します。出力した信号はパソコン側で受信しますが3D CADソフトRhinocerossを使います。Rhinocerossのplug-inにGrasshopperというものがあります。このplug-inは数学的な処理により図形を作り出したり人間では困難な繰り返し作業をやってくれるものです。プログラミングが必要になりますが、部品をワイヤーで繋ぐ感覚でGUIでプログラムを作ることができます。このGrasshopperで動作するFireflyという機能があります。このFireflyはArduinoからシリアル通信でデータを受け取ることができるものです。これを使いArduinoから来る信号をRhinoceross上で扱うことが出来るようにになります。下図がそのプログラムです。大雑把に機能説明をすると、ポートをオープンして受信したデータをセミコロン(;)で行に分解、そして各行をカンマ(,)で区切ってXとYの座標値として取り出します。それを3次元の座標値に変換して点をプロットする、というものです。点に変換する作業は下図の右下にあるC#のスクリプトで行っています。スクリーンショット 2016-01-05 18.29.10

読み取り作業中の様子。座標を読み取りたいポイントに合わせて出力スイッチを押すという作業を繰り返します。IMG_4865

点がプロットされました。
スクリーンショット 2016-01-08 8.54.54

読み取った点を元に円にしたり、直線でつないで輪郭を作成します。読み取り精度ですが万能投影機の性質上透過光で読める穴や外形は非常に高い精度で読み取ることができます。反射光で読み取る段差部分はピントをどこに合わせるのかといったノウハウがあり操作者次第といったところがあります。スクリーンショット 2016-01-08 11.04.54

平面図を元にして立体にします。万能投影機では厚さの測定は出来ないのでマイクロメータで測定した値を使い立体にしています。この後、RhinoCAMで切削パスを作成してCNCフライス盤で切削します。スクリーンショット 2016-01-08 12.08.22

3mm厚の真鍮板から切削します。IMG_6307

切削の終わった様子。4mmと1mmのスクエアエンドミル、0.5mmのボールエンドミルで加工しました。IMG_6309

そして切削が終わった部品。これで片面の切削が終わった状態です。この後、裏面の切削を行います。裏面の切削はこの部品がはまる治具を切削しこの部品をそこにはめ込み切削を行います。
IMG_4856
裏面の切削後に元の地板に取り付けてみました。軸受けになる石を入れていないので動作チェックはしていませんが、目視と部品を取り付けの時の感触ではオリジナル部品と変わるところはありません。上面は捨て板に接着した状態のままの未仕上げ状態です。この後に磨いて表面を仕上げる工程へと入ります。
IMG_6325

万能投影機 Nikon V-12の購入と設営


独立時計師の標準装備品(?)万能投影機を購入しました。IMG_4333新品は買えないので当然中古品です。ヤフオクで即決価格で出品されたものがあったので速攻落札です。落札したは良いのですが問題は万能投影機の重量です。100kgぐらいあります。配送方法も西濃運輸の営業所止め、自分で取りに行く必要があります。さらに設置する場所は自宅の2F。ひとりで二階まで上げて設置する必要があります。設営までの記録です。 続きを読む

ESP-WROOM-02 Arduino UNO シールド


ESP-WROOM-02を使ったAruduino UNO用のシールドを作成しました。Arduino UNOに挿して簡単に無線LANを使えます。ピンの10と11をソフトウェアシリアルで使っていますが、それ以外は普通に使う事が可能です。+5VやGNDもブレッドボード用のワイヤーで繋げる様にピンソケットを付けてあります。3.3Vのレギュレータのピン配置を間違って部品が立体配線になってしまってますが、次期バージョンでは修正します。
IMG_4338

続きを読む

Arduino UNOでインターネット上の情報を取得する


Arduino UNOとESP-WROOM-02を繋いで通信が出来る様になりました。過去記事については以下を参照してください。

Arduino UNO + ESP-WROOM-02(ESP8266)

Arduino UNO + ESP-WROOM-02(ESP8266)

これでhttpサーバから情報を入手する事が出来ますが、そのままwebの情報を読み取るとArduinoのとっては情報が大き過ぎて扱いに困ります。そこで、必要な情報だけを送信するようにPHPを処理を行います。まずは単純なPHPをサーバに設置してテストします。

続きを読む

ESP-WROOM-02とArduino UNOでhttp通信


Arduino UNOとESP-WROOM-02をSoftware Serialで接続します。ESP-WROOM-02は前の記事で9600bpsに通信速度を設定してあります。Software.Serialを使いATコマンドを文字列として送信すれば良いのですが、通信の様々な処理を考えるとライブラリを使った方が楽です。

ITEADLIB_Arduino_WeeESP8266

こちらのページからDownload ZIPでファイルをダウンロードしてきます。

Arduinoのポートは5V、ESP-WROOM-02のポートは3.3Vです。そのため5Vと3.3Vの変換を行うロジックレベルコンバータが必要になります。秋月やスイッチサイエンスで商品としてありますが、できるだけ小さくしたかったのでBSS138を使い自作する事にしました。参考にした回路図はコチラ。感光基板で基板を作成して部品をハンダ付けします。BSS138は秋月で購入。NchチップMOS-FET BSS138

基板はCADを使うまでもないのでAdobe Illustratorで作りました。抵抗は10KΩの2016サイズ。パターンは下図の通りです。PDFを印刷して透明フィルムに印刷して感光基板で作れます。表面実装なので、字が反転しています。基板になった時には正常な向きになります。LVが3.3V、HVが5Vになります。

続きを読む

ESP-WROOM-02の通信速度の設定


前回の記事ESP8266 (ESP-WROOM-02)を使う でESP-WROOM-02とシリアル通信でATコマンドを送りアクセスポイントへのアクセスまで行いました。次にArduinoとの接続を行います。ArduinoとはSoftware Serialで繋ぐ事にします。Arduinoの標準通信ポートはプログラムの時に使うので他のポートでESP-WROOM-02と通信した方がデバッグが簡単になります。しかし、ここで一つ問題があります。ESP-WROOM-02の標準通信速度は115200bpsです。ArduinoのSoftware Serialは115200bpsでは通信出来ないようです。
SoftwareSerial: begin(speed)を見ると115200bpsでも通信できると書いてありますが、試した所できませんでした…

そこで、ESP-WROOM-02の通信速度を9600bpsまで落とします。57600bpsとかでも良さそうですが、ESP-WROOM-02の旧バージョンのFirmwareでは9600bpsだったのでそれに合わせます。

通信速度の設定は以下のコマンドで行います。
AT+UART_DEF=9600,8,1,0,0

スクリーンショット 2015-08-28 19.19.37

続きを読む

KiCADからユニクラフト用のガーバーデータ


KiCADからユニクラフトのプリント基板製造に発注するためのガーバーデータリネーム用のバッチファイルを作りました。

unicraft_ren.bat.zip
ユニクラフトの製造サービスではガーバーのファイルネームが指定されています。毎回リネームするのが面倒なのでバッチファイルを作ってみました。書き出されたガーバーファイルと同じフォルダにバッチファイルを置いて起動するとリネームが完了します。間違いがないか確認してお使いください。