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

Preview:

DESCRIPTION

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

Citation preview

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

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

博士課程3年 辻 順平

情報科学若手の会2013

自己紹介

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

情報科学若手の会2013

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

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

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

応用

Ethernet

ZigBee (電波強度:RSSI)

計測

作っているもの (研究)

作っているもの (趣味)

情報科学若手の会2013

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

情報科学若手の会2013

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

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

情報処理若手の会2013

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

• 難しそう

• 爆発しそう

• 習ったことがない

• 触ったことない

• 始め方がわからない

• 値段が高い

• 購入が面倒

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

• 自分には必要ない

• かっこ悪い

• オタクっぽい

• マニアックそう

情報科学若手の会2013

電子工作に触る前の自分

• 難しそう

• 爆発しそう

• 習ったことがない

• 触ったことない

• 始め方がわからない

• 値段が高い

• 購入が面倒

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

• 自分には必要ない

• かっこ悪い

• オタクっぽい

• マニアックそう

情報科学若手の会2013

本日伝えたいこと

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

• マイコン怖くないよ

• マイコン楽しいよ

情報科学若手の会2013

今日話すマイコンボード

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

今日話すマイコンボード

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

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

情報科学若手の会2013

いろいろな Arduino

情報科学若手の会2013

いろいろな Arduino

Arduino UNO R3

情報科学若手の会2013

今日話すマイコンボード

※今日は話しません

情報科学若手の会2013

距離を測りたい

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

情報科学若手の会2013

距離を測りたい

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

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

情報科学若手の会2013

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

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

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

情報科学若手の会2013

本日伝えたいこと

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

• マイコン怖くないよ

• マイコン楽しいよ

情報科学若手の会2013

Arduino を勉強する環境

Arduino をはじめよう

情報科学若手の会2013

Arduino を勉強する環境

Prototyping Lab

情報科学若手の会2013

Arduino を勉強する環境

ドットインストール

情報科学若手の会2013

Arduino を勉強する環境

Arduino 日本語リファレンス

情報科学若手の会2013

Arduino を勉強する環境

建築発明工作ゼミ 2008

情報科学若手の会2013

Arduino を勉強する環境

SWITCH SCIECE, 秋月電子

情報科学若手の会2013

Arduino を勉強する環境

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

情報科学若手の会2013

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

情報科学若手の会2013

Arduino の起動

情報科学若手の会2013

Arduino を使う

情報科学若手の会2013

LEDを光らせる

GND Digital 13

情報科学若手の会2013

LEDを光らせる

GND Digital 13

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

情報科学若手の会2013

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

A0 5V

GND

V0 Vcc

GND

情報科学若手の会2013

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

A0 5V

GND

V0 Vcc

GND

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

情報科学若手の会2013

いろいろなセンサー

etc.

情報科学若手の会2013

DCモーターを動かす

Digital 9

GND

情報科学若手の会2013

DCモーターを動かす

Digital 9

GND

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

DCモーターを動かす

Digital 9

GND

OUT1

OUT2

IN1

IN2

モーター ドライバ 回路

Vin

GND

GND

5V

情報科学若手の会2013

DCモーターを動かす

外部電源が必要な場合も

Digital 9

GND

OUT1

OUT2

IN1

IN2

モーター ドライバ 回路

Vin

GND

GND

5V

GND

Vs

情報科学若手の会2013

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

DCモーターを動かす

モータードライバ: TA7291P

情報科学若手の会2013

DCモーターを動かす

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

Arduino

スタック

情報科学若手の会2013

DCモーターを動かす

情報科学若手の会2013

戦車ロボット

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

Ardumoto モータードライバ

Arduino UNO

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

タンク工作基本セット

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

ユニバーサルプレート

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

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

情報科学若手の会2013

Arduino Robot

情報科学若手の会2013

本日伝えたいこと

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

• マイコン怖くないよ

• マイコン楽しいよ

情報科学若手の会2013

Arduino 単体でも遊べるけれど

情報科学若手の会2013

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

情報科学若手の会2013

シリアル通信

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

ボーレート (baud rate)

コムポート (COM port)

シリアル通信

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

通信速度 (9600 bps など)

情報科学若手の会2013

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

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

Processing ×

Arduino 情報科学若手の会2013

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

Processing と Arduino の連携

void draw() {

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

情報科学若手の会2013

Cloud Computing

× Arduino

情報科学若手の会2013

Twitter Streaming API との連携

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

情報科学若手の会2013

OpenFrameworks ×

Arduino 情報科学若手の会2013

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

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

情報科学若手の会2013

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

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

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

情報科学若手の会2013

Open CV ×

Arduino 情報科学若手の会2013

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

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

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

情報科学若手の会2013

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

C++ アプリケーション

Arduino uno

3D描画 モジュール

(Ogre)

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

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

Web Camera

管理操作用 のみ

完全自律制御

情報科学若手の会2013

×

Arduino 情報科学若手の会2013

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

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

LEAP MOTION ×

Arduino 情報科学若手の会2013

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

情報科学若手の会2013

LEAP MOTION と Arduino ロボットの連携

デモ

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

LEAP MOTION と Arduino ロボットの連携

WebSocket シリアル通信

情報科学若手の会2013

node -serialport

Socket.IO socket.io.js

LEAP MOTION と Arduino ロボットの連携

Socket.IO

WebSocket シリアル通信

情報科学若手の会2013

情報科学若手の会2013

情報科学若手の会2013

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

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

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

情報科学若手の会2013

まとめ

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

ソフト屋さんのみなさん

(組み込みでモテよう)

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

情報科学若手の会2013

Recommended