Raspberry Pi 3でエアコン一体型パソコン「airpi」を作る!

  • 11
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

「優しいIT」という理念の基、ITコンサルタントをしている亀井亮介と申します!
現在、仕事では要求分析・要件定義を中心に上流工程をしていますが、プログラムも書きます!
優しいIT活動の一環として「教育用ようにプログラミング可能なPCを安価に提供する」理念の「Raspberry Pi 3(通称ラズパイ)」 で製作したモノ・サービス・プログラムを紹介します!

仕様

ラズパイコンテスト2016年に参加しよう!
と、娘に持ちかけ企画書を書いてもらいました〜
その名も「エアコン一体型パソコン airpi」です!

出来上がり

モーターが非力で風があまり出ませんでした(笑)
筐体を変えたり、電圧上げてファンを強力にすれば実用的になるかもしれません。

外観

エアコン一体型パソコンairberry.png
(ラズパイだし、tux paintで書きました。)

仕様

センサー付きエアコン 部屋を自動で涼しくする
温度設定27℃(ラズパイで温度設定が可能)
暑い時
1. 温度が上がる
2. センサーがキャッチ
3. ラズベリーパイが読み込む
4. 部屋を27℃にする              

寒い時
1. 温度が下がる
2. センサーがキャッチ
3. ラズベリーパイが読み込む
4. 一回止める

アピール
パソコンを使っているとき、風が出て涼しくなる。

実装

本当は、娘に全てやらせたかったのですが、離れて住んでいるために、ここからは父が引き取ります。

参考

ラズパイマガジン-2016年6月号 特集1 アキバの人気パーツ 配線図ベスト17
ラズパイマガジン-2016年8月号 特集1 電子工作12の基本パターン

手順

デジタル温度センサー「ADT7410」とモータードライバーを利用します。
1. 【準備】 libi2c-devをインストール
2. 【準備】 設定ファイルに書き込み
3. 【準備】 I2Cを使えるように設定
4. 【準備】 I2Cが使えるか確認
5. デジタル温度センサーの回路図
6. デジタル温度センサーの値を取得 digital_temperature_sensor.py
7. デジタル温度センサーのプログラムを動かす
8. モータードライバーとモーターを加えた回路図
9. 設定温度により、エアコンのオンオフを制御するプログラム airpi.py
10. airpiを動かす

1. 【準備】 libi2c-devをインストール

デジタル温度センサー「ADT7410」を利用するには、libi2c-devのインストールが必要です!
bash:libi2c-devをインストール
$ sudo apt-get install libi2c-dev

2. 【準備】 設定ファイルに書き込み

/etc/modprobe.d/i2c.confに設定書き込み
$ sudo sh -c 'echo "options i2c_bcm2708 combined=1" >> /etc/modprobe.d/i2c.conf'

3. 【準備】 I2Cを使えるように設定

Menu
→設定
→Raspberryの設定
→インターフェースタブ
→I2Cを「有効」
→「OK」をクリック

I2Cの設定動画解説クリック→

4. 【準備】 I2Cが使えるか確認

i2cdetectで確認(1の部分バージョンによって0らしい)
$ sudo /usr/sbin/i2cdetect -y 1

I2Cを使えるかどうかの確認.png

5. デジタル温度センサーの回路図

circuit.png

6. デジタル温度センサーの値を取得 digital_temperature_sensor.py

プログラムはラズパイマガジン-2016年6月号 特集1 アキバの人気パーツ 配線図ベスト17 ⑥デジタル温度センサーを参考にしました。

GitHubにソースをアップしているので、お好きにお使いください。

gitでcloneする
$ git clone https://github.com/RyosukeKamei/raspberrypi3.git
digital_temperature_sensor.py
# 準備
# $ sudo apt-get install libi2c-dev 
# $ sudo sh -c 'echo "options i2c_bcm2708 combined=1" >> /etc/modprobe.d/i2c.conf'

# GPIOを制御するライブラリ
import wiringpi
# タイマーのライブラリ
import time
# I2Cデバイスからの読み取りに必要なライブラリを呼び出す
import os
import struct
# 引数取得
import sys

# 引数指定
param = sys.argv
set_temperture = int(param[1])
print("設定温度 ", set_temperture)

# I2Cのインスタンスを作成
wiringpi.wiringPiSetup()
i2c = wiringpi.I2C()

# I2Cの設定
# 通信する機器のI2Cアドレスを指定
temperture_dev = i2c.setup(0x48)

# 温度を16ビットのデータ取得
# その他めレジスタ0x03に設定
i2c.writeReg8(temperture_dev, 0x03, 0x80)

while True:
    # 温度センサーの2バイト分を読み取る
    temperture_data = struct.unpack('2B', os.read(temperture_dev, 2))

    # 値が2バイトずつ分かれるので1つにまとめる
    temperture = ( ( temperture_data[0] << 8 ) + temperture_data[1] )

    # 負の値の場合は数値を変換
    if ( temperture_data[0] >= 0x80 ):
        temperture = temperture - 65536

    # 取得した値を128で割って温度を算出
    temperture = temperture / 128

    # 温度表示
    print ( "温度 " , temperture , "C" )

    if ( temperture > set_temperture ):
        print ( "設定温度より室温が高いのでエアコンをつける" )
    else:
        print ( "設定温度より室温が低いのでエアコンを消す" )

    # 1秒ごと
    time.sleep(1)

7. デジタル温度センサーのプログラムを動かす

設定温度を28℃に設定
$ sudo python3 digital_temperature_sensor.py 28

ラズパイ温度計.png

8. モータードライバーとモーターを加えた回路図

先ほどの回路図(ブレッドボードですが)に、モータを制御するためのモータードライバー(TA7291P)とモーターを回路図に加えました。
circuit_final.png

9. 設定温度により、エアコンのオンオフを制御するプログラム airpi.py

airpi.py
# 準備
# $ sudo apt-get install libi2c-dev 
# $ sudo sh -c 'echo "options i2c_bcm2708 combined=1" >> /etc/modprobe.d/i2c.conf'

# GPIOを制御するライブラリ
import wiringpi
# タイマーのライブラリ
import time
# I2Cデバイスからの読み取りに必要なライブラリを呼び出す
import os
import struct
# 引数取得
import sys

# GPIO端子の設定
motor1_pin = 23
motor2_pin = 24

# GPIO出力モードを1に設定する
wiringpi.wiringPiSetupGpio()
wiringpi.pinMode( motor1_pin, 1 )
wiringpi.pinMode( motor2_pin, 1 )

# 引数指定
param = sys.argv
set_temperture = int(param[1])
print("設定温度 ", set_temperture)

# I2Cのインスタンスを作成
i2c = wiringpi.I2C()

# I2Cの設定
# 通信する機器のI2Cアドレスを指定
temperture_dev = i2c.setup(0x48)

# 温度を16ビットのデータ取得
# その他めレジスタ0x03に設定
i2c.writeReg8(temperture_dev, 0x03, 0x80)

while True:
    # 温度センサーの2バイト分を読み取る
    temperture_data = struct.unpack('2B', os.read(temperture_dev, 2))

    # 値が2バイトずつ分かれるので1つにまとめる
    temperture = ( ( temperture_data[0] << 8 ) + temperture_data[1] )

    # 負の値の場合は数値を変換
    if ( temperture_data[0] >= 0x80 ):
        temperture = temperture - 65536

    # 取得した値を128で割って温度を算出
    temperture = temperture / 128

    # 温度表示
    print ( "温度 " , temperture , "C" )

    if ( temperture > set_temperture ):
        print ( "設定温度より室温が高いのでエアコンをつける" )
        wiringpi.digitalWrite( motor1_pin, 1 )
        wiringpi.digitalWrite( motor2_pin, 0 )
    else:
        print ( "設定温度より室温が低いのでエアコンを消す" )
        wiringpi.digitalWrite( motor1_pin, 0 )
        wiringpi.digitalWrite( motor2_pin, 0 )
    # 1秒ごと
    time.sleep(1)

10. airpiを動かす

設定温度は28℃
$ sudo python3 airpi.py 28

動いている様子

サイトマップ

Raspberry Pi 3 (ラズパイ)セットアップ

Raspberry Pi 3インストール→無線LAN→日本語入出力→Macから操作

Raspberry Pi 3 にDockerを乗せてPython+MySQL環境を構築!

RaspberryPi3(ラズパイ)にDockerをインストール
RaspberryPi3(ラズパイ)にDockerでPython+bottle+MySQL環境構築する!【簡単構築編】
RaspberryPi3(ラズパイ)にDockerでPython+bottle+MySQL環境構築する!【試行錯誤編】

Raspberry Pi 3でエアコン一体型パソコン「airpi」を作る!

Raspberry Pi 3でエアコン一体型パソコン「airpi」を作る!

ついに…Raspberry Pi 3でpythonを使いラジコンを作る!

ボタン押している間モーターが動く
磁石を近づけている間モータが動く
磁石を近づけるとモータが動き、自動で止まる

Raspberry Pi 3 (ラズパイ)とpythonで遊ぼう ラズパイ奮闘の記録

Raspberry Pi 3でプログラミングをする Node-REDと普通にプログラミング
Raspberry Pi 3でpythonを使いLEDを光らせる(Hello World)
Raspberry Pi 3でスイッチの状態を検出する
Raspberry Pi 3でpythonを使いサーボモータを動かす
Raspberry Pi 3でpythonを使いモータードライバーを使いモータを制御する!
Raspberry Pi 3でpythonを使いスライドスイッチを検出する!
Raspberry Pi 3でpythonを使い磁石スイッチを検出する!
Raspberry Pi 3でpythonを使い温度を検出する!
Raspberry Pi 3でpythonを使いブザーを鳴らす!
Raspberry Pi 3でpythonを使いA/Dコンバーターでアナログ信号を検出する!
Raspberry Pi 3でpythonを使い「明るさ」を検出する!
Raspberry Pi 3でpythonを使い「温度(A/Dコンバーターを利用)」を検出する!
Raspberry Pi 3でpythonを使い「7セグメントLED」に出力する!
Raspberry Pi 3でpythonを使いスイッチ制御でLEDを光らせる!
Raspberry Pi 3でpythonを使い暗くなったらLEDを光らせる!

テスト駆動開発を重点においた規則

コーディング規則「優しいコードを書こう」(FuelPHP)
命名規則「3ヶ月後の自分自身に優しく、チームに優しく、まだ見ぬメンバーに優しく」

Docker+PythonでWebアプリケーション開発

Docker上のCentOSにPython3と、関連ライブラリpip, virtualenvとフレームワークDjango, bottle, Flaskのインストール!これらをまとめたDockerfile付き!

開発しやすい環境構築(Docker+PHP)

Dockerを利用しApacheにPHP環境 + Eclipseを連携
Dockerを利用したFuelPHP開発環境構築
Docker利用したFuelPHP開発環境の初期設定とscaffoldを利用してCRUDスケルトン作成
FuelPHPのデータベースマイグレーション