Помогите с программой

Всем привет! Зародилась идея автоматизировать мой курятник, решил выбрать для себя ардуино uno, так как раньше создавал схемы с его использованием, но никогда не писал код, мне всегда его писали знакомые, а теперь я хочу научиться сам.

ВАЖНО! Я не прошу у вас написать мне код, я прошу помочь мне с его написанием. Кому лень или не хочется, прошу пройти мимо.
Да, я гуглю и ищу информацию в интернете параллельно с этим запросом!

Теперь описание того что мне нужно:

  1. У меня есть 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. Так же есть 2 лампы. Белая и желтая. Белая включается, когда время 6 утра, и горит до 7, потом врубается желтая, а белая вырубается. Где-то в 21:00 врубается белая, а желтая вырубается. Через час вырубается и белая.

С кормушками и поилками разберусь думаю сам, если смогу разобраться с температурой и влажностью.

1 лайк

Примеров для датчиков очень много.
Источник точного времени нужен.

1 лайк

вот это:

не вяжется с вот этим:

все таки есть разница между “помогите поднять холодильник на 5 этаж” и “поднимите мне холодильник на 5 этаж”.

По делу:
начни с того, чтобы получать показания датчика и печатать их в сериал.
Это просто примеры из библиотеки. Запусти, расскажи, что получилось.

1 лайк

Да, согласен с постановкой вопроса. Я сначала написал что мне нужно, потом уточнил что не прошу написать код)
Вот примерно это я и хочу услышать, грубо говоря как учебник с чего начать. А то чисто код получить хорошо, но так не научишься.
Спасибо! Сейчас попробую

1 лайк

С него и начать

1 лайк

А просто почитать учебник? Не судьба, видимо?

1 лайк

Язык С С++ насколько хорошо знаете?

1 лайк

В курятнике эти датчики проработают не долго. Не предназначены они для агрессивной среды. 18b20 в железной рубашке могут помочь выжить показаниям. По углам тоже тот ещё квест с протяжкой проводов. https://aliexpress.ru/item/1005004012159513.html может вот такие датчики или похожие с беспроводными интерфейсами и esp32 в качестве сбора и управления.

1 лайк

4 датчика не мало?

1 лайк

Спасибо, что разъяснили нам, что такое усреднить. А то было не понятно.

1 лайк

Спасибо что решил остановиться и высказать свое тотально важное мнение )

1 лайк

Не благодари. Это бесплатно.

1 лайк

Это вы зря так свое время обесцениваете конечно

1 лайк

Итак, приступим.
Каков первый вопрос?

1 лайк

Я пожалуй костяк программы описанной автором “накидаю”…

/*
   Программа для микроконтроллера на базе Ардуино
   поддержания ранее установленной влажности и
   температуры в КУРЯТНИКЕ

   Автор: 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 байт.

Даже “борщинул” немного )))

1 лайк

Нее. Надо так:

  1. Пишем(или копипастим) ядро RTOS…
  2. @AceMondi вносит аванс за первый этап.

@AceMondi , ты понимаешь что даже у задачи А+Б=Х 100500 вариантов решения? А сколько вариантов у целой программы для решения твоей задачи. А вариантов решения задачи помимо программы? Тут 99% могут написать СВОЁ решение. Ни одно из них ты не сможешь понять и простить
Тебе самому научиться или просто решить конкретную задачу?

2 лайка

Сам ведь понимаешь, что это могут быть ОЧЕНЬ разные ситуации? :wink:

1 лайк

Мне научиться, а не просто получить готовый код.
Подключить библиотеку для датчика и вытащить оттуда данные у меня получилось с помощью какого-то сайта, это я теперь понял. Вопрос теперь в том, как мне создать условие, чтоб при необходимых мне параметрах врубалось и вырубалось то что мне нужно. Не обязательно использовать if else впринципе. Я думаю while тоже подошло бы. Буду пробовать дальше. Если реально вы готовы потратить свое время и помочь мне с освоением, буду сильно благодарен. А так я буду дальше гуглить. Если нет времени и желания, не принуждаю :slight_smile:
Этот сайт, как и любой другой, где нужно контактировать с людьми я не особо рассматриваю, большинство в силу своего опыта и самоуверенности чаще пишут “иди читай учебник”, “а гугл что, запретили?” и т.п.
А C++ я знаю немного, то что написали выше я понимаю.

1 лайк

Конечно понимаю. У каждого свой стиль написания. Мне бы хоть какой-нибудь освоить :slight_smile:

1 лайк

Поэтому и написал )))

2 лайка