家一軒、AIが守る時代へ イケオジ流!Raspberry Piで作る究極のオールインワン防災システム


老け込むには早すぎる。

最近、新しいものを作っていない。

防災は誰かがやるもの、難しそうだから挑戦しない、そんな大人が増えている、原因は年齢じゃない。

“挑戦する神経が眠っているんだ”

このシステムは、ただの電子工作じゃない。

水位を監視する、温度を監視する、人の侵入を検知する、異常があれば撮影し、すぐに知らせる、家族と暮らしを24時間見守る。つまり、「眠った発明家魂を呼び覚ます究極の防災システム」だ。

センサーを一つ追加するたびに、止まっていた神経が目を覚ます。

アイデアを形にする人だけが、未来を守れる。

老けるな、神経を止めるな。

人生はアフターファイブから始まる。

※当サイトは、アフィリエイトプログラムを利用して商品を紹介しています。

前回は、眠った危機管理能力を呼び覚ませ イケオジ流!熱中症・火災を防ぐ!Raspberry Piでつくる温度監視システム を紹介しました。

近年は線状降水帯による豪雨や水害、猛暑による熱中症、さらには空き巣や不審者といった防犯リスクが増えています。こうした災害・防犯対策を1台で実現できるのが、Raspberry Piを活用した「オールインワン防災システム」です。

Raspberry Piの電子工作は、まず「センサーを1つずつ試す」ことから始めるのが一般的です。しかし慣れてきたら、複数のセンサーを組み合わせることで、ぐっと実用性が高まります。

これまで紹介してきた電子工作、超音波センサーで水位を計測、温度センサーで気温を監視、さらにカメラで自動撮影を行う仕組みを1つに統合します。初心者でも成果を実感しやすいのが特徴です。

災害や防犯対策を強化したい家庭に最適な、実用性の高い電子工作です。

  • Raspberry Pi
  • 超音波センサー HC-SR04
  • 温度センサー ADT7410
  • Raspberry Piカメラ Raspberry Pi Camera Module 3
  • 専用カメラケーブル(Raspberry Pi 5対応)
  • 抵抗(2.2kΩ、3.3kΩ:ECHOピンの分圧用)
  • ジャンパーワイヤー(オス-メス)
  • ブレッドボード

最初の一歩が未来を変える イケオジ流!ラズベリーパイ:本体・モニター・センサー類の部品リスト

Raspberry Pi 5 GPIOピン配置

 3.3V  (1) (2)  5V
 GPIO2 (3) (4)  5V
 GPIO3 (5) (6)  GND
 GPIO4 (7) (8)  GPIO14
  GND  (9) (10) GPIO15
 GPIO17(11)(12) GPIO18
 GPIO27(13)(14) GND
 GPIO22(15)(16) GPIO23
 3.3V  (17)(18) GPIO24
 GPIO10(19)(20) GND
 GPIO9 (21)(22) GPIO25
 GPIO11(23)(24) GPIO8
  GND  (25)(26) GPIO7
 ID_SD (27)(28) ID_SC
 GPIO5 (29)(30) GND
 GPIO6 (31)(32) GPIO12
 GPIO13(33)(34) GND
 GPIO19(35)(36) GPIO16
 GPIO26(37)(38) GPIO20
  GND  (39)(40) GPIO21

HC-SR04(距離センサー)

  • VCC → 5V(Pin 2)
  • TRIG → GPIO24(Pin 18)
  • ECHO → 分圧回路(2.2kΩ + 3.3kΩ)を通して GPIO23(Pin 16)、GNDは(Pin 9)
  • GND → GND(Pin 6)

ECHOは5V出力なので、必ず抵抗で分圧して3.3Vに落としてから接続します。

ご不明な点がございましたら、こちら をご参照ください。

ADT7410(温度センサー)

  • VCC → 3.3V(Pin 1)
  • SCL → GPIO3(Pin 5)
  • SDA → GPIO2(Pin 3)
  • GND → GND(Pin 9)(ブレッドボードを使用した場合、HC-SR04(距離センサー)のGNDと共通 Pin 6)

I2Cを有効にする必要があります。

sudo raspi-config
# Interfacing Options → I2C → Enable

確認は

ls /dev/i2c-*

/dev/i2c-1 があればOKです。

ご不明な点がございましたら、こちら をご参照ください。

Raspberry Piカメラ

  • Raspberry Pi Camera Module 3をCSIポートに専用ケーブルで接続

ご不明な点がございましたら、 こちら をご参照ください。

プログラムの仕組み
  1. HC-SR04で 水位 を測定
  2. ADT7410で 温度 を計測
  3. カメラで 写真を撮影
  4. Tkinterで GUIに表示

それぞれをスレッドで繰り返し実行し、リアルタイムに更新します。

Pythonプログラム

ターミナルを開きます。Ctrl + Alt + T を同時に押す。

ターミナルで nano shikoshiko.py と入力し、新しいファイルを作成。

nano shikoshiko.py

次に、以下のプログラムを入力します。「#」から始まる行は、コメントとして扱われ、プログラムとしての意味はありませんので不要でも構いません。

from gpiozero import DistanceSensor 
import smbus2
import tkinter as tk
import threading
from time import sleep
from datetime import datetime
from picamera2 import Picamera2
import os

# ---------------- センサー設定 ----------------
MAX_DISTANCE = 5.0
sensor = DistanceSensor(echo=23, trigger=24, max_distance=MAX_DISTANCE)

I2C_ADDR = 0x48
I2C_CH = 1
bus = smbus2.SMBus(I2C_CH)

# ---------------- カメラ設定 ----------------
camera = Picamera2()
camera.configure(camera.create_still_configuration())
SAVE_DIR = os.path.expanduser("~/pictures")
os.makedirs(SAVE_DIR, exist_ok=True)

def capture_image():
    timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
    filename = os.path.join(SAVE_DIR, f"capture_{timestamp}.jpg")
    camera.start()
    sleep(1)  # カメラの準備時間
    camera.capture_file(filename)
    camera.stop()

# ---------------- 温度取得関数 ----------------
def read_temperature():
    try:
        data = bus.read_i2c_block_data(I2C_ADDR, 0x00, 2)
        raw = (data[0] << 8) | data[1]
        raw = raw >> 3
        if raw & 0x1000:
            raw -= 1 << 13
        return raw * 0.0625
    except Exception as e:
        print("通信エラー:", e)
        return None

# ---------------- GUI設定 ----------------
root = tk.Tk()
root.title("現在の水位と温度(+ カメラ)")
root.geometry("500x250")

label = tk.Label(root, text="測定中...", font=("Helvetica", 20))
label.pack(pady=60)

# ---------------- 測定スレッド ----------------
def measure_loop():
    while True:
        distances = []
        temps = []

        for _ in range(10):
            actual_distance = sensor.distance * MAX_DISTANCE
            reversed_distance = max(0.0, MAX_DISTANCE - actual_distance)
            distances.append(reversed_distance)

            temp = read_temperature()
            if temp is not None:
                temps.append(temp)

            sleep(1)

        avg_distance = sum(distances) / len(distances)
        avg_temp = sum(temps) / len(temps) if temps else None

        capture_image()

        display_text = f"水位: {avg_distance * 100:.1f} cm\n"
        if avg_temp is not None:
            display_text += f"温度: {avg_temp:.2f} ℃"
        else:
            display_text += "温度: 測定エラー"

        label.after(0, lambda text=display_text: label.config(text=text))

# ---------------- 実行開始 ----------------
threading.Thread(target=measure_loop, daemon=True).start()
root.mainloop()

保存は Ctrl + O → Enter、終了は Ctrl + X です。

実行するときはターミナルを開きます。Ctrl + Alt + T を同時に押す。

ターミナルで以下を入力します。

python3 shikoshiko.py

「水位」「温度」「画像」が10秒ごとに表示されれば成功です!

撮影画像の保存先
  • 保存場所:~/pictures/
  • ファイル名 例:capture_2025-05-27_14-22-10.jpg

データをCSVに保存したり、メール通知を加えればさらに便利になります!

次回は、家に目を作れ イケオジ流!小さなディスプレイが命を守るRaspberry Piで防災情報をリアルタイム です。

ここにあるのは、イケオジが実際に興味を持ち、試したいと思った”武器”だ。

ただの買い物ではない。「人生を再起動する装備」だ。

スマホ 乗り換え.com:[PR]「スマホ乗り換え.com」は、ソフトバンク正規取扱店です。ソフトバンクのスマホ、ケータイをご契約いただくと、独自のおトクな特典をプレゼント。お手続きは「来店」だけでなく「ウェブ契約」も可能ですので、全国どこにお住まいの方でもお申し込みいただけます。

「人生再起動装置一覧」の中にも、そそられるアイテムがあるはずだ。よかったら見てくれ。

イケオジ流!ラズベリーパイ(Raspberry Pi)一覧はこちら

最初の一歩が未来を変える イケオジ流!ラズベリーパイ:本体・モニター・センサー類の部品リスト

(旧twitter) 今日のイケオジ 

イケオジのキング・オブ・アスリートへの道はこちら


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


Back to top