「 電子工作 」一覧

Make Ogaki Meeting 2012に行ってきた

7月に刈谷に来たときから、これは行かねばと思っていたMOM。

電車で1時間くらいのところでやっているなら行かない手はないので、休日出勤が必要な状況だったけどそれにも関わらず25日の土曜日に大垣まで行ってきた。

刈谷からだと快速電車1本で1時間弱で行くことができる。大垣駅前に行くと会場へのシャトルバスが出ていたので乗る。

DSCN0965

10分くらいで会場のソフトピアジャパンセンターに到着。福岡で言うところの百道のソフトリサーチパークのような、IT系の企業誘致したりしてる感じの場所。

DSCN0980

DSCN0981

DSCN0967

1階にも展示があったけど、メインの3階に上がってみる。…すると広い会場に思ったよりたくさんの人が。

DSCN0969

ブースだけで130近くあるのでそりゃこうなるわけねと、とりあえずブラブラ見て回る。

電子工作系はArduino、Arduino互換ボード(自作のxxduino系など)をベースにしたものが圧倒的に多い。やっぱりArduinoの存在はこういうフィジカルコンピューティングにはインパクトがあったんだと実感。他にはAndroidデバイスとADK使って、とか。

なので今回はArduino系よりも、

DSCN0972

木製のCNC旋盤だったり、

DSCN0974

ビー玉が永久に転がっていくオモチャだったり、

DSCN0976

ニキシー管を使った時計だったりなど、アナログというかPCと絡みが少ないような作品のほうが興味を引いた。

他には自力で人が乗れる小さな電車を作ろうと大がかりな作品を展示している人がいたり、デイリーポータルZのブースがあったりなど十分に見て廻れた。

たまにはこうやって自分でも何か物づくりしたい、って思うようなネタを仕入れに行かないと普段すぐに忘れちゃうのよね…。

もっと各ブースをじっくり見て回れば面白いものはまだまだ出てきそうだったけど、時間の都合で2時間ほど会場を巡ってから退散した。

Makeイベントは行ける機会があればいったほうが良いね。普段は東京の開催だしさらに福岡から行くとなるとハードルが高いけど今回は出張と大垣での開催がうまく重なったのである意味良かったんだろうなぁ。Makeイベントは行けるチャンスがあれば行っておくべきだね。



Arduino USBホストシールドなど購入

スイッチサイエンスさんから購入。

届いたときの箱がいい感じ。

2011-07-30 15.42.51

USBホストシールド、ピンヘッダ、測距センサの3点。測距センサは送料無料になる合計金額3000円を超えさせるためのついで買い。

2011-07-30 15.43.54

とりあえず、Android2.3.4のデバイスが無いので非ADKでLチカあたりを試してみるかな…。

2.3.4は国際版Gakaxy S用のカスタムROMがあるのでいずれはこちらにもチャレンジしてみたいところ。


“Kinectを3Dスキャナに利用:自分を印刷”

Kinectを3Dスキャナに利用:自分を印刷 | WIRED VISION

こないだのMakeな勉強会で、「KInect使って人の形を3D計測して、それを3Dプリンタに出してる人がいる」って言ってたのはこのことだな、きっと。

3Dスキャンした物をその場ですぐに成形出力できるシステムが、個人でもなんとか手の届きそうな範囲になってきたってのがすごいなぁ。


電子パーツ買い込み

Arduino勉強会に触発されて、カホパーツとマルツで買い物してきた。

2011-02-21 00.19.28

モーターあたりを使って何かできないかなぁ…と考え中。

カホに行ったら小学生くらいの子が2人ほど客でいて、そのうちの1人は父親らしき人に「スーパーへテロダイン方式はね…」とかやたらに電子工作系の専門的な話をしていた。でも父親はそこまで詳しくなさそうな感じだったので、この子はこんな知識をどこで手に入れたんだろう?とちょっと謎。

ついでにダイソーでパーツを入れるためのケースも買った。

2011-02-21 00.19.00

どちらかというと道具から揃えてしまいがちなタイプ。


Arduino勉強会に行ってきた

ちょっとお疲れモードだったので午後の遅い時間に行ったのだけど、午前中のカホパーツでの買い物とかかなり盛り上がったらしく、やっぱり無理してでも早い時間から行けばよかったかなーと後悔。

私は以前作った、Arduino + Bluetooth + Androidをそのまま持って来て、時間もパーツも無かったのでそのまま披露しただけ。本当はどこか一ひねりしたかったんだけど…。

ブレッドボード側にセンサーを付けてAndroid側に送るとか、Android側のセンサー値をArduinoに渡して何かするとかやれれば良かったね。ネタが考え付かなかったというのもあるのだけど。

参加した人たちの成果発表がどれも面白くて、成果発表もかなり盛り上がる。フルカラーのマトリクスLEDの着脱とか、ツイッターで温度をつぶやくとか、初めての人でもLCDに文字を出したり、センサーと組み合わせて色々動かしたり。

成果発表の様子は、facebookのAndroidの会 福岡支部のページか、UStreamの以下のURLから見れるので興味ある人はどうぞ。

今後、月1回くらいのペースでやるらしいので、ArduinoやPICマイコンや電子工作系など「ものづくり」をするイベントもこれから楽しみだなー。でも今度向けには何かネタ考えないとなぁ…。

2011-02-19 15.27.10

2011-02-19 16.54.02

2011-02-19 17.21.28

2011-02-19 17.22.31


Arduino + Bluetooth + Androidで遊ぶ

こないだの

Arduinoとブレッドボードを初めて触ってみた - きままな日記帳

で、Arduinoを使ってLEDとキャラクタLCDの制御はうまくいった。

私の目的は、Androidをメインにやっていることもあって「ArduinoとAndroidを組み合わせる」こと。ArduinoとAndroidを連携させるにはどうすればいいか調べてみた。

まず、AndroidデバイスからはWifiかBluetoothくらいしか外部のハードウェアとやりとりする手段が無い。BeagleBoardのようなボードならどうにでもなるだろうけど、市販のAndroidデバイスで考えるとワイヤレスで、となる。

ArduinoでWifi

WiFly Shield - SparkFun Electronics

WiShield 2.0

というものがあるらしいが、国内で扱っているところは無さそう。

もし入手できたらチャレンジしてみてもいいけど…。入手性が難なのでとりあえず今回はパス。

ArduinoでBluetooth

こちらはすでに例をたくさん見かける。

side2 » AndroidとArduinoの接続で使えそうなBluetoothモジュール
このような素晴らしいまとめもあるし。

探してみた結果、SparkfanのBluetoothMateがちょうどマルツパーツ博多店に在庫があったので、早速買ってきた。

値段は約6500円。分かってはいるけど高いよね…。

ArduinoでUSBホスト

ArduinoはUSBホストにもできるらしく、USBホストシールドなるものも売られていて、これとPC用のBluetoothドングル使えば良いのでは?と思って調べてみたものの、ドングルを制御するドライバっぽいものを書かないといけなさそうだし、いきなりチャレンジするにはハードルが高そうだったので断念。

USBホストシールドと、Arduino-BluetoothプロジェクトのGitHubに上がっているソースを使えば動くのかもしれないけど…。どのデバイスでもこれが適用できるのかな。WindowsとかでMicrosoft純正のドライバがインストールされるようなBluetoothデバイスならUBS的に規格が決まってるんだろうか。

ArduinoとBluetoothMateを繫げる

BluetoothMateはシリアル接続だ。

建築発明工作ゼミ2008: Arduino-Processing BlueTooth通信+曲げセンサ

これらのサイトを参考にすると、早い話がVcc/GND/Rx/Txを繋げばOKらしい。BluetoothMateからはCTS/RTSも出ているのだがArduino側に受けるピンが無い。フロー制御が効かないけど今回はクリティカルな用途では無いので目をつぶる。

実質配線は4本なので簡単。…といいつつ、ArduinoとBluetoothMateのRx/Txをクロスして繫げないといけないことにしばらく気づかなかったけど。

2011-01-23 04.26.25

Arduinoに電源を入れると赤ランプが点滅する。この間にPCやAndroidデバイスからペアリングしておく。

通信する

BluetoothMateはRFCOMMの扱いなので、Arduino上ではSerialクラスを使えば送受信できる。

Arduino側から定期的にSerial.write()するようにしておき、PC上でTeraTermを使ってCOMポートを開くときちんとデータの受信ができていた。とりあえず基本的な動作は問題ないようだ。

Android側の処理

Android側では、BluetoothAdapter/BluetoothDeviceクラスを使ってペアリング済みのリモートデバイスを取得し、BluetoothDevice#createRfcommSocketToServiceRecord()でRFCOMMのソケットを作成して接続。あとはStreamを張れば良い。

とりあえず受信だけ行うコードを以下に。テスト用とばかりにonCreate()で全部やってしまっている痛いコード。

package net.swingingblue.android.btarduino;

import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Set;
import java.util.UUID;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.util.Log;

public class SimpleBTTestMain extends Activity {

	private static final String LOG_TAG ="BT_Arduino";
	
	/* SPPで繋げる時のUUIDは決まっている模様 */
	private UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
	
	private BluetoothDevice btDevice;
	private BluetoothSocket btSocket;
	
	private Thread thread;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // Android端末ローカルのBTアダプタを取得
        BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
        // ペアリング済みのデバイス一覧を取得
        Set<BluetoothDevice> btDeviceSet = btAdapter.getBondedDevices();
        
        Iterator<BluetoothDevice> it = btDeviceSet.iterator();
        
        if(it.hasNext()){
        	// とりあえず最初にマッチしたもの。本来はちゃんとデバイス判定しないとダメ
        	btDevice = it.next();
        	Log.d(LOG_TAG, "btAddr = " + btDevice.getAddress());
        }
    
    	try {
    		// RFCOMM用のSocketを生成
			btSocket = btDevice.createRfcommSocketToServiceRecord(uuid);
			btSocket.connect();
			
			thread = new Thread(new Runnable() {
				@Override
				public void run() {
					try {
						// connectできればInputStream/OutputStreamで通信できる
						InputStream inStream = btSocket.getInputStream();
						
						int retByte = inStream.read();
						if (retByte != -1) {
							Log.d(LOG_TAG, "retData = " + Integer.toString(retByte));
						}
						
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			});
			
			thread.run();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
    }

	@Override
	protected void onPause() {
		super.onPause();
		
		thread.stop();
		try {
			btSocket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

キャラクタLCDと組み合わせる

このままだと固定データのやりとりだけだし、送受信データもAndroid側のLogcatを見るくらいしか手段が無い。

ふと、ちょうど昨日作ったキャラクタLCDに文字を出す回路とスケッチがあるのでそれと組み合わせてみようと思い立つ。キャラクタLCDもBluetoothMateも配線的にはバッティングしないので、そのままArduinoに繋げれば良い。

Arduinoのスケッチは、シリアルで受信したデータをバッファに入れ、1文字ずつLCDに表示させるように変更。

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12, 13);

int data[128]={};
int incomingByte;
int dataLength = 0;

void setup() {
  pinMode(6, OUTPUT);

  // set up the LCD's number of columns and rows: 
  lcd.begin(16,2);
  lcd.clear();
  
  Serial.begin(115200);
}

void loop() {
  // LCD Back light on
  digitalWrite(6,HIGH);

  // set the LCD cursor to (0,0):
  lcd.setCursor(0, 0);
  
  // see if there's incoming serial data:
  int count = Serial.available();
  if (count > 0) {
    Serial.print(count);
    dataLength = count;
    for (int i=0; i < count; i++) {
      // 一旦バッファに入れ繰り返し表示できるようにする
      incomingByte = Serial.read();
      data[i] = incomingByte;
    }
  }
  
  for (int i=0; i < dataLength; i++) {  
    lcd.write(data[i]);
    delay(300);
  }
  
  delay(300);
  lcd.clear();
  delay(300);
}

Android側は、EditTextとButtonを配置したActivityを作って、入力した英数字をButtonが押されたら送信してやるようにする。

とりあえずここまでは完成。

ここまで調べ物したり配線してコードを書いたりしながらで、約4~5時間くらいだと思う。

これから

ひとまず、Arduino側、Android側とも送受信のやり方が分かったので、あとは

・Arduino側に何を繋げていくか(センサ、アクチュエータ)
・Android側もGUIやデータの見せ方をどうするか、Android自身のセンサーなどと連動させるか

という「何を作るか」という段階に進むためのベースはできたと思う。

ひとつ、上記のArduinoの回路はキャラクタLCDとBluetoothMateの両方を繋いでいるので、電圧か電流が不足気味でキャラクタLCDのバックライトがチラつく。もう少し安定した電流を流してあげないとダメかと…。

参考にしたサイト

すでに参考になるサイトがたくさんあって、助かりました。

Bluetooth Mate Tutorial

建築発明工作ゼミ2008: Arduino-Processing BlueTooth通信+曲げセンサ

Blog: Arduino と Bluetooth


Arduinoとブレッドボードを初めて触ってみた

急に一日空いたので、こないだ秋葉で買ってきたArduino入門キットで遊んでみることにした。

2011-01-21 17.34.05

内容物はこんな感じ。

「普通のブレッドボード」という名前のブレッドボード入り。

2011-01-21 17.34.41

2011-01-21 17.36.01

本丸のArduino開封。箱が内側までカラフルで洒落てるんだな、これが…。

2011-01-21 17.44.35

さっそくUSBでPCに接続してドライバ入れてみた。どうも最初はLED点滅のスケッチが描き込まれているようで"L"LED(13番ピンと連動してるらしい)が点滅していた。

定番の"Lチカ"

この手のとっかかり、プログラム言語で言う"Hello world"的な"Lチカ"をやる。

どうやらGNDと出力ピンにLEDを差せばそれでOK、らしいのだけど本来は抵抗を挟んでやらないといけない。せっかくブレッドボードも手に入れたので、それに慣れるためにも真面目に配線してみる。

2011-01-21 17.54.52

持っているパーツ箱を漁ってみると

2011-01-21 17.57.09

いつ、何のために買ったのかすら覚えていないLED5個と抵抗が出てきた。抵抗は220~470Ωなら良さそうなのでちょうどいい。

2011-01-21 18.06.29

…ということで、初めてブレッドボードを使って配線してみたのがこちら。

Arduinoの箱を開けてから20分でここまでできた。配線にほとんど時間を費やし、Arduinoのスケッチはサンプルですでに入っているので時間はかかっていない。小さいジャンプワイヤは指先が器用じゃないと扱いづらいね…。

ふむ、"Lチカ"までは終わった。スケッチのコードの書き方も何となく理解できた。…まだLEDは余っているから、1個の時と同じように繋げればいいんだよな…と

2011-01-21 18.33.13

同じように配線し、スケッチのコードをちょっと変えてみると

単純だけど、ここまでは簡単だ…。

LCDを使う

さて、Lチカも終わったところで、次は16x2のキャラクタLCDに文字を出すのだ。

これがやりたくてこのArduino入門キットを買ったようなものだ。LCDなら他のことにも使えそうだし使い回しが利きそうだからね。

今度はちゃんと配線図を見ながら配線をしていく。

SD1602Hと書かれているLCDは、1~16番までピンがあるのだけど、14~1,15,16という順番なのでちょっと迷う。

2011-01-21 20.55.17

チマチマと配線して、スケッチを書く。

ピンを制御するコードをゴリゴリ書いて制御するのかと思っていたら、LiquidCrystalという超簡単なライブラリがあった。初期化して、あとはlcd.print("Hello Arduino!");って書くだけで表示された…。拍子抜けするくらい。

実は、LCDのVoピンをGNDに落とすのを忘れていて、表示されないなーと15分くらい悩んだけど。

ちょっとコードをいじって

順繰りに表示させるようにしてみたけど、これもあっさりと。

これくらいのレベルなら、ブレッドボード上の配線のほうが圧倒的に時間がかかる。ある程度きれいに作ろうとすると特に…。

今日やったのは、抵抗やらコンデンサやらをあまり使わずに単にArduinoのピンとLCDのピンを直接結んでいけばいいので楽といえば楽。これがもう少し色んな事を考えて回路作らないといけなくなると知識がほとんど無いので、そこら辺は勉強が要りそう。

これから

今日のところはLEDとLCDに出力したのみ。センサーを使ってないので次のステップはセンサーかな。買ったキットには明るさセンサが付いていたのでアナログ入力すれば値は取れるだろう。

あとやってみたいのはマトリクスLEDとか繫げてみたい。でも調べてみると

建築発明工作ゼミ2008: Arduino マトリクスLED1
建築発明工作ゼミ2008: Arduino マトリクスLED2/MAX7219

とまぁグッとハードルが上がる感がある。これは今後の課題に。

あとは、やっぱりAndroidとの連携。ネタはあまり思いついていないけど、いずれは。

Arduinoをはじめようキット Arduinoをはじめようキット

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

Amazonで詳しく見る by G-Tools

Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ (Make:PROJECTS) Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ (Make:PROJECTS)
小林 茂

オライリージャパン 2010-05-27
売り上げランキング : 5686

Amazonで詳しく見る by G-Tools


arduinoもいいけどmbedも面白そう

マイコン評価ボード「mbed」、高速プロトタイピングがなぜ可能なのか(前編) | EE Times Japan

こないだのHackathonでArduinoの話題を出したら、mbedってのもあるよ、と教えてもらった。

ARM Cortex-m3を使ったArduinoっぽいマイコンボード。

外箱を見たときに、これは話題になりかかった頃にWeb記事か何かで見たな…と思い出したものの、地味に人気があるらしいことには気づかずにスルーしていたようだ。

面白いのは、IDEがブラウザ上で動くことと、クラスライブラリがたくさんあってユーザーが公開できる環境があること、LANのジャックなども付けやすくできているとか、Arduinoも良いけどこれも面白そうなデバイス。

スイッチサイエンスに売ってそうだし、将来値上げするかもみたいな話もあるので興味ある人は入手してもいいのかも。

(追記)
mbedってUSBホストの機能もあるっぽいな・・・これは夢が広がりそう。


動画:メガネなしで3Dテレビを観る画期的発明 (自前シャッター式)

動画:メガネなしで3Dテレビを観る画期的発明 (自前シャッター式)

ぱっと見だとマッドなんだけど、なにげに

・スイッチ入れた直後に、左右の目の瞬きタイミングの同期を測ってる
・いきなりスピード全開ではなく、徐々に瞬きのスピードアップ

というところまで作り込んでるように見えるのが、なかなかだなーと。

あとはこんな笑えるデバイスをcoolにプレゼンしてるギャップが何とも。


スポンサーリンク