洪嵐峰 發表於 2023-4-8 08:09:07

Atmel ATmega8A-PU 製作自動化養雞

以下是一些可能需要的零件:

硬體:

ATmega8A-PU 微控制器
溫度感測器(例如 DS18B20)
水位感測器
液位感測器
直流電源
直流馬達
馬達驅動器
伺服馬達
伺服馬達驅動器
繼電器
顯示屏
按鈕
LED
軟體:

Arduino IDE
相關的庫(例如 OneWire 庫、DallasTemperature 庫、LiquidCrystal 庫等)
控制自動化養雞系統:


#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

// 溫度感測器設置
OneWire oneWire(8);
DallasTemperature sensors(&oneWire);
#define TEMPERATURE_SENSOR_INDEX 0
#define MIN_TEMP 20 // 最低溫度
#define MAX_TEMP 30 // 最高溫度

// 水位感測器設置
#define WATER_LEVEL_SENSOR_PIN A0
#define MIN_WATER_LEVEL 100 // 最低水位
#define MAX_WATER_LEVEL 900 // 最高水位

// 液位感測器設置
#define LIQUID_LEVEL_SENSOR_PIN A1
#define MIN_LIQUID_LEVEL 100 // 最低液位
#define MAX_LIQUID_LEVEL 900 // 最高液位

// 馬達控制設置
#define MOTOR_PIN 9
#define MOTOR_SPEED 200

// 伺服馬達控制設置
#include <Servo.h>
Servo feeder;
#define FEEDER_PIN 10
#define FEEDER_OPEN_ANGLE 0
#define FEEDER_CLOSE_ANGLE 90

// 繼電器控制設置
#define RELAY_PIN 7

// 顯示屏設置
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // 初始化感測器、馬達、伺服馬達、繼電器和顯示屏
  sensors.begin();
  pinMode(WATER_LEVEL_SENSOR_PIN, INPUT);
  pinMode(LIQUID_LEVEL_SENSOR_PIN, INPUT);
  pinMode(MOTOR_PIN, OUTPUT);
  feeder.attach(FEEDER_PIN);
  pinMode(RELAY_PIN, OUTPUT);
  lcd.begin(16, 2);
  
  // 顯示歡迎信息
  lcd.setCursor(0, 0);
  lcd.print("Chicken Automation");
  lcd.setCursor(0, 1);
  lcd.print("System");
  delay(3000);
}

void loop() {
  // 讀取溫度感測器
  sensors.requestTemperatures();
  float temp = sensors.getTempCByIndex(TEMPERATURE_SENSOR_INDEX);

  // 檢查溫度是否在範圍
if (temp < MIN_TEMP) {
// 溫度太低,開啟繼電器,開啟加熱器
digitalWrite(RELAY_PIN, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Heater is ON");
} else if (temp > MAX_TEMP) {
// 溫度太高,關閉繼電器,關閉加熱器
digitalWrite(RELAY_PIN, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Heater is OFF");
} else {
// 溫度正常
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperature:");
lcd.setCursor(0, 1);
lcd.print(temp);
}

// 讀取水位感測器和液位感測器
int waterLevel = analogRead(WATER_LEVEL_SENSOR_PIN);
int liquidLevel = analogRead(LIQUID_LEVEL_SENSOR_PIN);

// 檢查水位是否在範圍
if (waterLevel < MIN_WATER_LEVEL || waterLevel > MAX_WATER_LEVEL) {
// 水位太低或太高,啟動水泵
digitalWrite(MOTOR_PIN, HIGH);
lcd.setCursor(0, 0);
lcd.print("Water Pump is ON");
} else {
// 水位正常
digitalWrite(MOTOR_PIN, LOW);
lcd.setCursor(0, 0);
lcd.print("Water Pump is OFF");
}

// 檢查液位是否在範圍
if (liquidLevel < MIN_LIQUID_LEVEL || liquidLevel > MAX_LIQUID_LEVEL) {
// 液位太低或太高,開啟伺服馬達,開始餵食
feeder.write(FEEDER_OPEN_ANGLE);
lcd.setCursor(0, 1);
lcd.print("Feeding...");
delay(2000);
feeder.write(FEEDER_CLOSE_ANGLE);
}

delay(1000);
}
頁: [1]
查看完整版本: Atmel ATmega8A-PU 製作自動化養雞