import machine
import time
from machine import Pin
from ds18x20 import DS18X20
from onewire import OneWire
import tm1637
# --- Pin Tanımlamaları ---
# Mesafe/Sıcaklık Sensörü (DS18B20)
ow = OneWire(Pin(4))
ds = DS18X20(ow)
# HX711 Ağırlık Sensörü (Örnek pinler, devrene göre ayarla)
# DT -> GP2, SCK -> GP3
# Not: HX711 için kütüphane gerekebilir, basit simülasyon için pin okuma:
weight_pin = Pin(2, Pin.IN)
# Display (TM1637)
# CLK -> GP10, DIO -> GP11
tm = tm1637.TM1637(clk=Pin(10), dio=Pin(11))
# Mantık Kapılarını Tetikleyen Çıkışlar
temp_alarm_pin = Pin(14, Pin.OUT) # NOR giriş 1
weight_alarm_pin = Pin(15, Pin.OUT) # NOR giriş 2
reset_pin = Pin(17, Pin.OUT) # Flip-Flop Reset (R)
# Başlangıç Durumu
temp_alarm_pin.value(0)
weight_alarm_pin.value(0)
reset_pin.value(1) # Sistemi bir kez resetleyelim
time.sleep(0.1)
reset_pin.value(0)
def read_temp():
roms = ds.scan()
ds.convert_temp()
time.sleep_ms(750)
for rom in roms:
return ds.read_temp(rom)
return 25.0 # Sensör okunamazsa varsayılan
print("Sistem Hazır. Ölçüm Başlıyor...")
while True:
# 1. Sıcaklık Oku
current_temp = read_temp()
# 2. Ağırlık Oku (Simülasyon için basit değer)
# Gerçek hx711 kütüphanesi yerine ham veri okuyorsan burayı düzenleriz
current_weight = 0.5 # Test amaçlı sabit değer
# 3. Ekranda Göster (Sıcaklığı yazdıralım)
tm.number(int(current_temp))
# 4. Mantıksal Kontroller (NOR kapısına gidecek sinyaller)
# Eğer sıcaklık 50'den büyükse ALARM (1 gönder)
if current_temp >= 50.0:
temp_alarm_pin.value(1)
print(f"SICAKLIK TEHLİKESİ: {current_temp} C")
else:
temp_alarm_pin.value(0)
# Eğer ağırlık 1kg (örnek) üzerindeyse ALARM (1 gönder)
if current_weight > 1.0:
weight_alarm_pin.value(1)
print(f"AĞIRLIK TEHLİKESİ: {current_weight} kg")
else:
weight_alarm_pin.value(0)
# Konsol Bilgisi
print(f"Sıcaklık: {current_temp:.1f} C | Ağırlık: {current_weight:.1f} kg")
time.sleep(1)ERC Warnings
flop1:CLK: Clock driven by combinatorial logic