23
Raspberry Pi でラズベリーパイを おいしいプログラム開発 テキスト DELiveWorkshop 秘密結社オープンフォース

De workshop text20150704

Embed Size (px)

Citation preview

Page 1: De workshop text20150704

Raspberry Piでラズベリーパイを

おいしいプログラム開発 テキストDELiveWorkshop

秘密結社オープンフォース

Page 2: De workshop text20150704

今日の予定

● ログイン● 動作モニター● カチカチしてみる● アナログを測ってみる● 室温を測る● 内部温度を測る● プログラム作る● クッキング!● 食べる!!

Page 3: De workshop text20150704

DELive

● 珪藻土などの高断熱素材を使った石窯● イベントに運び入れて組み立てて使用● ピザが500℃で90秒

● パイが300℃で180秒

Page 4: De workshop text20150704

ログイン

● 石窯DELiveに

● sshで!

● コントローラにRaspberry Piを使っている

● ユーザ名 pi● パスワード raspberry

Page 5: De workshop text20150704

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

Page 6: De workshop text20150704

温度を測る

● アナログは扱えないため● MCP3008● 通信● SPI

Page 7: De workshop text20150704

サーミスタ● 温度によって抵抗値が変わる● あまり高温は測れない

– ここで使用しているのは最大125℃

● 計算式

R=Ro×e^(B(1/T)-(1/To))

– Ro :基準温度 To における抵抗値● ここでは10kΩ (25℃ ・・・298K)

– R : 測りたい温度 T における抵抗値

– B : サーミスタの種類による定数● ここでは3380 (25〜50 )℃

Page 8: De workshop text20150704

抵抗を求めるには?

● 5Vの値をRとTH

の抵抗の割合で分圧

R 10kΩ

5V

ここの電圧がいくらか?

TH(サーミスタ)25℃のときに10kΩ温度が高くなると抵抗が下がる

Page 9: De workshop text20150704

電圧を測るには?

● MCP3008で電圧の

値を測ることができる● 0~5Vを0~1024の値で

表現する● MCP3008とRaspberry Pi

とはSPIで接続する

R 10kΩ

5V

ここの電圧がいくらか?

サーミスタ25℃のときに10kΩ温度が高くなると抵抗が下がる

Page 10: De workshop text20150704

熱電対

● 異なる2種の金属を接すると温度差で発電する● クロメル・アルメルという合金を使ったのがK型熱

電対● 最高1250℃

● 約40.7μV/℃● 非常に微弱● 温度差しかわからない

Page 11: De workshop text20150704

熱電対で温度を測るには

● 非常に微弱● オペアンプで100倍に増幅

● 約40.7μV/℃→ ???● 500℃差だと ???● 温度差しかわからないので● ???

Page 12: De workshop text20150704

いろんな言語

● C● bash● Python● java● JavaScript● Scratch

Page 13: De workshop text20150704

WiringPi

Page 14: De workshop text20150704

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

Page 15: De workshop text20150704

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); }

Page 16: De workshop text20150704

Python

● cf.,● 「Raspberry Pi 電子工作レシピ」

Page 17: De workshop text20150704

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

Page 18: De workshop text20150704

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

Page 19: De workshop text20150704

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

Page 20: De workshop text20150704

Scratch

● cf., Raspberry Piではじめるどきどきプログラミング

Page 21: De workshop text20150704

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);}

Page 22: De workshop text20150704

電圧

● MCP3008● チャンネル0 サーミスタ

● チャンネル1〜3 空き

● チャンネル4 ヒータ上側の熱電対の電圧 x 100倍

● チャンネル5 ヒータ下側の熱電対の電圧 x 100倍

● チャンネル6 予備の熱電対の電圧 x 100倍

● チャンネル7 空き

Page 23: De workshop text20150704

食べよう!!