73
組み込みやろうぜ! ソフト屋さん向けの電子工作講座 北海道大学 大学院情報科学研究科 複合情報学専攻 調和系工学研究室 博士課程3年 順平 情報科学若手の会2013

組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Embed Size (px)

DESCRIPTION

2013.9.14-16 に開催の情報科学若手の会( #wakate2013 ) で発表した資料です。

Citation preview

Page 1: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

組み込みやろうぜ! ソフト屋さん向けの電子工作講座

北海道大学 大学院情報科学研究科 複合情報学専攻 調和系工学研究室

博士課程3年 辻 順平

情報科学若手の会2013

Page 2: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

自己紹介

辻 順平(北大DC3) Twitter: @tsujimotter Facebook: junpeitsuji Github: junpeitsuji

情報科学若手の会2013

Page 3: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

ZigBeeを用いた屋内測位システム

サーバ側でRSSIを収集し測位計算することで 端末を持つ利用者・従業員の位置や移動軌跡を収集できる仕組み

イベント参加者の動態分析[中村ほか,2006] 位置に注目した非日常状態検出[青木ほか,2004] 医療スタッフの動態分析[納谷ほか,2005]

応用

Ethernet

ZigBee (電波強度:RSSI)

計測

作っているもの (研究)

Page 4: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

作っているもの (趣味)

情報科学若手の会2013

Page 5: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

フィジカルコンピューティング勉強会

情報科学若手の会2013

Page 6: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

下記のいずれかに当てはまる人

・ ハードウェアが嫌い ・ ハードウェアに苦手意識がある ・ ハードウェアに興味がない

情報処理若手の会2013

Page 7: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

なぜ嫌い?なぜ苦手?なぜ興味がない?

• 難しそう

• 爆発しそう

• 習ったことがない

• 触ったことない

• 始め方がわからない

• 値段が高い

• 購入が面倒

• 何ができるのかわからない

• 自分には必要ない

• かっこ悪い

• オタクっぽい

• マニアックそう

情報科学若手の会2013

Page 8: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

電子工作に触る前の自分

• 難しそう

• 爆発しそう

• 習ったことがない

• 触ったことない

• 始め方がわからない

• 値段が高い

• 購入が面倒

• 何ができるのかわからない

• 自分には必要ない

• かっこ悪い

• オタクっぽい

• マニアックそう

情報科学若手の会2013

Page 9: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

本日伝えたいこと

• ソフトウェア系こそマイコン

• マイコン怖くないよ

• マイコン楽しいよ

情報科学若手の会2013

Page 10: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

今日話すマイコンボード

Arduino (アルドゥイーノ) 情報科学若手の会2013

Page 11: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

今日話すマイコンボード

アナログポート (センサー入力)

デジタル入出力 (LED, モーターなど)

情報科学若手の会2013

Page 12: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

いろいろな Arduino

情報科学若手の会2013

Page 13: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

いろいろな Arduino

Arduino UNO R3

情報科学若手の会2013

Page 14: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

今日話すマイコンボード

※今日は話しません

情報科学若手の会2013

Page 15: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

距離を測りたい

マイコンボードはインターフェース

情報科学若手の会2013

Page 16: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

距離を測りたい

マイコンボードはインターフェース

頭の中のアイデア(妄想)を現実世界に 落とし込むためのインターフェース マイコンボード

情報科学若手の会2013

Page 17: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

にて公開中!! バックブレーダー 検索

高性能AIによる完全自律走行 サテライトシステムによるマシントラッキング パワーブースター機能 測距センサを用いた障害物回避

夢のマシン「バックブレーダー」 実現!

情報科学若手の会2013

Page 18: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

本日伝えたいこと

• ソフトウェア系こそマイコン

• マイコン怖くないよ

• マイコン楽しいよ

情報科学若手の会2013

Page 19: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino を勉強する環境

Arduino をはじめよう

情報科学若手の会2013

Page 20: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino を勉強する環境

Prototyping Lab

情報科学若手の会2013

Page 21: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino を勉強する環境

ドットインストール

情報科学若手の会2013

Page 22: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino を勉強する環境

Arduino 日本語リファレンス

情報科学若手の会2013

Page 23: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino を勉強する環境

建築発明工作ゼミ 2008

情報科学若手の会2013

Page 24: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino を勉強する環境

SWITCH SCIECE, 秋月電子

情報科学若手の会2013

Page 25: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino を勉強する環境

123D Circuit.io: http://123d.circuits.io

情報科学若手の会2013

Page 26: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino のインストール (Windows 7 の場合)

情報科学若手の会2013

Page 27: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino の起動

情報科学若手の会2013

Page 28: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino を使う

情報科学若手の会2013

Page 29: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

LEDを光らせる

GND Digital 13

情報科学若手の会2013

Page 30: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

LEDを光らせる

GND Digital 13

void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }

情報科学若手の会2013

Page 31: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

センサーのデータを取得する

A0 5V

GND

V0 Vcc

GND

情報科学若手の会2013

Page 32: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

センサーのデータを取得する

A0 5V

GND

V0 Vcc

GND

void setup() { } void loop() { // 0 - 1023 の間でセンサー値を取得 int value = analogRead(A0); // 距離 [cm] に変換 int range = ((6787 / (voltage - 3)) - 4); }

情報科学若手の会2013

Page 33: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

いろいろなセンサー

etc.

情報科学若手の会2013

Page 34: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

DCモーターを動かす

Digital 9

GND

情報科学若手の会2013

Page 35: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

DCモーターを動かす

Digital 9

GND

電流が足りない!! 情報科学若手の会2013

Page 36: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

DCモーターを動かす

Digital 9

GND

OUT1

OUT2

IN1

IN2

モーター ドライバ 回路

Vin

GND

GND

5V

情報科学若手の会2013

Page 37: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

DCモーターを動かす

外部電源が必要な場合も

Digital 9

GND

OUT1

OUT2

IN1

IN2

モーター ドライバ 回路

Vin

GND

GND

5V

GND

Vs

情報科学若手の会2013

Page 38: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

DCモーターを動かす

Digital 9

GND

OUT1

OUT2

IN1

IN2

モーター ドライバ 回路

Vin

GND

GND

5V

const int outputPin = 9; void setup(){ pinMode(outputPin,OUTPUT); } void loop(){ int rotation = 255; // 回転速度を 0 - 255 で指定 analogWrite(outputPin, rotation); delay(100); }

情報科学若手の会2013

Page 39: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

DCモーターを動かす

モータードライバ: TA7291P

情報科学若手の会2013

Page 40: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

DCモーターを動かす

Ardumoto (Arduino専用モータードライバシールド)

Arduino

スタック

情報科学若手の会2013

Page 41: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

DCモーターを動かす

情報科学若手の会2013

Page 42: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

戦車ロボット

赤外線測距 モジュール (×2)

Ardumoto モータードライバ

Arduino UNO

TAMIYA 楽しい工作シリーズ No.108

タンク工作基本セット

TAMIYA 楽しい工作シリーズ No.157

ユニバーサルプレート

TAMIYA 楽しい工作シリーズ No.168

ダブルギヤボックス 左右独立4速タイプ

情報科学若手の会2013

Page 43: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino Robot

情報科学若手の会2013

Page 44: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

本日伝えたいこと

• ソフトウェア系こそマイコン

• マイコン怖くないよ

• マイコン楽しいよ

情報科学若手の会2013

Page 45: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino 単体でも遊べるけれど

情報科学若手の会2013

Page 46: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Arduino を PC につなげると可能性は無限大に

情報科学若手の会2013

Page 47: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

シリアル通信

PC-マイコン間の テキスト通信

ボーレート (baud rate)

コムポート (COM port)

シリアル通信

通信端末の識別子 (COM10 など)

通信速度 (9600 bps など)

情報科学若手の会2013

Page 48: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

PC-マイコン間の テキスト通信

ボーレート (baud rate)

コムポート (COM port)

シリアル通信

通信端末の識別子 (COM10 など)

通信速度 (9600 bps など)

シリアル通信のライブラリ

C++ (openFrameworks)

Java

Processing

Ruby

JavaScript (node.js)

ofSerial

RXTX library

processing.serial.*

ruby-serialport

node-serialport

情報科学若手の会2013

Page 49: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

PC-マイコン間の テキスト通信

ボーレート (baud rate)

コムポート (COM port)

シリアル通信

通信端末の識別子 (COM10 など)

通信速度 (9600 bps など)

Arduino側のシリアル通信

int incomingByte = 0; int outgoingByte = 0; void setup() { Serial.begin(9600); } void loop() { if( Serial.available() > 0 ){ incomingByte = Serial.read(); outgoingByte = incomingByte+1; Serial.println((char)outgoingByte); } }

シリアル通信で受信した文字のアスキーコードを ”+1” して返す Arduino スケッチ

情報科学若手の会2013

Page 50: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Processing ×

Arduino 情報科学若手の会2013

Page 51: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Processing と Arduino の連携

import processing.serial.*; Serial arduino; void setup() { size(400, 400); frameRate(10); if( Serial.list().length > 0 ) { arduino = new Serial(this, Serial.list()[0], 9600); arduino.bufferUntil('¥n'); } else { arduino = null; } }

情報科学若手の会2013

Page 52: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Processing と Arduino の連携

void draw() {

if( arduino != null ){ int x = 100; // arduino にデータを書き込む arduino.write(value); } } void serialEvent(Serial arduino){ // arduino からのデータを読み込む int x = arduino.read(); }

情報科学若手の会2013

Page 53: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Cloud Computing

× Arduino

情報科学若手の会2013

Page 54: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Twitter Streaming API との連携

Timelineの風 • Twitter4j の Twitter Streaming API を使って、 「Twitter」を含むツイートの数を取得。 • ツイート数とモーターの回転数を連動。

情報科学若手の会2013

Page 55: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

OpenFrameworks ×

Arduino 情報科学若手の会2013

Page 56: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

ofSerial を使ったArduinoからのデータ取得

#pragma once #include "ofMain.h" class testApp : public ofBaseApp{ public: void setup(); void update(); void draw(); ... private: ofSerial serial; // シリアル通信のオブジェクト };

情報科学若手の会2013

Page 57: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

ofSerial を使ったArduinoからのデータ取得

void testApp::update(){ // check for data if ( serial.available() > 0 ) { // 1 byte の文字を取得 char byte = serial.readByte(); printf("%c¥n", byte); } }

void testApp::setup(){ // シリアル通信の設定 serial.listDevices(); serial.setup("COM10", 9600); }

※シリアル通信のReadLineの方法: SURERS KUMAR / SENDING STRINGS FROM ARDUINO TO OPENFRAMEWORKS,

http://sureskumar.wordpress.com/2012/12/17/sending-strings-from-arduino-to-openframeworks/

情報科学若手の会2013

Page 58: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

ofSerial を使ったArduinoからのデータ取得

赤外線測距センサーを使ったターゲッティング

情報科学若手の会2013

Page 59: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

Open CV ×

Arduino 情報科学若手の会2013

Page 60: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

にて公開中!! バックブレーダー 検索

高性能AIによる完全自律走行 サテライトシステムによるマシントラッキング パワーブースター機能 測距センサを用いた障害物回避

OpenCV の画像トラッキング+Arduinoロボット

情報科学若手の会2013

Page 61: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

OpenCV の画像トラッキング+Arduinoロボット

C++ アプリケーション

Arduino uno

3D描画 モジュール

(Ogre)

画像解析 モジュール (OpenCV)

ミニ四駆操作用 XBee通信モジュール (Boost)

Web Camera

管理操作用 のみ

完全自律制御

情報科学若手の会2013

Page 62: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

×

Arduino 情報科学若手の会2013

Page 63: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

node-serialport モジュールを使ったシリアル通信

var serialport = require('serialport'); var portName = 'COM9'; // Windows 環境 var sp = new serialport.SerialPort(portName, { baudRate: 115200, dataBits: 8, parity: 'none', stopBits: 1, flowControl: false, parser: serialport.parsers.readline("¥n") });

情報科学若手の会2013

Page 64: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

node-serialport モジュールを使ったシリアル通信

// data from Serial port sp.on('data', function(input) { var buffer = new Buffer(input, 'utf8'); console.log(buffer); }); sp.on('close', function(err) { }); sp.on('open', function(err) { });

情報科学若手の会2013

Page 65: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

LEAP MOTION ×

Arduino 情報科学若手の会2013

Page 66: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

念力スカートめくり機/Leap Motion + node.js + Arduinoでサーボモーター駆動 http://b.denkizakana.com/2013/08/leap-motion-nodejs-arduino.html

情報科学若手の会2013

Page 67: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

LEAP MOTION と Arduino ロボットの連携

デモ

https://github.com/junpeitsuji/leap_arduino Github: 情報科学若手の会2013

Page 68: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

LEAP MOTION と Arduino ロボットの連携

WebSocket シリアル通信

情報科学若手の会2013

Page 69: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

node -serialport

Socket.IO socket.io.js

LEAP MOTION と Arduino ロボットの連携

Socket.IO

WebSocket シリアル通信

情報科学若手の会2013

Page 70: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

情報科学若手の会2013

Page 71: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

情報科学若手の会2013

Page 72: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

にて公開中!! バックブレーダー 検索

高性能AIによる完全自律走行 サテライトシステムによるマシントラッキング パワーブースター機能 測距センサを用いた障害物回避

夢のマシン「バックブレーダー」 実現!

情報科学若手の会2013

Page 73: 組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )

まとめ

一緒に 組み込みやろうぜ!

ソフト屋さんのみなさん

(組み込みでモテよう)

辻 順平(北大DC3) Twitter: @tsujimotter Facebook: junpeitsuji Github: junpeitsuji

情報科学若手の会2013