Контролер солнечного коллектора на базе arduino mega 2560
Поскольку мы все за "свободную энергетику", хочу выложить здесь исходники своего небольшого проекта. Надеюсь на ваше понимание и помощь в проекте.
Пробую собрать контролер для солнечного коллектора. Логика постоянно дорабатывается, извиняюсь за возможные ошибки: 1) Контроллер стоит на крыше бани, хотелось бы запитать горячей водой дом, баню, ну и шлангом бассейн 2) В зависимости от температуры воды, переключение источника - печка или коллектор. И наличия этой самой воды. 3) Байпас. В бане стоит печка с баком на 50-л. Если вода в коллекторе достигнет кипения, открывается клапан и вода сливается в печку (бак). 4) Если температура в коллекторе > 60 или Температура в печи > 60 PMP1 ON K6 ON (подаем напряжение чтобы закрыть клапан) K7 ON (подаем напряжение чтобы открыть клапан)
Если T1>T2 K3 ON
иначе K4 ON
5) Набираем воду, если уровень L1 опустился K1 OFF (установить по умолчанию) Если L1 = HIGH иначе делать пока L2 = LOW набирать воду K1 LOW 6) Если температура дошла до критической (дома нет никого), сначала наполняем по бак до верху, затем сливаем в печь и набираем холодной. (расходомер бы пригодился) Если Т1> 100 проверяем, полный ли бак если L2=LOW K1 ON иначе K3 ON K4 ON K6 OFF 7) Теперь зимой Если Т1<0 Включаем циркуляцию K3 ON K5 ON PMP1 ON K7 OFF
В дальнейшем буду корректировать и добавлять здесь требования.
Так же нарисовал общую схему, включающую все, в т.ч. водопровод.
За основу взял плату arduino mega 2560.
Дисплей 2*20 с интерфейсом I2C. I2C позволяет по двум проводам подключать до 127 устройств, при чем одновременно! Обычный дисплей тоже можно подключить, но изменится код программы и библиотеки. Так же гораздо больше проводов придется цеплять.
На схемке имеется переменное сопротивление, с его помощью можно настроить контрастность экрана. Перемычка слева — дает питание на подсветку экрана. Блок перемычек слева подключается к arduino так:
GND — GND VCC — 5V SDA — A4 SCL — A5
SDA и SCL нужно подтянуть к линии 5В резисторами на 10к Ом.
// Выводим сообщение // //включаем подсветку lcd.backlight(); //Устанавливаем позицию начиная с которой выводится текст. //Отступ в данном случае 3, строка 1 (отсчет от нуля). lcd.setCursor(2, 0); //выводим строку 1 lcd.print("Hello, World!"); //аналогично выводим вторую строку lcd.setCursor(1, 1); lcd.print("Arduino"); }
Материал добавил: dimujin, 18.06.2015(Четверг) в 13:56:58 | Категория: Блоги / Наука и образование |
Просмотров: 7793 | Комментариев: 6 | Понравилось: 1 |
// Три нижние строчки в первый раз раскомментированы, в них указываем текущую дату и время. Второй раз - закомментруем. //rtc.setDOW(THURSDAY); // День недели, если пятница, то FRIDAY на русском не писать! //rtc.setTime(11, 18, 0); // Часы, минуты, секунды 24-часовой формат. //rtc.setDate(4, 6, 2015); // Дата. ЦИФРАМИ!!! Ноль перед одиночной цифрой можно не ставить!
}
void loop() { // Выводим сообщение // //включаем подсветку lcd.backlight();
//Устанавливаем позицию начиная с которой выводится текст. //Отступ в данном случае 3, строка 1 (отсчет от нуля). //lcd.setCursor(2, 0); //выводим строку 1 //lcd.print("Hello, World!"); //аналогично выводим вторую строку //lcd.setCursor(1, 1); //lcd.print("Arduino");
lcd.setCursor(0, 0); // Устанавливаем курсор для печати времени в верхней строчке lcd.print(rtc.getTimeStr()); // Печатаем время
// Display abbreviated Day-of-Week in the lower left corner lcd.setCursor(9, 0); // Устанавливаем курсор слева внизу для печати дня недели //lcd.print(rtc.getDOWStr(FORMAT_LONG)); // Печатаем день недели полностью, благо экран позволяет. lcd.print(rtc.getDOWStr(FORMAT_SHORT)); // день недели
// Display date in the lower right corner lcd.setCursor(0, 1); // Устанавливаем курсор для печати даты lcd.print(rtc.getDateStr()); // Печатаем дату
// Wait one second before repeating <img rel="usm" src="http://remont-aud.net/smailik/smile_.gif" border="0" align="absmiddle" alt=":)" /> delay (1000); // Пауза 1 секунда и все по новой!
Управлять устройством буду одним устройством - энкодером. Он позволяет и выбирать и перемещаться по меню. Поскольку энкодер создает шумы при переключении, используем аппаратный фильтр в виде микросхемы 74HC14N
// Три нижние строчки в первый раз раскомментированы, в них указываем текущую дату и время. Второй раз - закомментруем. //rtc.setDOW(THURSDAY); // День недели, если пятница, то FRIDAY на русском не писать! //rtc.setTime(11, 18, 0); // Часы, минуты, секунды 24-часовой формат. //rtc.setDate(4, 6, 2015); // Дата. ЦИФРАМИ!!! Ноль перед одиночной цифрой можно не ставить!
}
void loop() {
lcd.setCursor(0, 0); // Устанавливаем курсор для печати времени в верхней строчке lcd.print(rtc.getTimeStr()); // Печатаем время
// Display abbreviated Day-of-Week in the lower left corner lcd.setCursor(9, 0); // Устанавливаем курсор слева внизу для печати дня недели //lcd.print(rtc.getDOWStr(FORMAT_LONG)); // Печатаем день недели полностью, благо экран позволяет. lcd.print(rtc.getDOWStr(FORMAT_SHORT)); // день недели
// Display date in the lower right corner //lcd.setCursor(0, 1); // Устанавливаем курсор для печати даты //lcd.print(rtc.getDateStr()); // Печатаем дату
Нашел ошибку, CLK энкодера, обязательно должен быть подключен к RX arduino. На меге это 17,18 порты. После подключения на 18 порт ноги CLK энкодера, вращение заработало стабильно.
Сейчас сделал простенькое меню, при достижении заданной температуры должно включаться реле. Реле требуется запитать отдельно. Если будут "последователи", буду чаще выкладывать инфу, пока эксперементирую, планирую выложить сюда конечный вариант. В любом случае буду презнателен за советы и полезный опыт!
Отказался от кучи датчиков, собрав по такой схемедатчик уровней жидкости. Все работает! Собрал из центральных жил антенн такой датчик с 3-мя уровнями, для долгвечностизалил жидкими гвоздями, оставив только оголенные концы.