冰楓論壇
標題:
Atmel ATmega8A-PU 製作自動化養雞
[打印本頁]
作者:
洪嵐峰
時間:
2023-4-8 08:09
標題:
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);
}
歡迎光臨 冰楓論壇 (https://bingfong.com/)
Powered by 冰楓