Edisonでmraaを使ってLチカをやってみる [edison]
以前は,Arduino IDEを使ってLチカをやってみたが,今回はmraaを使ってLチカをやってみる.
回路図は以前と同じ.
なお,Arduino IDEでいう13番ピンは,EdisonモジュールのGP40ピンだが,mraaでは別途ピン番号が管理されていて,mraa numberは37になる.ちなみに,情報は「mraa/edison.md at master · intel-iot-devkit/mraa · GitHub」にある.
今回はEclipseを使ってクロスビルドして試してみた.Eclipseでの開発はこんな感じ.
参考にしたのは,公式の,「Getting Started for C/C++ (Eclipse) - Galileo & Edison」だ.
コードは,スクリーンショットをみれば分かるが,一応ここにも記載しておく.
Eclipseからはリモートデバッグも可能なようだ.
それにしてもArduino IDEからの制御も楽だが,mraaも楽だな...
お試しあれ.
回路図は以前と同じ.
なお,Arduino IDEでいう13番ピンは,EdisonモジュールのGP40ピンだが,mraaでは別途ピン番号が管理されていて,mraa numberは37になる.ちなみに,情報は「mraa/edison.md at master · intel-iot-devkit/mraa · GitHub」にある.
今回はEclipseを使ってクロスビルドして試してみた.Eclipseでの開発はこんな感じ.
参考にしたのは,公式の,「Getting Started for C/C++ (Eclipse) - Galileo & Edison」だ.
コードは,スクリーンショットをみれば分かるが,一応ここにも記載しておく.
#include "mraa.hpp" static int iopin = 37; int main(int argc, char **argv) { mraa::Gpio* gpio = new mraa::Gpio(iopin); if (gpio == NULL) { return MRAA_ERROR_UNSPECIFIED; } mraa_result_t response = gpio->dir(mraa::DIR_OUT); if (response != MRAA_SUCCESS) { mraa::printError(response); return 1; } while (true) { response = gpio->write(1); sleep(1); response = gpio->write(0); sleep(1); } delete gpio; return response; }
Eclipseからはリモートデバッグも可能なようだ.
それにしてもArduino IDEからの制御も楽だが,mraaも楽だな...
お試しあれ.
タグ:Eclipse
Edisonに照度センサをつないでみる [edison]
前回,Arduinoに照度センサをつないでみたが,今回はEdisonにつないでみる.
EdisonはIntel Edison Breakout Boardを使っているので,IOは1.8Vだ.arduinoのときは5Vだったが今回は1.8Vだ.だけど,秋月のI2Cバス用双方向電圧レベル変換モジュール(PCA9306)を経由して接続するってのは変わらない.
接続はこんな感じ.
当初はこんな感じで接続していたが,Kさんからコメントいただいたように,AE-PCA9306ではVref2側を高電圧側にするべきである.
なので,こちらの回路図のように接続すべきである.
今回もArduino IDEで動かしてみる.
スケッチは,前回Arduinoで動かしたときと全く一緒でOK.
が,動かしてみたらうまく動かなかった.
調べてみると,こんな記事が見つかった.
Edison のI2Cを試してみる — Edison-Note 1.3 documentation
Edison Breakout BoardでI2C通信テスト[1](C言語,mraaライブラリ,PCA9306,DRV8830を使用) - Qiita
どうやらEdisonのI2Cは内蔵プルアップが有効になっているようで,一方,秋月のレベル変換モジュールもデフォルトではプルアップが有効になっていて,これのせいでうまく通信できない.
最初はEdisonの内蔵プルアップを無効にしようと思ったんだけど,さんざんWeb上の情報を探したけど方法が見つからなかった.というわけで,秋月のレベル変換のプルアップを無効にすることにした.やりかたは,AE-PCA9306モジュール取扱説明書(927KB)に書かれている通り,ジャンパをカットすればいい.
今回は,Edison側だけレベル変換モジュールのプルアップを無効にして,照度センサ側は(センサ側でプルアップしてないので)レベル変換モジュールのプルアップは有効のままにしておく.
上記の回路図のように接続しているので,カットするジャンパは,J2とJ3 J4とJ5だ.
で,これで試したら無事通信できた.Arduinoで試したときと同じように動いたのでOKだ.
お試しあれ.
EdisonはIntel Edison Breakout Boardを使っているので,IOは1.8Vだ.arduinoのときは5Vだったが今回は1.8Vだ.だけど,秋月のI2Cバス用双方向電圧レベル変換モジュール(PCA9306)を経由して接続するってのは変わらない.
接続はこんな感じ.
当初はこんな感じで接続していたが,Kさんからコメントいただいたように,AE-PCA9306ではVref2側を高電圧側にするべきである.
なので,こちらの回路図のように接続すべきである.
今回もArduino IDEで動かしてみる.
スケッチは,前回Arduinoで動かしたときと全く一緒でOK.
が,動かしてみたらうまく動かなかった.
調べてみると,こんな記事が見つかった.
Edison のI2Cを試してみる — Edison-Note 1.3 documentation
Edison Breakout BoardでI2C通信テスト[1](C言語,mraaライブラリ,PCA9306,DRV8830を使用) - Qiita
どうやらEdisonのI2Cは内蔵プルアップが有効になっているようで,一方,秋月のレベル変換モジュールもデフォルトではプルアップが有効になっていて,これのせいでうまく通信できない.
最初はEdisonの内蔵プルアップを無効にしようと思ったんだけど,さんざんWeb上の情報を探したけど方法が見つからなかった.というわけで,秋月のレベル変換のプルアップを無効にすることにした.やりかたは,AE-PCA9306モジュール取扱説明書(927KB)に書かれている通り,ジャンパをカットすればいい.
今回は,Edison側だけレベル変換モジュールのプルアップを無効にして,照度センサ側は(センサ側でプルアップしてないので)レベル変換モジュールのプルアップは有効のままにしておく.
上記の回路図のように接続しているので,カットするジャンパは,
で,これで試したら無事通信できた.Arduinoで試したときと同じように動いたのでOKだ.
お試しあれ.
タグ:内蔵プルアップ
Arduinoに照度センサをつないでみる [Arduino]
手元のジャンクにI2C接続の照度センサがあったのでArduinoにつないでみた.
照度センサは,ROHMのBH1751FVI.I2Cで制御するタイプだ.
で,ArduinoとはIOの電圧が違うので直結できない.なので,秋月のI2Cバス用双方向電圧レベル変換モジュール(PCA9306)を経由して接続してやる.
こんな感じ.
間にI2Cのレベル変換を挟んでいるだけで,基本的には素直に接続なので悩むことはないと思う.
で,Arduino側のスケッチはこんな感じ.
簡単すぎる.これでシリアルに照度値が出力されるようになる.
Arduinoってなにかちょっと試すのにホント便利だなぁ.
照度センサは,ROHMのBH1751FVI.I2Cで制御するタイプだ.
で,ArduinoとはIOの電圧が違うので直結できない.なので,秋月のI2Cバス用双方向電圧レベル変換モジュール(PCA9306)を経由して接続してやる.
こんな感じ.
間にI2Cのレベル変換を挟んでいるだけで,基本的には素直に接続なので悩むことはないと思う.
で,Arduino側のスケッチはこんな感じ.
#include <Wire.h> const int SensorAddress = 0x23; const int CommandHResolutionSingle = 0x20; const int ReadDataNum = 2; void setup() { Wire.begin(); Serial.begin(9600); } void loop() { Wire.beginTransmission(SensorAddress); Wire.write(CommandHResolutionSingle); Wire.endTransmission(); Wire.requestFrom(SensorAddress, ReadDataNum); while (Wire.available() < ReadDataNum); unsigned int h = Wire.read(); unsigned int l = Wire.read(); double lx = convertSensorDataToLx(h, l); Serial.println(lx); delay(500); } double convertSensorDataToLx(unsigned int high, unsigned int lo) { double result = (high * 256u + lo) / 1.2; return result; }
簡単すぎる.これでシリアルに照度値が出力されるようになる.
Arduinoってなにかちょっと試すのにホント便利だなぁ.
EdisonでLチカを試してみる [edison]
Edisonで定番のLチカをやってみる.
IntelのGetting Started GuideではIntel Edison Arduino BoardでのLチカが説明されているが,うちはIntel Edison Breakout Boardなのでちょっと違うが,まぁ試してみる.
といっても,Arduino IDEをダウンロードして,SampleのBlinkを書き込んでやるだけだ.
ただ,LEDはArduino Boardの13番ピンにつながってる前提のサンプルなのだが,Breakout BoardにArduinoの13番ピンなんてないので,該当するピンに読み替えてやる必要がある.
で,回路図をみると,Arduino Boardの13番ピンは,EdisonモジュールのGP40ピンで,これはBreakout BoardでいうJ19-10番ピンにつながっているようだ.
というわけで,LEDをつないでテストしてみる.
ただ,Breakout BoardはIOが1.8Vで,かつIO出力も3mAしかないようなので,そのままLEDを点灯させるのはやめて,レベル変換ICを通して点灯させることにする.
レベル変換ICは先日購入しておいた,秋月電子の「8ビット双方向ロジックレベル変換モジュール」を使う.
で,こんな感じに接続.
これで試したら,LEDの点滅が無事確認できた.
さて,次は何に手を出そうか...
IntelのGetting Started GuideではIntel Edison Arduino BoardでのLチカが説明されているが,うちはIntel Edison Breakout Boardなのでちょっと違うが,まぁ試してみる.
といっても,Arduino IDEをダウンロードして,SampleのBlinkを書き込んでやるだけだ.
ただ,LEDはArduino Boardの13番ピンにつながってる前提のサンプルなのだが,Breakout BoardにArduinoの13番ピンなんてないので,該当するピンに読み替えてやる必要がある.
で,回路図をみると,Arduino Boardの13番ピンは,EdisonモジュールのGP40ピンで,これはBreakout BoardでいうJ19-10番ピンにつながっているようだ.
というわけで,LEDをつないでテストしてみる.
ただ,Breakout BoardはIOが1.8Vで,かつIO出力も3mAしかないようなので,そのままLEDを点灯させるのはやめて,レベル変換ICを通して点灯させることにする.
レベル変換ICは先日購入しておいた,秋月電子の「8ビット双方向ロジックレベル変換モジュール」を使う.
で,こんな感じに接続.
これで試したら,LEDの点滅が無事確認できた.
さて,次は何に手を出そうか...
intel Edisonを入手してみる [edison]
intel Edisonを買ってみた.
「Edison Kit for Arduino」と,「Edison Breakout Board Kit」のどちらにするか迷ったが,せっかくEdisonが小さいんだからその小ささが生かされる「Edison Breakout Board Kit」にしてみた.
で,購入したのはこれ.
・Intel Edison Breakout Board Kit
・USBケーブル Aオス-マイクロBオス 1.5m A-microB 2本
・スチロールケース SK-2
ケースは秋月のサイトで「びったとり入ります」と書かれていたので買ってみた.
あと,「Edison Breakout Board Kit」のIO電圧は1.8Vなので,
・8ビット双方向ロジックレベル変換モジュール
も買った.
それから,Breakout Boardはピンホールがあるだけで,いろいろ試すとするとピンホールに線材を半田付けすることになると思うが,いきなり半田付けってのはやりたくないなぁと思ってたら,スルーホール用テストワイヤというのがあったのでそれも買ってみた.
・テストワイヤ TTW-200
「スルーホールに挿し込むだけで信号の入力やチェックができます」とのことで,半田付けせずに試せる.ただ,Breakout Boardに思いっきり挿すとEdison本体のシールドに接触するかもしれないので,何らかの絶縁はした方が良さそうである.とりあえずうちでは紙を挟んである.
で,実は10月末には入手済みだったのだが,最近やっといじり始めている.
とりあえず,最新のFWにアップデートして,WiFi設定なんかまではやってみた.この辺の作業内容は本家含めネット上にたくさん情報があるのでそれを参考に.
それにしても小さい.以前,BeagleBoard-xMを入手したときにも「小さいなぁ」と感じたけど,これはもっと小さい.
Raspberry Piだって十分小さいけど,それよりも小さい.しかもパワフル.
さて,とりあえず次回はLチカやってみよう.
「Edison Kit for Arduino」と,「Edison Breakout Board Kit」のどちらにするか迷ったが,せっかくEdisonが小さいんだからその小ささが生かされる「Edison Breakout Board Kit」にしてみた.
で,購入したのはこれ.
・Intel Edison Breakout Board Kit
・USBケーブル Aオス-マイクロBオス 1.5m A-microB 2本
・スチロールケース SK-2
ケースは秋月のサイトで「びったとり入ります」と書かれていたので買ってみた.
あと,「Edison Breakout Board Kit」のIO電圧は1.8Vなので,
・8ビット双方向ロジックレベル変換モジュール
も買った.
それから,Breakout Boardはピンホールがあるだけで,いろいろ試すとするとピンホールに線材を半田付けすることになると思うが,いきなり半田付けってのはやりたくないなぁと思ってたら,スルーホール用テストワイヤというのがあったのでそれも買ってみた.
・テストワイヤ TTW-200
「スルーホールに挿し込むだけで信号の入力やチェックができます」とのことで,半田付けせずに試せる.ただ,Breakout Boardに思いっきり挿すとEdison本体のシールドに接触するかもしれないので,何らかの絶縁はした方が良さそうである.とりあえずうちでは紙を挟んである.
で,実は10月末には入手済みだったのだが,最近やっといじり始めている.
とりあえず,最新のFWにアップデートして,WiFi設定なんかまではやってみた.この辺の作業内容は本家含めネット上にたくさん情報があるのでそれを参考に.
それにしても小さい.以前,BeagleBoard-xMを入手したときにも「小さいなぁ」と感じたけど,これはもっと小さい.
Raspberry Piだって十分小さいけど,それよりも小さい.しかもパワフル.
さて,とりあえず次回はLチカやってみよう.
秋月電子のATmega168/328マイコンボードキットを組み立ててみる [Arduino]
Arduino 互換ボードになるATmega168/328マイコンボードキットを組み立ててみた.AE-ATmegaというやつだ.
組み立ては難しくなくて,説明書の順番通り半田付けしていけばOK.
ただ,USBシリアル変換モジュール(AE-UM232R)は使い回したいので直接半田付けはしなかった.本当はICソケットを使うのがいいんだろうけど,手元になかったのでやむなくピンソケットをつけてみた.
なので,USBシリアル変換のところだけやたら高さが高くなってしまった.
で,組み立てが終わったらArduino化するためにブートローダーを書き込む.
ネットで調べると,ブートローダーの書き込みはいくつかの方法があるようだが,手元にあるArduino UNOを使って書き込むことができるようなので,それを試してみた.ArduinoISPと呼ぶようである.
方法は,本家「Arduino - ArduinoISP」,もしくはその日本語訳サイト「Arduino を AVR プログラマ(ISP: In-System Programmer)として使う」に情報がある.
で,接続はこんな感じでOK.
あとは書き込み手順通りに進める.
ターゲットボードは,AE-Atmegaはないので,「Arduino Diecimila or Duemilanove w/ ATmega168」を選択する.
で,書き込むのだが,残念ながらこの方法では書き込めない.
こんなエラーが出る.
調べてみると,どうやら「Arduino Diecimila or Duemilanove w/ ATmega168」はATmega168なのだが,AE-ATmegaに載っているのはATmega168Pなので,チェックで引っかかるようだ.
というわけで,このままではブートローダーを書き込めないので,なんとかATmega168として認識されるようにごまかしてみた.
以下のやり方はMac環境化での話になるが,ほかの環境でも同様のことができると思う.
では,方法だが,とても簡単.
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/下にある,avrdude.confを編集する.
で,編集する部分を一部抜粋したのが以下.
このうち,
つまり,
これで書き込める.
書き込みが終わったら変更を元に戻しておくことを忘れずに.
ここまできたら,もう普通にArduinoとして使える.
サンプルスケッチを書き込んでみて,動作を確認してみたが,問題なく動作した.
お試しあれ.
組み立ては難しくなくて,説明書の順番通り半田付けしていけばOK.
ただ,USBシリアル変換モジュール(AE-UM232R)は使い回したいので直接半田付けはしなかった.本当はICソケットを使うのがいいんだろうけど,手元になかったのでやむなくピンソケットをつけてみた.
なので,USBシリアル変換のところだけやたら高さが高くなってしまった.
で,組み立てが終わったらArduino化するためにブートローダーを書き込む.
ネットで調べると,ブートローダーの書き込みはいくつかの方法があるようだが,手元にあるArduino UNOを使って書き込むことができるようなので,それを試してみた.ArduinoISPと呼ぶようである.
方法は,本家「Arduino - ArduinoISP」,もしくはその日本語訳サイト「Arduino を AVR プログラマ(ISP: In-System Programmer)として使う」に情報がある.
で,接続はこんな感じでOK.
あとは書き込み手順通りに進める.
ターゲットボードは,AE-Atmegaはないので,「Arduino Diecimila or Duemilanove w/ ATmega168」を選択する.
で,書き込むのだが,残念ながらこの方法では書き込めない.
こんなエラーが出る.
avrdude: Expected signature for ATMEGA168 is 1E 94 06 Double check chip, or use -F to override this check.
調べてみると,どうやら「Arduino Diecimila or Duemilanove w/ ATmega168」はATmega168なのだが,AE-ATmegaに載っているのはATmega168Pなので,チェックで引っかかるようだ.
というわけで,このままではブートローダーを書き込めないので,なんとかATmega168として認識されるようにごまかしてみた.
以下のやり方はMac環境化での話になるが,ほかの環境でも同様のことができると思う.
では,方法だが,とても簡単.
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/下にある,avrdude.confを編集する.
で,編集する部分を一部抜粋したのが以下.
#------------------------------------------------------------ # ATmega168 #------------------------------------------------------------ part id = "m168"; desc = "ATMEGA168"; has_debugwire = yes; flash_instr = 0xB6, 0x01, 0x11; eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, 0x99, 0xF9, 0xBB, 0xAF; stk500_devcode = 0x86; # avr910_devcode = 0x; signature = 0x1e 0x94 0x06;
このうち,
を168P用に一時的に変更する.signature = 0x1e 0x94 0x06;
つまり,
にしてやる.signature = 0x1e 0x94 0x0b;
これで書き込める.
書き込みが終わったら変更を元に戻しておくことを忘れずに.
ここまできたら,もう普通にArduinoとして使える.
サンプルスケッチを書き込んでみて,動作を確認してみたが,問題なく動作した.
お試しあれ.
タグ:AE-ATmega
ov7670+Arduino+ProcessingでTimelapseをやってみる [Arduino]
長らく放置していたCMOSカメラのov7670だが,とりあえず,秋月電子通商のArduino用ユニバーサル基板に組んでみた.
こんな感じ.
で,Arduino側は前はQQVGAだったけど,VGAで画像取得できるようにして,あとProcessingで画像表示用にこんなの作ってみた.
これで画像を保存できるようにしたので,画像を撮りまくってTimelapseをやってみた.
その動画がこれ.同じような動画ばっかりだけど...
かなり簡単にできた.Processingが画像を動画にしてくれるので楽だ.
ArduinoとProcessingのコードはかなり適当な作りなので,もし要望があったら公開しようと思う.
2015.05.30追記
ArduinoとProcessingのコードはこちら.
久しぶりにov7670+Arduino+Processingを動かしてみる
お試しあれ.
こんな感じ.
で,Arduino側は前はQQVGAだったけど,VGAで画像取得できるようにして,あとProcessingで画像表示用にこんなの作ってみた.
これで画像を保存できるようにしたので,画像を撮りまくってTimelapseをやってみた.
その動画がこれ.同じような動画ばっかりだけど...
かなり簡単にできた.Processingが画像を動画にしてくれるので楽だ.
ArduinoとProcessingのコードはかなり適当な作りなので,もし要望があったら公開しようと思う.
2015.05.30追記
ArduinoとProcessingのコードはこちら.
久しぶりにov7670+Arduino+Processingを動かしてみる
お試しあれ.
タグ:TIMELAPSE