ToDoリスト

アイディアの種

活動記録

インプット

先輩たちのポートフォリオのデザイン - ViViViT(ビビビット)

アウトプット

ラズパイを使って、重さをはかるよ

import os
import time
import sys
import RPi.GPIO as GPIO
from hx711py.hx711 import HX711
from gpiozero import MCP3002
from gpiozero.pins.pigpio import PiGPIOFactory
from threading import Thread
from time import sleep

PIN_DAT = 5
PIN_CLK = 6
referenceUnit = 3157
DRY_THRESH = 0.45

# 重さ測定の関数
def weight_measurement():
    hx = HX711(PIN_DAT, PIN_CLK)

    # データの並び順を指定
    hx.set_reading_format("MSB", "MSB")
    hx.set_reference_unit(referenceUnit)
    hx.reset()
    hx.tare()

    print("Tare done! Add weight now...")

    while True:
        try:
            # 重量を取得
            val = hx.get_weight(5)
            
            # コンソールのクリア
            os.system('clear' if os.name == 'posix' else 'cls')
            
            # 条件に応じた表示
            if val < 1.0:
                print("重量測定: 何ものってません")
            else:
                print(f"重量測定: これは {val:.1f} g です")
            
            hx.power_down()
            hx.power_up()
            time.sleep(1)  # 測定間隔を1秒に調整

        except (KeyboardInterrupt, SystemExit):
            cleanAndExit()

# 土壌湿度測定の関数
def soil_moisture_measurement():
    Vref = 3.3
    factory = PiGPIOFactory()
    adc_ch0 = MCP3002(channel=0, max_voltage=Vref, pin_factory=factory)

    while True:
        val = adc_ch0.value
        
        # 出力のフォーマット
        print("-" * 30)
        if val > DRY_THRESH:
            print(f'土壌湿度測定: 土壌が乾燥しています。 - value:{val:.2f}')
        else:
            print(f'土壌湿度測定: 土壌が湿っています。 - value:{val:.2f}')
        sleep(1.5)  # 測定間隔を1.5秒に調整

def cleanAndExit():
    print("Cleaning...")
    GPIO.cleanup()
    print("Bye!")
    sys.exit()

def main():
    # スレッドを作成して同時実行
    weight_thread = Thread(target=weight_measurement)
    moisture_thread = Thread(target=soil_moisture_measurement)

    weight_thread.start()
    moisture_thread.start()

    weight_thread.join()
    moisture_thread.join()

if __name__ == "__main__":
    main()

IMG_6631.jpeg

ChatGPTとの対話

対話のスクショ