まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

Arduino

メモ:arduino MsTimer2の上位FlexiTimer2

 arduinoでタイマ割り込みが必要な時はMsTimer2を使ってきたが、32U4を使っているArduino Leonardo系ではコンパイルできない。が、探したらあった。FlexiTimer2というのを使う。

http://playground.arduino.cc/Main/FlexiTimer2


 Teensyというのが書いてあるが、Teensy2.0は32U4を使ったボード。ということでやってみたら動いた。MsTimer2での書き方がFlexiTimer2でもそのまま使えた。

メモなんで詳細略。すまん。

aitendoのArduino互換機「びんぼうでいいの」とMacOSXでのハマりどころ(CH341Tドライバ)

2016/11/19追記:macOS Sierra用
Run Makeblock hardware (and Arduino-compatible Boards with CH340/CH341) on Mac OS Sierra
CH34x USB-UART macOS 10.12 Sierra対応ドライバ

追記:署名入りCH340ドライバがあるようだ。
Signed Mac OS Driver for Winchiphead CH340 serial bridge

 aitendoで500円のArduino互換基板「びんぼうでいいの」を買ってみた。ソケットやATmega328などの部品を余らせている人向け。
びんぼうでいいの [U3](aitendo)

 表面実装の部品はあらかじめ取り付けてある。USBのBコネクタ、28ピンICソケット、リセット用のタクトスイッチ、DCジャックをハンダ付けしArduinoのファームを書き込んだATmega328をソケットに差し込めばOK。
2014binbo1


2014binbo2

KEY_L、KEY_Hというタクトスイッチのパターンが謎だがテスタで追ったら以下のように2Pの端子に出ているだけの模様。
2014binboudeino

 基板の角はバリがあるのでやすりで削っておこう。
ATmega328の書き込みは省略して動いているArduino UNO R3から外して取り付け動作確認した。ドライバはCH341T用のものと同じ。
http://www.wch.cn/downloads.php?name=serch&page=1&keyword=ch341ser
 
Windows7(64bit)+Arduino IDE1.0.5で確認した。マイコンボードは"Arduino UNO"を選択する。

さて、ここからが問題。MacOSX用のドライバはあるのだが認識しない。ドライバはインストールできるのだが/dev/以下に現れないのでArduino IDEからも認識しようがない。USBデバイスとしては認識しているようなのだが……(MacOSX 10.9とMacOSX 10.10で確認)
CH340Tdevice


 調べたらドライバの署名がおかしくてロードされていないということらしい。

Topic: [Solved] Clone arduino Mega 2560 - no serial port DCcduino Mega 2560

対処としては
sudo nvram boot-args="kext-dev-mode=1"
としてから再起動すると署名がおかしいドライバもロードするようになり「びんぼうでいいの」も認識するようになった。ただしこれはあくまでも例外的な対処なのでドライバが更新されたらアップデートすべき。


http://www.cindori.org/enabling-trim-on-os-x-yosemite/ 

http://stackoverflow.com/questions/24986390/kext-with-invalid-signature-can-load-on-one-machine-but-not-the-other-why 

Arduino Leonardo/Micro互換のPololu A-Star 32U4 Micro

 A-Star 32U4 Microは超小型のArduino Leonardo/Micro互換マイコン。
A-Star 32U4 Micro
(スイッチサイエンス)

A-Star 32U4 Micro(Pololu)

 Arduino Microより小さい。ピンアサインはこちら。
A-Star 32U4 Micro PinAssign

 ピンの一部を出さないことでサイズを小さくしている。Digital13はLEDのみで、Analog2-5はない。32U4だと一部のDigitai端子にアナログ入力が割り当てられるので、使いたければこちらを使用するという考え。
2014pololu

これまでの選択肢としてはこういうのがあった:
Arduino Micro
Pro Micro 5V/16MHz
ダヴィンチ(ストロベリーリナックス)
32U4ブレークアウト
(スイッチサイエンス)

A-Star Programmable Controllersの仲間にはArduino Microと同じサイズのものがあり、動作電圧のバリエーションがある。

以下はA-STAR 32U4 MicroのUSB情報。

Pololu A-Star 32U4:
  製品 ID:0x2300
  製造元 ID:0x1ffb
  バージョン: 1.00
  速度:最高 12 Mb/秒
  製造元:Pololu Corporation
  場所 ID:0xfd120000 / 4
  利用可能な電流(mA):500
  必要な電流(mA):500
 


Arduinoで任意のUSBコードを送る 解決編

 Arduino Leonardo/MicroはUSBキーボードとして使えるが、Usageコードが101より大きいものは無視されるという問題があった。
PS/2キーボード変換器の製作(18) USBキーボードの無視されるキーについて
対策箇所はわかっていたが、当時はバイナリにパッチするという手段しか思いつかず強引にやっていた。
PS/2キーボード変換器の製作(19) HEXファイルにパッチを当てる
 この後、Arduino IDEのフォルダ内にあるソースをいじると反映されることを知った。Arduino IDEは毎回ソースから全部ビルドしてたのか!コアな部分はコンパイル済と勝手に思っていた。
Turning an Arduino Leonardo into a joystick.(Imarginary Industries)
 この記事ではUSBAPI.h、HID.cppを修正することによりジョイスティックのUSB-HIDを追加している。ということはArduino IDEにあるHID.cppのHID Report Descripterを修正することで日本語キーボードの機種で¥マークなどを入力できるようになるはずだ。
MacOSXだと修正対象のソースはContents/Resources/Java/hardware/arduino/cores/arduino/以下にある。
https://gist.github.com/houmei/2ad9f7a713f46149e72f

HID.cppを差し替え、ライブラリを組み込む。このライブラリはHID.cpp/USBAPI.hと一体化もできると思うが以前作ったのをそのまま流用しているのでこうなっている。

2014shot1
 これはDavinciにArduino Microのファームウェアを書き込んだもの。pin4にスイッチを付けてフリスクの大きめのケースに入れてみた。たったこれだけ。日本語キーボードがついてるものがWindowsXPの古いノートPCしかなかったのでそれに接続して¥マークが入力できることを確認した。

https://gist.github.com/houmei/0ac6873618caa02f22b4

 USBキーボードのUsageコードについては以下からどうぞ。注意点としてUSキーボードのレイアウトが基準。
USB HID to PS/2 Scan Code Translation Table

 ああ、これで数年悩んでた問題が解決だ。変なバイナリパッチ作った時点で誰も突っ込んでくれないのね。


 ついでにPrint ScreenのUsageコード(0x46)を設定して最近話題のエビデンス画面スクリーンショット用ボタンにしてみた。これでハードコピー取り放題よ。
2014shot2

 

I2C接続のジョイパッド

 MICROCHIPのI/OエキスパンダMCP23008を使って簡単なジョイパッドをC基板で作ってみた。
MCP23008は8本のGPIOをI2C経由で制御できる。上位のMCP23017は16本制御できるが、ジョイパッドに必要なスイッチは上左下右ABなのでMCP23008を選択した。
 C基板のちょうど収まりのよい位置にタクトスイッチを配置してメッキ線でぜんぶ配線。上の方にI2C端子を出す。Groveの並び(SCL/SDA/Vcc/GND)に合わせる。
2014joypad1

     回路図はあとで整理するけどもほぼ見たまんま。

MCP23008
1 SCL Groveコネクタ1 SCLへ 3.3KΩプルアップ
2 SDA Groveコネクタ2 SDAへ 3.3KΩプルアップ
3 A2 Vdd
4 A1 Vdd
5 A0 Vdd
6 *RESET 10KΩプルアップ
7 NC
8 *INT NC
9 Vss
10 GP0 ジョイパッドUp
11 GP1 ジョイパッドLeft
12 GP2 ジョイパッド Down
13 GP3 ジョイパッド Right
14 GP4 ジョイパッド Trigger A
15 GP5 ジョイパッド Trigger B
16 GP6 NC
17 GP7 NC
18 Vdd

Groveコネクタ3 Vdd
Groveコネクタ4 Vss 

 マイコンボードはArduino Leonardoと互換のSeeeduino Liteを使用した。これはボード上にGrove端子(I2C,Serial)が付いていてそのまま接続できる。今回Seeeduino Lite用のドライバや定義ファイル(board.txt)は使わずにArduino Leonardoとして使っている。 

2014joypad2

   さて、I2Cの制御はどうしようかなと探していたらMCP23008用のライブラリがあった。これをArduino IDEにインストールしておく。
https://github.com/adafruit/Adafruit-MCP23008-library 

 動作テスト用のスケッチはこちら。
https://gist.github.com/houmei/4c5c3db0579f5b12a71e

 押したスイッチに対応してU L D R A B の記号が表示される。これでハードの動作確認ができた。

続きの予定:
・回路図描く
・コネクタを追加し、ATARI(MSX)仕様のジョイスティックをつないでみる。





 

RTC DS1307 その1

 しばらくRTC(Real Time Clock)のRTC1307をArduino上でいじってみる。

DS1307 64 x 8、シリアル、I²Cリアルタイムクロック
https://www.sparkfun.com/datasheets/Components/DS1307.pdf

 I2C接続でバッテリバックアップ可、水晶をつなぐだけ、NVRAMあり、アラーム機能あり。

以下のモジュールを購入した。AT24C32(EEPROM)も載っている。トランジスタ?の空きパターンもある。
SainSmart Arduino I2C RTC DS1307 AT24C32 Real Time Clock Module For AVR ARM PIC

使い方はこちらを参考にした。
Sleep Cycle Alarm Clock with Motion Sensor

使用したのはArduino Leonardo。モジュールのVcc、GND、SCL、SDAをそのまま対応するピンに接続する。簡単。
2014ds1307

 ライブラリは以下にあるDS1307RTC.zipをダウンロードして使用する。
DS1307RTC Library(PJRC)

 サンプルスケッチのSetTimeでホストPCの時刻をRTCに設定する。
2014ds1307set


 サンプルスケッチのReadTestでシリアルコンソールに時刻を表示する。Arduinoの電源を外してまた接続しても正しい時刻を表示する。
 2014ds1307disp
 さて、この辺を調べているのはDS1307がGroveでも使われていたり86Duinoにも互換ライブラリがあったりしたため。同じように使えるかもしれない。

メモ:Time Library(PJRC)

 
サインスマート(SainSmart)I2C RTC DS1307 AT24C32 時計 モジュール for AVR ARM PICサインスマート(SainSmart)I2C RTC DS1307 AT24C32 時計 モジュール for AVR ARM PIC

サインスマート(SainSmart)
売り上げランキング : 51261

Amazonで詳しく見る
by G-Tools
サインスマート Tiny RTC I2C DS1307 AT24C32 24C32 メモリ リアルタイムクロックモジュール for Arduinoサインスマート Tiny RTC I2C DS1307 AT24C32 24C32 メモリ リアルタイムクロックモジュール for Arduino

サインスマート(SainSmart)
売り上げランキング : 63365

Amazonで詳しく見る
by G-Tools

Adafruit 1.8" TFT Shield用ゲタ

 Adafruitの1.8" TFT Shield、SPI関係の信号線をICSP端子からではなくArduino UNOのD13、D11から取っているのでそのままではArduino LeonardoやDueで動かない。そこで端子を変換するゲタを作った。

2014tftshield1


(1)Arduinoのバニラシールドは、ICSP端子の部分が使えるものを選ぶ。秋月電子扱いのものは該当部分に穴がない。
(2)ピンヘッダのうち、D13(SCLK)、D11(MOSI)、D10(CS)はピンを曲げて下のシールドに刺さらないようにする。
(3)バニラシールド上のD13をICSP端子のSCLK、D11をMOSIに接続。D10はD9にハンダ付け。
※D10はD9とICSP端子の横にジャンパで接続が切り替えられるようにしているが、これは86DuinoのハードウェアCSに繋ごうと思ったため。
※手抜きでメッキ線の空中配線しています。


2014tftshield2


 このようにArduino DueでハードウェアによるSPIで動作。Arduino DueはSPI.setClockDivider()の指定が数値で、SPI.setClockDivider(2);とすると動作クロック÷2=42MHzとなる。しかし、Adafruit 1.8" Shieldのレベルコンバータの仕様で10MHzが上限とあった。動作クロックは観測していない。

Arduino Due Hardware SPI (The 21st Century Digital Home)

 なお、Arduino Leonardo、86Duinoでの動作も確認できた。
2014tft86duino



Arduino用バニラシールド基板ver.2(黒)Arduino用バニラシールド基板ver.2(黒)

スイッチサイエンス
売り上げランキング : 204199

Amazonで詳しく見る
by G-Tools
Arduino用バニラシールド基板ver.2(赤)Arduino用バニラシールド基板ver.2(赤)

スイッチサイエンス
売り上げランキング : 298693

Amazonで詳しく見る
by G-Tools
Arduino用バニラシールド基板ver.2(緑)Arduino用バニラシールド基板ver.2(緑)

スイッチサイエンス
売り上げランキング : 349393

Amazonで詳しく見る
by G-Tools
Arduino用バニラシールド基板ver.2(青)Arduino用バニラシールド基板ver.2(青)

スイッチサイエンス
売り上げランキング : 125733

Amazonで詳しく見る
by G-Tools
Arduino用バニラシールド基板ver.2(白)Arduino用バニラシールド基板ver.2(白)

スイッチサイエンス
売り上げランキング : 134964

Amazonで詳しく見る
by G-Tools

メモ:Arduino TFTライブラリの調査 →解決 SDカードのせい

 Adafruit 1.8" TFTシールドがハングしてしまう問題、解決した。microSDカードのせいだった。

 いよいよ波形観測しないといかんかな〜と思ってて気付いた。μSDカードが繋がってる。
μSDカードを外してテストしたらハングアップしない。試しにSanDiskのμSDカードを挿したら問題なく動いている一時間程度でハング。ノーブランドのμSDカードが悪さしていたようだ。ちょっと気づくの遅かったですね。(その後、SDカードなしで12HランOK)
となると、SDカードからイメージを転送して表示するものはこのトラブルが発生する可能性がある。注意。

 あと、調査中色々検索してわかったことだが、3.3V-5VレベルシフタのCD4050、動作上限が10MHzなのであまり高いSPIクロックだと動かないということだった(Arduino UNOでは問題ない)。3.3V系でよければバイパスしてしまうという方法がある。

2014tft1





 以下は記録として残しておく。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 Arduino IDE 1.0.5から提供されたTFTライブラリだが、ランダムに線を引くのを繰り返していると画面がおかしくなり、真っ白になる。

2014softTFThang


 

Arduino IDE 1.5.6-r2 + Arduino Due /  Arduino Leonardo (TFT.h/TFT.cppにソフトSPIのパッチ)→発生
Arduino IDE 1.0.5 + Arduino UNO (ハードSPI)→発生

 これから、IDEやマイコンボードの違いは関係なく、TFTライブラリ〜TFTモジュールの問題と考えられる。

 まだ原因は分からないが再現性を高めてみた。Arduino IDE 1.0.5+Arduino UNOで調査。
 約1分で上記写真のようになるスケッチ。
https://gist.github.com/houmei/5dc5fde18425b24e53d8

 TFT.hとTFT.cppはutilityフォルダ以下にあるAdafruit_ST7735とAdafruit_GFXを呼び出している。以前はこれらのライブラリを直接使っていた。Adafruit_ST7735が直接TFT-LCDの制御を行っている。
 SPIのタイミングはどうか、とSPI.setClockDivider(SPI_CLOCK_DIV4);などと変えてみた。結果は発生する時間は伸びたが描画のコマンドを実施した回数は同じと思われた。また、線を引くコマンドの後にdelayを入れても時間が伸びるだけで現象は発生する。
 
 TFTのline()はAdafruit_GFX経由で水平ならAdafruit_ST7735のdrawFastVline()を、垂直ならdrawFastHline()を、斜めならばdrawPixel()で点を描画している。そこでdrawFastVline()を呼び出してさらに低レベルで表示を行うスケッチを書いた。
https://gist.github.com/houmei/e3ed1cb2f2a630b6089e

 drawFastVline()を8個並べたループを10000回。二周目の途中で表示が真っ白になる。プログラムの動作自体は進行しているのでTFTモジュールがコマンドを受け付けない状態になっているように思える。
なお、シリアルコンソールを開くとリセットがかかるが、これはUNOの仕様?
 drawFastVline()の回数をこれより減らすと発生する時間が伸びる。ループが5000回でも発生する時間が伸びる。発生時間は再現性があるので特定のタイミングによってTFTが反応しなくなるように思える。

 今日はここまで。

TFT LCD Library(arduino.cc)
ST7735R datasheet(PDF)
https://github.com/adafruit/Adafruit-ST7735-Library
https://github.com/adafruit/Adafruit-GFX-Library

Adafruit 1.8" TFT Shieldを標準のライブラリで使う

 以前トライしたAdafruit 1.8" TFT Shield、Arduino1.0.5や1.5.6-r2では標準のライブラリとしてあらかじめ入っている。

前回の実験はこれ:Adafruit 1.8インチTFTシールド

Adafruit 1.8インチTFTシールド(スイッチサイエンス)
Adafruit 1.8" 18-bit Color TFT Shield w/microSD and Joystick

サンプルスケッチを開くと今後はTFT.hだけをincludeすれば良いらしい。arduino.ccでTFTライブラリの解説を見ると5個の引数もOKなのだが、やってみるとエラーとなった。
TFTLibrary > TFT

これは TFT.h が
#include "utility/Adafruit_GFX.h"
#include "utility/Adafruit_ST7735.h"
とラップしているのだが、その下で
class TFT : public Adafruit_ST7735 {
public:
  TFT(uint8_t CS, uint8_t RS, uint8_t RST);

  void begin();  
}; 
と3引数だけを宣言しているのが原因と思われる。この中に

TFT(uint8_t CS, uint8_t RS, uint8_t SID, uint8_t SCLK, uint8_t RST); 

を追加すればエラーはなくなる。

 さて、標準のライブラリで何か表示させようにもチュートリアルはTFTモジュールのブレイクアウト基板とシールドの説明が一緒になっているのでややわかりにくい。
1.8" TFT Display Breakout and Shield

シールドでの端子は以下の様になっている。
#define sclk 13
#define mosi 11
#define cs   10
#define dc   8
#define rst  0
#define sd_cs 4

ジョイスティックはアナログポートA3。

 サンプルスケッチもシールド用にはそのまま使えないので何かデモはないかと探したら、互換シールドを作っている所にあった。
Arduino Colour TFT Shield
 が、なぜかジョイスティックがアナログポートA0でポジションの設定も全然互換でないので、ちょっといじった。スイッチのポジションは面倒なので正しく合わせてありません。
https://gist.github.com/houmei/621481ad3260b088a7eb

2014TFTshield

Arduino UNO / Crowduino(5V/3.3V)で動作確認。
いきなりArduino Dueや86Duino(これにも互換ライブラリがある)でやろうとしてうまく行かなかったのでArduino UNOで実験。リファレンス用の板大事。

追記:
Arduino Dueではダメだった。ハードSPIがUNOと違う&任意端子で指定しても動かず。arduinoのフォーラムでも動作例なし。
Intel Galileoではどうかとやってみたが、TFT.hが呼び出すAVR固有のヘッダがないのでコンパイルエラー。 

メモ:20140320


OPアンプ大全 PDFダウンロード[ANALOG DEVICES]

TI LaunchPad

Arduino
Arduino UNO R3 + dfu-programmerって、みんなどうしてるの?
Arduino + USBホストシールドの実験。[robo8080のブログ]
Interfacing Arduino to USB GPRS modem[Circuits@home]

Grove RTC[seeed wiki]
DS1307 64 x 8 Serial Real-Time Clock(PDF)

Intel Galileo — I/Oエキスパンダで液晶[痛い日記]

895円の超小型Ardunoクローン DigiSparkを買った[橋本商会]
Getting Started with your Digispark
OLIMEXINO-85-ASM

VGA端子の同期信号出力タイミング規定[日曜技術者のメモ]

Fritzingでパーツ作り[DENSIKIT.COM]

PIC
INI-M4 for STM32

I2Cの接続構成とプルアップ抵抗[電子工作の実験室]


LPC810
LPC810を使っての感想他[SE組込人]
フルカラーシリアルLED簡単に制御できるコントローラ開発[SE組込人]
NXPの小ピンARMの試食[ELM]



FPGA

FPGAでコインを掘る[SandBox(旧「サザエ2号」)]
CudaMiner / sha256.cu


 

Grove LEDbarを使う

 GroveのLEDbarを使ってみた。10個のLEDがレベルメータのように並んでいるモジュール。

Grove - LED Bar

ライブラリは以下から。zipでまとめてダウンロードし、展開後できるフォルダ名の末尾-masterを削除し、Arduino IDEのライブラリフォルダにコピーする。

https://github.com/Seeed-Studio/Grove_LED_Bar


2014LEDbar1

 動作確認はArduino Leonardo、Crowduino(5V)で問題なし。
 仕様上3.3Vで動くようなことが書いてあったが、Crowduinoの3.3V設定では止まってしまった。
 おまけとしてIntel Galileoでもやってみたがまったく動かなかった。

Crowduinoはこれね。Crowduino With ATMega 328 V1.1

 なお、このLEDbarは0〜9の番号がそれぞれに振ってあるが、0が赤、1が橙、あとは緑になっている。オーディオのレベルメータとは直感的には反対なので注意。


GalileoのファームウェアアップデートとLCD表示

 Arduino互換のIDEとシールドが使えるIntelのGalileoを使ってみた。

 まずはこちらを参考にファームウェアのアップデート。
Intel Galileoはじめの一歩 (人と技術のマッシュアップ)

ハマりどころは
・シリアルデバイス名でtty.*でなくcu.*を選択する
だが他にもあった。MacOSX(10.8)で専用のIDEを使ってアップデートする場合、ファイル名にスペースなどを含めてはいけない。ファイル名の長さも8文字まで。さらに、[アプリケーション]フォルダ以下に直接置かないといけない。私はArduinoのサブフォルダを作って複数の環境を置いていたのだが、ここでは動かなかった。

Problems updating firmware

 さて、Lチカも確認し手持ちのシールドが動くかどうかテスト。Galileoは5V/3.3Vのシールドが使える(ショートプラグで切り替え)。LCDキーパッドシールドを使った。スケッチは過去やったFizzBuzz。が、液晶の上の行に全部トーフが表示されたままで変わらない。調べたらlcd.init()を追加する必要があった。

Intel GalileoでHD44780キャラクタ液晶を使う方法(もへある)
Problems getting LCD to work with Galileo

LiquidCrystal lcd(8,9,4,5,6,7);

に対し、lcd.begin()の前に

lcd.init(1,8,255,9,4,5,6,7,0,0,0,0);

が必要。ピン8,9,4,5,6,7はそれぞれRS,ENABLE,D4,D5,D6,D7に対応。

ソース:https://gist.github.com/houmei/8505883

2014galileoLCD

 表示できることはできるのだが表示が遅い。感覚では300ボーの端末の画面表示よりも遅い。

 Galileoでは既存のライブラリはあまりあてにできないようだ。


 
No brand LCD キーパッド シールド Arduino 計測結果 表示No brand LCD キーパッド シールド Arduino 計測結果 表示

ノーブランド
売り上げランキング :

Amazonで詳しく見る
by G-Tools

超音波距離センサ HC-SR04を1ピンで使う

 超音波距離センサモジュール HC-SR04というのがある。なぜかAmazonで安かった。
HC-SR04 Demo For Arduino 
HC-SR04 User Guide[PDF] 

 TRIG端子にパルスを与えると距離に応じた時間の後ECHO端子に信号がでる。電源を除くと2端子必要。が、Groveの超音波距離センサモジュールのライブラリが使えないかと眺めていたら1端子しか使っていない。同じものに見えるのに?
GROVE - 超音波距離センサモジュール 

 TRIG端子とECHO端子をショートさせたらどうだろうかと考えたが発振してしまうように思える。調べてみたら抵抗で繋げてしまえばいいらしい。
Hack your HC-SR04 into one pin mode 
ForumMain PICAXE ForumActive PICAXE Forum HC-SR04 
これらによると 1.8KΩの抵抗で TRIGと ECHOを接続し、TRIG端子を使えば良いとのこと。手持ちの2.2KΩで試してみた。

2014grove1


2014grove2

これをGroveのケーブルで接続する。

2014grove3
 

 ライブラリは Grove用のものをそのまま使った。
Seeed-Studio / Grove_Ultrasonic_Ranger [Github]

注意:Githubからzipでまとめてダウンロードすると後ろに-masterが付くがArduino IDEのライブラリ名はハイフンを許さないので削除

 ライブラリインストール後、UltraSonicDisplayOnTermスケッチを使って確認。
ソース中、距離をインチで取得する部分とセンチメートルで取得する部分があるが、この間にディレイを適当に入れてやらないと後に書いたほうが0を返す。ひょっとしたらGroveのセンサと非互換の箇所かもしれない。

RangeInInches = ultrasonic.MeasureInInches();
        delay(100); ←これ
RangeInCentimeters = ultrasonic.MeasureInCentimeters();

ということで2ピン必要なところを1ピンにケチることができた。



HC-SR04 超音波距離センサーモジュール For ArduinoHC-SR04 超音波距離センサーモジュール For Arduino

サインスマート(SainSmart)
売り上げランキング : 4897

Amazonで詳しく見る
by G-Tools

 

MacOSX10.9(Mavericks)とFTDIドライバについて→10.9.5アップデートで解決

※MacOSX10.9.5アップデートで解決した模様。

 FTDIドライバ対策を行っていなかったMacOSX10.8をMavericksにアップデートし、10.9.5アップデート後、FTDIチップを使用しているArduino(例:互換機のCrowduino)を接続しbrinkスケッチを転送。接続時はドライバは以下のようにFTDIドライバは1つだけ認識。書き込み可能。

$ kextstat | grep FTDI

  155    0 0xffffff7f82c33000 0x8000     0x8000     com.FTDI.driver.FTDIUSBSerialDriver (2.2.16) <138 36 5 4 3 1>

 もともとのAppleUSBFTDI.kextは削除していない。

$ cd /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/

$ ls -al

total 0

drwxr-xr-x  24 root  wheel  816  8 21 03:26 .

drwxr-xr-x   8 root  wheel  272  9 19 13:21 ..

drwxr-xr-x   3 root  wheel  102  6  4 13:22 AppleUSBCDC.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:22 AppleUSBCDCACMControl.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:22 AppleUSBCDCACMData.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:23 AppleUSBCDCDMM.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:23 AppleUSBCDCECMControl.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:23 AppleUSBCDCECMData.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:23 AppleUSBCDCEEM.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:22 AppleUSBCDCWCM.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBEHCI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:33 AppleUSBFTDI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBHub.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBMergeNub.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBOHCI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBOpticalMouse.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBUHCI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:35 AppleUSBVideoSupport.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBXHCI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 IOUSBCompositeDriver.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 IOUSBHIDDriver.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 IOUSBHIDDriverSafeBoot.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:27 IOUSBLib.bundle

drwxr-xr-x   3 root  wheel  102  6  4 13:26 IOUSBUserClient.kext 



ーーー以下は以前の記事

 MacOSXを10.9にアップデートしたらFTDIチップを使っているArduinoが通信できなくなるという話を聞いて、10.9.1のアップデータが来るまで待っていたのだけど相変わらず直ってなかったので以下を適用した。
☆Arduino UNO R3、Arduino LeonardoなどFTDIチップを使わずにシリアル通信を実現しているものは問題なかった。

Arduino in OS X 10.9 Mavericks - Serial Port Issues

 AppleがMacOSX10.9からFTDIドライバをつけるようになったのだが、それに不具合があるらしい。修正方法は、標準のApple FTDIドライバを削除してFTDICHIPが配布しているドライバをインストールすること。
Virtual COM Port Drivers こちらからMacOSX用2.2.18をダウンロードする。ダウンロードして展開したFTDIUSBSerialDriver_v2_2_18.dmgを開くと2つのパッケージがあるが、FTDIUSBSerialDriver_10_4_10_5_10_6_10_7の方をインストールする。

ドライバの確認はkextstatコマンドで確認できる。デバイスを接続しないと現れない。

以下は2つのドライバが入ってしまっている例。

$ kextstat | grep FTDI

  127    0 0xffffff7f8259d000 0x7000     0x7000     com.apple.driver.AppleUSBFTDI (1.0.1b1) <114 37 5 4 3>

  128    0 0xffffff7f825a4000 0x8000     0x8000     com.FTDI.driver.FTDIUSBSerialDriver (2.2.18) <114 37 5 4 3 1>


先ほどのリンクにあった手順
cd /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns 
    sudo mv AppleUSBFTDI.kext AppleUSBFTDI.disabled 
    sudo touch /System/Library/Extensions
で削除して再起動し、FTDIのドライバをインストールすると以下の様に確認できる。

$ kextstat | grep FTDI

  125    0 0xffffff7f81ca1000 0x8000     0x8000     com.FTDI.driver.FTDIUSBSerialDriver (2.2.18) <114 36 5 4 3 1>

 動作確認はCrowduinoで行った。これはArduino Duemilanove互換でFTDIのチップを使ってシリアル通信をしている。クロウディーノ(Arduino互換) (801-ECP-C328) 

ついでにこんなのも見つけた。FTDIドライバをON/OFFするらしいが試していない。Arduinoに限らず影響があったみたい。OS X Mavericks (10.9) - IMPORTANT


追記:
Mac OS X MavericksにおけるFTDIシリアルポートドライバの取扱い 

201312メモ

Arduino関連。
Happy Hacking KeyboardをBluetooth化する(無改造版)

Arduino に dualMocoLUFA(USB-MIDI ファームウェア)を導入

無線LAN(Wi-Fi) SDカードまとめ ~Arduinoで使いたい~

Firmataプロトコル概要 (Ver 2.3)

DFU-Programmerのビルド

100円マイコンATtiny2313でArduino

Trinket 5V版と3.3V版がある。USBはソフトウエアで実現。シリアル通信はWindows側にドライバが必要。速度が遅すぎるせい?
Home/ Trinket/ Introducing Trinket/ Pinouts
Home/ Trinket/ Trinket USB Volume Knob/ Code

NXPのDIPーARMマイコン。
NXPの8ピンARMを食す(その2)
LPCXpresso IDEのRed State Machine file generatorを使ってみた [電子ブロック工房]
180円mbedの使い方

BeagleBoardBlack
OpenRTM-aistをBeagleBone Blackに実装し、開発する方法

共立エレショップのシリアル→パラレル変換ボード付きOLED

 OLEDは視認性が良いということで実験してみたかったんだけど、よくあるキャラクタLCDとインターフェースは同じでも初期化などが若干異なるということでなんとなくやってなかった。共立エレショップのOLEDにはシリアル→パラレル変換ボードが付いたセットがあるので、ついでにArduino LeonardoやArduino MEGAにあるハードウェアシリアルを使った実験をやってみた。

C9B362 シリアル→パラレル変換ボード付16x2【白色】OLEDカラーディスプレイ
C9B361 シリアル→パラレル変換ボード付16x2【黄色】OLEDカラーディスプレイ

資料:
資料:パラレル→シリアル変換ボード付き 16×2OLED カラーディスプレイ

上記で使われているOLEDは以下と同じもの。
BB1418 OLEDディスプレイ キャラクタ表示タイプ 16文字x2行 黄文字

今回はArduino LeonardoやArduino MEGAにあるハードウェアシリアルを使う。
Arduino→OLEDモジュール接続:
TXD→RXD
RESET→RESET
5V→+5V
GND→GND

スケッチはこちら:
// #include 
// OLED serial
// 20131119 for Arduino MEGA & Leonardo
//

// SoftwareSerial oled(8,9);

void setup() {
  Serial1.begin(9600);
  while(!Serial1);
  Serial1.write(27);Serial1.write('C');
}

int count=0;

void loop() {
  Serial1.write(' ');Serial1.print(count,DEC);
  count++;
  delay(50);
}

 Arduino MEGAでの例:
2013oled1

 Leonardoでも同様。スケッチの冒頭、while(!Serial1); がないとゴミが表示された。
 2013oled2

 ひょっとしてこちらのディスプレイに差し替えただけで動くかなあとやってみたけどダメだった。残念。
DAV413 OLEDディスプレイキャラクター表示タイプ20文字×4行 黄文字

 なお、Arduino MEGAは比較的高価なので、SainSmartの互換品を使った。



サインスマート(SainSmart) MEGA2560 互換ボード for Arduinoサインスマート(SainSmart) MEGA2560 互換ボード for Arduino

サインスマート(SainSmart)
売り上げランキング : 37414

Amazonで詳しく見る
by G-Tools

SpilmzieLabsの電卓キットを組み立てた

 SpilmzieLabs Calculator Kitを組み立ててみた。 2013calc0

 Adafruitで$44。ドイツ製。アクリルケースが美しい7セグLED6桁の電卓。
SpikenzieLabs Calculator Kit - 

 他のディストリビュータはこちら。
Calculator Kits from Spikenzie Labs Maker SHED
SpikenzieLabs Taschenrechner Bausatz EXPTECH
SpikenzieLabs Awesome Oldskool Calculator Kit Phenoptix


 組み立て方は詳しい説明書がある。また、レビューもある。組み立て前に見ておくと良い。
http://www.spikenzielabs.com/Downloadables/calc/CalcBuildInstructions.pdf [PDF]
レビュー記事:
SpikenzieLabs Calculator Kit review
Building the SpikenzieLabs Calculator Kit

 内容物はこんな感じ。CR2032コイン電池も入っている。ハンダごて、ニッパー、ラジオペンチ、カッター、六角レンチがあれば作れる。あとアクリル組み立ての時にテープを少々。
2013calc2


 では電気の工作から。電子部品はATmega328、10KΩ×4、0.1μF×2、7セグメントLED×6、コイン電池金具、タクトスイッチ×17。ICソケットはない。つけようとしてもケースを閉じることができない。
2013calc3

 コインホルダの金具を先にハンダ付けする。次に抵抗、コンデンサ。タクトスイッチは4本足があるが、対角2箇所を先にハンダ付けして目視で取り付け具合を確認し、調整する。 
ATmega328は直接ハンダ付け。7セグメントLEDはスペーサを介して基板に取り付けるがここが一番難しかった。説明書にはLEDのバリをカッターで取れとあったが、特に必要なかった。ピシっと揃っていればいい。

 2013calc4

 あとはコイン電池を上側がマイナスになるように取り付ければ"CALC 1.1"の表示が出るはず。色々押して動作確認。何も操作しなければ約15秒でオフになる。また、電卓機能は0に関する操作はサボってなにも動かない。つまり÷0や+0をやっても何も結果は表示されない。

 次はスイッチとアクリルケースの組み立て。
 アクリルはビニールで保護されているので剥がす。が、実際やってみて思ったのは指紋がペタペタついてしまって見栄えが悪くなってしまうということ。大きなパネル3枚については、スイッチの組み立てが終わるまでは剥がさないほうがいいかも。
 タクトスイッチの上にアクリルの土台とボタンを組み合わせたスイッチ部品を作ることにより、タクトスイッチむき出しのダサさをなくすことができる。キーの穴が空いている2枚のパネルを重ねながら、穴と同じサイズのアクリル部品に対してボタンを取り付ける。ボタンにはあらかじめ両面テープが貼ってある。
 ボタンができたら枝のようなスペーサ目的のアクリル部品をつけ、基板と一体化させる。ここらへんはネジで仮止めしながら行う。ちょっとむずかしい。底面用のアクリル板の四隅はタップが切ってあるので、これでネジを固定する。ネジは六角レンチで締めるが、ラジオペンチでも可。

2013calc5


 さてこうやってみると必要最小限の部品できれいにまとまっている。いいね。

 もうひとつの楽しみは、これがプログラム可能だということ。スケッチも公開されている。
Arduino互換で、Arduino IDEからは Arduino Pro / Pro mini 3.3Vとして扱える。独自の電卓も実装可能よ。

ここのフォーラムではIPアドレスを計算するものが投稿されていた。
SpikenzieLabs Calculator Kit

2013calc6



 組み立ては3時間くらい。国内でも扱わんかなあこれ。
 

Arduino Leonardo用 USB-HIDの書き換えメモ、その他

 この記事、Arduino Leonardoでどうやって標準ではないUSB-HIDジョイスティックを入力可能にしているのかと思っていたら:
ゲームコントローラー cubic9.com

Turning an Arduino Leonardo into a joystick.

USBAPI.hとHID.cppを差し替えるだけだったのか! バイナリにパッチ当ててたよ……


以下、今月のメモ
HID-class USB Serial communication for AVRs using V-USB

Arduinoで物足りなくなっちゃった方へ。Cypress CY8CKIT-042 PSoC 4 PIONEER KIT
DA4121 PSoC 4 PIONEER KIT 共立エレショップ
Fubarino SD Development Board MICROCHIP PIC32MXのボード

mbed LPC1114FN28で8桁7セグLEDモジュールを制御してみた きょうのかんぱぱ
AVR用ISP変換ケーブルふたたび ikkei blog
Raspberry Piクイックスタートアップガイド (日本語) 
日本語音声認識  cubic9.com
ATmega32U2でArduinoモドキを作る  kosaka lab
Freescale,ノイズ耐性などに優れた5V電源仕様のARM Cortex-M0+マイコンを発売  5V系ARM
FRDM-KE02Z: Kinetis EシリーズFreedom開発プラットフォーム 
Cyclone V GX Starter Kit $179。DE0の次はこれか?
VFDとは
3V-5V switchable I2C Real Time Clock Shield
Marcelo Barros / This repository is a program ArduinoShieldSPI
ASOOVU USB

メモ:My First Brainfuckコンピュータ

 8文字だけでプログラミングできる言語Brainfuck (Brainf*ckとも)。これをワンボード・マイコンにしたものがあった。
My First Brainfuck Computer

 キー入力は4個で音楽も奏でられる。その実体はArduinoのシールド。

 Brainfuckについては以下が参考になる。

Brainf*ck(kmonos.net)

KMC ID:primeさんによる紹介
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング

LEDとタクトスイッチに圧電ブザー、バニラシールドがあればすぐに組み立てられそうね。

たぶん最後のカイゼン LEDのチラつきをなくしキー入力を確実に

 以下の続き。

 カイゼンCookieClicker用自動マウスクリック(TimerOne割り込みによるキー読み取り)  

Arduino Leonardoでマウスクリック/クッキーを自動的に焼く装置(マウスクリック99回/秒、設定変更可能)

 残り、気になっている点は7セグメントLEDのチラつきと、クリック送出開始・送出終了のキー反応が敏感すぎること。一回確実に押しっぱなしにしてON、離してから次に押しっぱなしにしてOFFのような動作にしたい。

 LEDのチラつきは表示を消してから書いているためで、値が変わらなければ表示の更新もしないことで解決。BASICでゲーム作る時は移動先にキャラクタを描いてから元のキャラクタを消さないとちらついてましたね。

 送出開始・終了は、割り込みルーチン内で直前は押していない、現在は押している状態を認識させればよい。押しっぱなしでも記録されるのは1回だけ。これでかなり操作性が良くなった。
 なおディレイ間隔の増減は押しっぱなしで連続的に変化してもらいたいためそのままとした。

  key=digitalRead(CBTN);
  if (key==LOW && Psend==HIGH) Send=1; // Press
  Psend=key;
 
ソースはこちら:
https://gist.github.com/houmei/6627272

現在、4.5GcpsでUncannyClickerのarchivementを得た。
 
記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ