Всем привет! Зародилась идея автоматизировать мой курятник, решил выбрать для себя ардуино uno, так как раньше создавал схемы с его использованием, но никогда не писал код, мне всегда его писали знакомые, а теперь я хочу научиться сам.
ВАЖНО! Я не прошу у вас написать мне код, я прошу помочь мне с его написанием. Кому лень или не хочется, прошу пройти мимо.
Да, я гуглю и ищу информацию в интернете параллельно с этим запросом!
Теперь описание того что мне нужно:
У меня есть 4 датчика температуры и влажности ( DHT22 AM2302 ) по углам курятника, мне нужно считать с них информацию и усреднить. Т.е. грубо говоря, я получаю с одного датчика информацию что температура temp1=37 градусов и влажность hum1=43, с другого temp2=32 градуса hum2=57, и т.д. Потом я эти данные усредняю, тобишь делю каждое из значений, temp0=(temp1+temp2+temp3+temp4)/4 и hum0=(hum1+hum2+hum3+hum4)/4. Но я не знаю как мне считать с них информацию.
Затем должно быть что-то вроде следующего:
int temp=19;
int hum=60;
if (temp0 <= temp)
{включить нагреватель}
else
{ничего не делать}
if (hum0 <= hum)
{включить увлажнитель}
else
{ничего не делать}
Соответственно при достижение temp0 и hum0 значений temp и hum прекращается работа нагревателя и увлажнителя. В погрешность можно забить ±2 градуса и ±5% влажности, чтоб не всегда по одному и тому же значению включалось, а был запас.
Так же есть 2 лампы. Белая и желтая. Белая включается, когда время 6 утра, и горит до 7, потом врубается желтая, а белая вырубается. Где-то в 21:00 врубается белая, а желтая вырубается. Через час вырубается и белая.
С кормушками и поилками разберусь думаю сам, если смогу разобраться с температурой и влажностью.
Да, согласен с постановкой вопроса. Я сначала написал что мне нужно, потом уточнил что не прошу написать код)
Вот примерно это я и хочу услышать, грубо говоря как учебник с чего начать. А то чисто код получить хорошо, но так не научишься.
Спасибо! Сейчас попробую
В курятнике эти датчики проработают не долго. Не предназначены они для агрессивной среды. 18b20 в железной рубашке могут помочь выжить показаниям. По углам тоже тот ещё квест с протяжкой проводов. https://aliexpress.ru/item/1005004012159513.html может вот такие датчики или похожие с беспроводными интерфейсами и esp32 в качестве сбора и управления.
Я пожалуй костяк программы описанной автором “накидаю”…
/*
Программа для микроконтроллера на базе Ардуино
поддержания ранее установленной влажности и
температуры в КУРЯТНИКЕ
Автор: AceMondi
Начало разработки: 06.03.2025г
*/
// Подключим бибилиотеку для наших датчиков
#include "DHT.h" // https://github.com/adafruit/DHT-sensor-library/archive/master.zip
// задаем тип подключаемого датчика
#define DHTTYPE DHT22
// DHT11
// DHT22 (AM2302), AM2321
// DHT21 (AM2301)
// Критерии темепературы/влажности
const int16_t temp = 19; // Заданный критерий температуры
const int16_t hum = 60; // Заданный критерий влажности
// Определяем номера пинов ардуино для управления нагревателем и увлажнителем
const uint8_t tempPin = 10; // Пин управления нагревателем
const uint8_t humyPin = 11; // Пин управления увлажнителем
// Определяем пины для подключения датчиков
const uint8_t DHTPIN1 = 2; // Пока пробуем с одним
// Определим переменные, необходимые нам для работы
float temp0, hum0, temp1, hum1, temp2, hum2, temp3, hum3;
// Обьявляем первый обьект dht
DHT dht1(DHTPIN1, DHTTYPE);
void setup() {
// Назначим пины "управления" как "на выход"
pinMode(tempPin, OUTPUT);
pinMode(humyPin, OUTPUT);
}
void loop() {
if (static_cast<float>(temp) <= temp0) {
// включить нагреватель
digitalWrite(tempPin, HIGH);
} else {
// ничего не делать
}
if (static_cast<float>(hum) <= hum0) {
// включить увлажнитель
digitalWrite(humyPin, HIGH);
} else {
// ничего не делать
}
}
На Arduino Nano так получилось:
Скетч использует 1692 байт (5%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 203 байт (9%) динамической памяти, оставляя 1845 байт для локальных переменных. Максимум: 2048 байт.
@AceMondi , ты понимаешь что даже у задачи А+Б=Х 100500 вариантов решения? А сколько вариантов у целой программы для решения твоей задачи. А вариантов решения задачи помимо программы? Тут 99% могут написать СВОЁ решение. Ни одно из них ты не сможешь понять и простить
Тебе самому научиться или просто решить конкретную задачу?
Мне научиться, а не просто получить готовый код.
Подключить библиотеку для датчика и вытащить оттуда данные у меня получилось с помощью какого-то сайта, это я теперь понял. Вопрос теперь в том, как мне создать условие, чтоб при необходимых мне параметрах врубалось и вырубалось то что мне нужно. Не обязательно использовать if else впринципе. Я думаю while тоже подошло бы. Буду пробовать дальше. Если реально вы готовы потратить свое время и помочь мне с освоением, буду сильно благодарен. А так я буду дальше гуглить. Если нет времени и желания, не принуждаю
Этот сайт, как и любой другой, где нужно контактировать с людьми я не особо рассматриваю, большинство в силу своего опыта и самоуверенности чаще пишут “иди читай учебник”, “а гугл что, запретили?” и т.п.
А C++ я знаю немного, то что написали выше я понимаю.