LoginSignup
14

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-09-03

はじめに

「優しい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のデータベースマイグレーション

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14