Upload
yoshimasa-kawano
View
167
Download
1
Embed Size (px)
Citation preview
Raspberry Piでラズベリーパイを
おいしいプログラム開発 テキストDELiveWorkshop
秘密結社オープンフォース
今日の予定
● ログイン● 動作モニター● カチカチしてみる● アナログを測ってみる● 室温を測る● 内部温度を測る● プログラム作る● クッキング!● 食べる!!
DELive
● 珪藻土などの高断熱素材を使った石窯● イベントに運び入れて組み立てて使用● ピザが500℃で90秒
● パイが300℃で180秒
ログイン
● 石窯DELiveに
● sshで!
● コントローラにRaspberry Piを使っている
● ユーザ名 pi● パスワード raspberry
GPIO
● ON/OFFすると● ランプが点滅● ヒーターも点滅● ヒーターをチカチカしてみよう● sudo gpio write 0 1 で上側ヒータON● sudo gpio write 1 1 で下側ヒータON● sudo gpio write 0 0 で上側ヒータOFF● sudo gpio write 1 0 で下側ヒータOFF
温度を測る
● アナログは扱えないため● MCP3008● 通信● SPI
サーミスタ● 温度によって抵抗値が変わる● あまり高温は測れない
– ここで使用しているのは最大125℃
● 計算式
R=Ro×e^(B(1/T)-(1/To))
– Ro :基準温度 To における抵抗値● ここでは10kΩ (25℃ ・・・298K)
– R : 測りたい温度 T における抵抗値
– B : サーミスタの種類による定数● ここでは3380 (25〜50 )℃
抵抗を求めるには?
● 5Vの値をRとTH
の抵抗の割合で分圧
R 10kΩ
5V
ここの電圧がいくらか?
TH(サーミスタ)25℃のときに10kΩ温度が高くなると抵抗が下がる
電圧を測るには?
● MCP3008で電圧の
値を測ることができる● 0~5Vを0~1024の値で
表現する● MCP3008とRaspberry Pi
とはSPIで接続する
R 10kΩ
5V
ここの電圧がいくらか?
サーミスタ25℃のときに10kΩ温度が高くなると抵抗が下がる
熱電対
● 異なる2種の金属を接すると温度差で発電する● クロメル・アルメルという合金を使ったのがK型熱
電対● 最高1250℃
● 約40.7μV/℃● 非常に微弱● 温度差しかわからない
熱電対で温度を測るには
● 非常に微弱● オペアンプで100倍に増幅
● 約40.7μV/℃→ ???● 500℃差だと ???● 温度差しかわからないので● ???
いろんな言語
● C● bash● Python● java● JavaScript● Scratch
WiringPi
bash
● WiringPiを使う● 下準備● spiはラッパーを使う
ポートを読み込みモードにgpio mode 0 read
ポートを書き込みモードにgpio mode 0 write
ポート全部の確認gpio readall
ポートの読み込みgpio read 0
ポートに書き込みgpio write 0
spi使う 256KBバッファ確保gpio load spi 256
C
● WiringPiを使う下準備#include <wiringPi.h>
ポートを読み込みモードに pinMode(0,INPUT);
ポートを書き込みモードに pinMode(0,OUTPUT);
ポートの読み込みhogehoge = digitalRead(0);
ポートに書き込み digitalWrite(0,HIGH);
spi使う 256KBバッファ確保
#include <wiringPiSPI.h> wiringPiSetup(); if ( -1 == wiringPiSPISetup(0,1000000) ) { printf("SPI setup error!"); exit(1); }
Python
● cf.,● 「Raspberry Pi 電子工作レシピ」
php
●
準備 wiringPiSetup();
ポートを読み込みモードに pinMode(0,INPUT);
ポートを書き込みモードに pinMode(0,OUTPUT);
ポートの読み込みhogehoge = digitalRead(0);
ポートに書き込み digitalWrite(0,HIGH);
spi使う 256KBバッファ確保
if ( -1 == wiringPiSPISetup(0,1000000) ) { printf("SPI setup error!"); exit(1); }
● インストールapache2, php5, php5-dev などをインストールしておき適切に設定しておくgit clone --recursive https://github.com/WiringPi/WiringPi-PHP.gitcd WiringPi-PHP./build.shsudo ./install.sh
java
● pi4j● http://pi4j.com/● sudo apt-get install oracle-java8-jdk● curl -s get.pi4j.com | sudo bash● lircを無効にしておく
● sudo /etc/init.d/lirc stop● sudo rmmod lirc_rpi● sudo rmmod lirc_dev● コンパイル● javac -classpath .:classes:/opt/pi4j/lib/'*' -d . ControlGpioExample.java● 実行 ● sudo java -classpath .:classes:/opt/pi4j/lib/'*' ControlGpioExample
JavaScript
● Node.js + WiringPiを使う
● wget http://node-arm.herokuapp.com/node_latest_armhf.deb● とすると、v0.11.12が入手できるが● WiringPiがまだ対応出来ていない
設定方法nodebrewからインストールはうまくいかなかった。http://node-arm.herokuapp.com よりダウンロード wget http://node-arm.herokuapp.com/node_0.10.36_armhf.deb sudo dpkg -i node_0.10.36_armhf.debsudo npm install -g node-gypsudo npm install -g wiring-pi
動作確認$ node -vv0.12.1$ npm -v2.5.1
Scratch
● cf., Raspberry Piではじめるどきどきプログラミング
SPI
● MCP3008の通信方法は、データシートを見て
プログラムします。● Cのプログラムは以下の通り
● MCP3008.c(./MCP3008)というプログラムを呼び出してもOK
int MCP3008Read( int channel ){ int spireturn,data; spidata[0]= 1; spidata[1]= ( 0x80 | channel << 4 ) ; spidata[2]= 0; spireturn = wiringPiSPIDataRW( 0, spidata , SPIBUFFSIZE ); data = ((spidata[1]&3) << 8) + spidata[2];return(data);}
電圧
● MCP3008● チャンネル0 サーミスタ
● チャンネル1〜3 空き
● チャンネル4 ヒータ上側の熱電対の電圧 x 100倍
● チャンネル5 ヒータ下側の熱電対の電圧 x 100倍
● チャンネル6 予備の熱電対の電圧 x 100倍
● チャンネル7 空き
食べよう!!