ARDUINO для автоматизации аквариума

<< 1 3456789 >>

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
ARDUINO для автоматизации аквариума
Создал отдельную тему по вопросам использования простых и не дорогих плат ARDUINO для целей автоматизации аквариума.
Идея такая - довести это устройство до полнофункционального контроллера для аквариума, в итоге - с WEB сервером для управления по сети в т.ч. Интернет, и GSM модулем с отправкой SMS.
Начало обсуждения в теме про дозатор :
http://www.aqa.ru/fo...

Информация будет, в основном, в виде конкретных примеров.

Пример 1. Использоание плат Arduino UNO и Arduino NANO для управления по времени суток устройствами в 2-х каналах посредством релейного модуля.
Предполагается использование для создания 2-х канального дозатора, но и для включения света, например подойдет, и для многих других целей также.

Используется модуль часов реального времени, для точного планирования по времени суток, и релейный модуль. В данном примере используется 4-канальный, но 2 канала не используются...

Схема коммутации в случае использования платы UNO R3:


Схема коммутации в случае использования платы NANO:


Программа для среды программирования Arduino:
//***************************************************
// Скетч для управления релейным модулем, в котором *
// использовано два канала. Используется также RTC *
// Релейный модуль - с инверсной логикой на входе *
// Автор: ZORS *
// Версия 1. Дата 21.12.2013 02:40 *
//***************************************************
//----------ИМПОРТ БИБЛИОТЕК-------------------------
#include <Wire.h> //Подключаем библиотеку для использования I2C интерфейса с модулем RTC
#include <RTClib.h> //Подключаем библиотеку для использования модуля часов реального времени RTC

RTC_DS1307 RTC; //Создаем переменную класса - для использования RTC

//----------Объявляем разные переменные------------
const int RelayChn1 = 6; //Используем цифровой ПОРТ 6 для ПЕРВОГО канала релейного модуля
const int RelayChn2 = 7; //Используем цифровой ПОРТ 7 для ВТОРОГО канала релейного модуля
//----------Настройки времени и продолжительности включения реле

//----------ПЕРВЫЙ канал----------------------------
const long StartRelCn_1 = 25200; //Время срабатывания в ПЕРВОМ канале релейного модуля (в секундах от начала суток)
//в данном случае 25200 - это 7 часов 00 минут = ( 60секунд *60 минут *7 = 25200)
const long DurationCh_1 = 10; //ДЛИТЕЛЬНОСТЬ срабатывания реле в ПЕРВОМ канале (в секундах)

//----------ВТОРОЙ канал----------------------------
const long StartRelCn_2 = 37800; //Время срабатывания во ВТОРОМ канале релейного модуля (в секундах от начала суток)
//В данном случае 10 часов 30 минут = (60 секунд * 60 минут * 10 часов + 60сек*30мин = 37800)
const long DurationCh_2 = 15; //ДЛИТЕЛЬНОСТЬ срабатывания реле во ВТОРОМ канале (в секундах)

//----------Модуль инициализации setup() - выполняется один раз при инициализации платы при подаче напряжение (и аналогичных событиях)
void setup(){

pinMode(RelayChn1,OUTPUT); //Инициализируем порт для ПЕРВОГО канала как ВЫХОД
pinMode(RelayChn2,OUTPUT); //Инициализируем порт для ВТОРОГО канала как ВЫХОД

digitalWrite(RelayChn1,HIGH); //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень
digitalWrite(RelayChn2,HIGH); //Т.к. используемый релейный модуль с опторазвязкой - управляется инверсной логикой



Wire.begin(); //Инициируем I2C интерфейс
RTC.begin(); //Инициирум RTC модуль

// RTC.adjust(DateTime(__DATE__, __TIME__)); //С этой строки необходимо убрать комментарии один раз в начале,
//для того, чтобы загрузить в RTC дату и время на момент компиляции программы
//Иногда необходимо заливать СКЕТЧ на плату со снятым комментарием - для поправки
//времени в RTC, НО оставлять такой СКЕТЧ в работе НЕЛЬЗЯ !!!!!!!!!!!!!

} // КОНЕЦ ИНИЦИАЛИЗАЦИИ

//--------------------------------------------------
void loop() // ПРОГРАММЫй безусловный ЦИКЛ
{
DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла

//----------Раздел обработки реле по времени ----
long utime = myTime.unixtime(); //сохраняем в переменную - время в формате UNIX
utime %= 86400; //Сохраняем в этой же переменной остаток деления на кол-во секнд в сутках,
//Это дает количество секунд с начала текущих суток

//------------КАНАЛ 1------------------------------
if ((utime >= StartRelCn_1) &&
(utime < (StartRelCn_1+DurationCh_1)))
//Если секунд с начала суток больше, чем задано для включения
//Но, одновременно и меньше, чем задано для включения + длительность
{
digitalWrite(RelayChn1,LOW); //Устанавливаем на ПЕРВОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else //во всех остальных случаях
{
digitalWrite(RelayChn1,HIGH); //Устанавливаем на ПЕРВОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}

//------------КАНАЛ 2 - все аналогично -----------
if ((utime >= StartRelCn_2) &&
(utime < (StartRelCn_2+DurationCh_2)))
{
digitalWrite(RelayChn2,LOW); //Устанавливаем на ВТОРОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else
{
digitalWrite(RelayChn2,HIGH); //Устанавливаем на ВТОРОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}

}//------------Конец ЦИКЛА-----------------------------


(Редактор текста на данном сайте - к сожалению, "ломает" красивое форматирование.

PS: Выложил этот скетч на файлообменник :
http://my-files.ru/h...

В данной программе реализован, довольно-таки простой подход, а простота - основа надежности.

Каждое из 2-х реле срабатывают один раз в сутки в указанное время, причем время указывается в количестве секунд от начала суток, и удерживается указанное количество времени в секундах.
Такой способ задания времени - несколько сложен для понимания, но за это - не нагружает программу и процессор лишним функционалом, который понадобится всего один раз.
Для определения времени наступления события начала включения и выключения реле - используется время в формате UNIX.

Такой подход хорош тем, что даже если включение или перезагрузка платы произойдет в промежутке времени включения, то реле включится в оставшееся время.
В случае с дозированием, это не много что дает, но в случае, если по аналогии будет сделано управление светом, то при подаче напряжения на плату, например, после пропадания напряжения питания, или после посадки напряжения, или др. аналогичных событий, включение и выключение реле произойдет корректно.

У комплектных минутных и секундных таймеров "с розеткой" - об этом можно только мечтать....не реализован такой функционал, и еще у них есть один минус. Реле в таких таймерах - не удерживаемое, а переключаемое, со всеми вытекающими последствиями....

Для программирования нескольких включений каждого реле в течение суток - естественно, потребуется несколько другой подход....спрашивайте когда кому-то потребуется, пока не хочу все усложнять...
В принципе, можно добавить константных переменных, содержащих время и длительность срабатывания, и соответственно добавить проверку на условия.
Если количество необходимых срабатываний каждого реле в сутках больше чем 2 - лучше оформить проверку условий в отдельной функции. Как, говорил человек, учивший меня программированию - "все, что ты делаешь в программе больше двух раз - оформляй отдельной процедурой, или функцией".

Главное ограничение этого подхода - включение и выключение реле - должно произойти в одних сутках. Если необходимо чтобы, реле включилось в одних сутках, а выключилось в других - необходимо разбить это задание на 2 задания, или применить другой метод проверки условий наступления событий включения и выключения.

Весь этот пример тестировался на "живом" железе :

Для наглядности отладки был еще подключен LCD дисплей 16 сим в 2 строках.
Схема итоговая была такая:

Обратите внимание, что при использовании I2C последовательного интерфейса - соединения значительно упрощаются. И LCD дисплей подключен транзитом через модуль RTC (часов реального времени). Никаких паяных соединений нет вообще....все скоммутировано - проводами с разъемами.
Скетч - естественно, несколько другой использовался с добавлением строк инициализации и использования LCD 16x2.

Плата использовалась типа такой:
http://www.ebay.com/...
цена примерно 350 руб.

Релейный модуль
http://www.ebay.com/...
цена примерно 150 руб.

Модуль часов реального времени:
http://www.ebay.com/...
Цена примерно 55 руб.

Для сокращения бюджета можно использовать плату проще:
http://www.ebay.com/...
Цена примерно 200 руб.

Если есть потребность подключить ЖК дисплейчик, то лучше брать ЖК дисплей (LCD) c I2C интерфейсом - это сильно упрощает коммутацию, и сокращает количество использованных портов на микроконтроллере.
Например такой можно использовать :
http://www.ebay.com/...
цена около 180 руб.

На ЖК можно выводить статусную информацию, информацию об ошибках, диагностическую информацию. Все это, конечно, можно и в последовательный порт компьютера выводить, но это не всегда удобно (скорее наоборот), поэтому я всегда использую какой-нибудь девайс для вывода информации.

Для использования I2C интерфейса - необходима библиотека Wire. Она есть в стандартном дистрибутиве среды программирования Arduino.
Для использования модуля RTC на микросхеме DS1307 нужна библиотека RTClib.
Если ее не будет в стандартном дистрибутиве, то ее можно взять в интернет. Например здесь :
http://arduino-info....

Необходимо, скачать, и разархивировать zip-файл в папку с понятным названием, например RTCLib. Затем эту папку поместить в папку, где среда Arduino хранит свои библиотеки. Если ставили среду программирования с настройками по умолчанию, то этой папкой будет :
C:\Program Files\Arduino\libraries
Сюда и помещайте папки с подключаемыми библиотеками. Если на этот момент, среда программирования была запущена - ее необходимо закрыть, и запустить заново. После этого библиотека будет доступна в меню Скетч/Импортировать библиотеку.

Микросхема RTC модуля DS1307, как правило использует адрес на шине I2C равный 0x68
поэтому, необходимо проверить в библиотечных файлах, библиотеки RTClib наличие строки типа этой:
#define DS1307_ADDRESS 0x68

Если будет использоваться LCD 16x2 с I2C интерфейсом, то - понадобиться библиотека LiquidCrystal_I2C. Можно скачать здесь :
http://dvrobot.ru/lc...
Как подключить к среде программирования Arduino - см. выше

ВАЖНО : при использовании I2C устройств - в скетче, библиотека Wire - должна быть объявлена первой, иначе - будут ошибки компиляции.

По этому примеру - все....

в следующем - присоединение термо-датчика DS18B20, и создание несложного терморегулятора.....


Изменено 24.12.13 автор Z0RS
2013-12-21 добавлено 21/12/2013 15:57:48#1907148

Новичок




26
Ростов-на-Дону
2 г. назад
Доброго времени суток. Большое спасибо что откликнулись. Контроллер применяю аурдино мега 2560 R3,с заделом на будующее так сказать. Часы реального времени подключил за что большая благодарность, ZORS Так как я только начинаю иметь дело с ардуино , сразу пришла мысль создать массив на каждую секунду и в зависимости от показания часов от начала суток выбирать. Как то с примитива надо начинать))) я надеюсь на вашу помощь как лучше это организовать.
спасибо большое.
2014-02-19 добавлено 19/02/2014 07:23:51#1939675

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
electron
Доброго времени суток. Большое спасибо что откликнулись.

Всегда пожалуйста! А для вежливого человека - в двойне пожалуйста....

electron
Контроллер применяю аурдино мега 2560 R3,с заделом на будующее так сказать.

Да....что сейчас радует, это - то, что начинающие аватоматизаторы легко могут приобрести, и покупают довольно мощные платформы. С другой стороны - это же и огорчает - работа с более мощной платформой, чем оно требуется для какого-либо проекта, учит не дорожить ресурсами микроконтроллера и не искать пути оптимизации использования этих ресурсов. Отсюда возникает сильно плохой программный код, и "корявые" знания в голове.... ну это так....лирическое отступление.

Что касается платформы ARDUINO - то, на самом деле Вы имеете деле с микроконтроллерами фирмы ATMEL и в частности с ATMEL ATMEGA 2560.
Arduino MEGA 2560 R3 - это всего лишь плата - контейнер для микропроцессора ATMEL ATMEGA 2560 и в итоге Вы программируете не плату а именно микропроцессор/микроконтроллер (в принципе в Вашем случае можно применять и то и другой термин, т.к. они синонимы - но не вовсех случаях).

electron
Часы реального времени подключил ........ Так как я только начинаю иметь дело с ардуино , сразу пришла мысль создать массив на каждую секунду и в зависимости от показания часов от начала суток выбирать. .......


Теперь по делу:

Как работать с временем я уже писал выше, но повторюсь с расширением темы:

Во первых, если есть модуль RTC, то все очень просто - используя библиотечные функции просто читаем время в том формате который удобен для последующей обработки.
Я предпочитаю в этом случае - использовать время в формате UNIX.
Если кратко, то оно определяется как количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года (четверг);
Т.е. прочитав время UNIX вы имеете большую цифру - количества секунд, прошедших с указанной даты.

Чем удобен это формат? Тем, что с минимальной математической обработкой, из него можно получить все что нужно, для программирования временных интервальных задач, с дискретностью времени в 1 секунду....

Например, чтобы получить время начала текущих суток, нужно взять остаток от деления величины времени UNIX на количество секунд в сутках. Кол-во секунд в сутках = 60 сек. х 60 мин х 24 часа = 86400. Чтобы получить начало текущего часа, нужно взять остаток о деления времени UNIX на кол-во секунд в часе (3600)...все просто....

Когда, мы получим количество секунд с начала суток, можно программировать обработку рассвета.

Разберемся, что такое рассвет? В нашем случае это плавное увеличение величины параметра сважности ШИМ начиная с начала рассвета, на протяжении длительности рассвета. Параметр скважности ШИМ необходимо изменять от 0 до 255. На самом деле мы задаем дискретный параметр в соответствующий порт. А скажность изменяется от 0% до 100%, но для простоты изложения я буду называть дискретный параметр, скажностью...я надеюсь все, кому необходимо - поймут....

Время начала рассвета - лучше задать также в секундах от начала суток, чтобы в программном коде не делать преобразования, бесполезно отнимающие ресурсы микропроцессора, тем более привести время рассвета к величине секунд с начала суток - требуется один раз.
Время продолжительности рассвета - задаем также в секундах.

Например Вы хотите чтобы рассвет начался в 8 часов 15 минут и длился 40 минут. Тогда количество секунд с начала суток будет = 8 час х 3600 (сек в часе) + 15 мин х 60 (сек в мин.) = 29700, а количество секунд, отражающее длительность рассвета = 40*60 = 2400.

Теперь все количество времени в сутках, делится на 3 интервала - время до рассвета, время после рассвета и время внутри интервала рассвета. На самом деле будет еще и четвертый интервал, время после выключения света....или даже больше - если Вы будете программировать закат, например, или какие-либо еще интервалы изменения освещенности, иммитирую прохождения облаков например...ну это для изощренных "любителей"....
Ну для простоты примера, представим, что свет в конце дня отключается резко...хотя для светодиодов это не хорошо....да....

Давайте уж тогда сделаем и закат....т.е. у нас будет 4 величины :

1 - количество секунд с начала суток для начала рассвета,
2 - количество секунд для длительности рассвета,
3 - количество секунд с начала суток для начала заката,
4 - количество секунд для длительности заката...

И, соответственно - 5 интервалов времени - время до рассвета, время рассвета, время до заката, время заката, время после заката до конца суток .....

Итак, вернемся к построению алгоритма .... сначала что по-проще
Интервал до рассвета. и интервал после заката

Если с начала текущих суток секунд меньше чем, величина задающая начало рассвета, или количество секунд с начала суток больше чем величина начала заката+ длительность заката - то скважность ШИМ необходимо установить = 0 .
Есть конечно мнение, что на светодиодах нужно оставлять небольшой ток покоя....я если честно - не знаю, на сколько это хорошо для светодиодов...но если так, то скважность ШИМ в этом интервале должна чуть отличаться от нуля..это нужно подобрать, чтобы визуально диоды не светились....Вообще, в этом случае сделаем константу для минимального значения скажности ШИМ, например:
#define PWM_MIN 0
Эту строку необходимо поместить в скетче где нибудь вверху, до начала функции setup(). Кстати, после дефайнов - точку с запятой ставить не нужно...
итак, здесь все просто.

Интервал после рассвета и до заката
Также, все не сложно. Если секунд с начала суток больше чем начало рассвета + длительность рассвета , и одновременно меньше чем начало заката, устанавливаем скажность ШИМ = 255, или величине равной максимальной яркости. Как и для выше приведенного значения, заведем специальную константу:
#define PWM_MAX 255

Интервал рассвета
Здесь немного по-сложнее
Если время с начала суток, больше чем начало рассвета и одновременно меньше начало рассвета + лительность рассвета, то
Скважность ШИМ равна = (максимальной величине скважноси - минимальная величина скважности ) умножить на количество секунд с начала рассвета деленное на количество секунд длительности рассвета)....
Интервал Заката
Скважность равна =(максимальной величине скважноси - минимальная величина скважности ) умножить на ((начало заката+длительность) - текущее количество секунд) делить на длительность интервала заката.

теперь как это выглядит в коде:
http://my-files.ru/8...

Опробовал данный скетч - на первый вгляд все отрабатывает...есть ошбочка на секунду в закате...по моему...это нужно со знаками в условных выражениях разобраться.
Положительный момент в данном подходе то, что при инициализации контроллера во время, когда текущее количество секунд находится в интервале изменения ШИМ - значение ШИМ будет выставлено коректно. Но это и отрицательный момент. т.к. светодиоды нужно включать плавно....и этим процессом не всегда драйвера занимаются коректно...т.е. при пропадании напряжения, или при другой какой причине, вызвавшей перезагрузку контроллера, если это произойдет в период времени, когда свет должен быть включен на полную яркость - он и будет включен сразу на полную...без "разгона" светодиодов....это можете сами дописать в модуле инциализации...

Позже еще посмотрю...ошибки по исправляю....но в целм данный скетч рабочий...
2014-02-19 добавлено 19/02/2014 16:01:30#1939886

Новичок




26
Ростов-на-Дону
2 г. назад
Z0RS

Огромное спасибо!!!Не ожидал такого такого полного ответа.
2014-02-20 добавлено 20/02/2014 07:10:14#1940226

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
electron


Ах..да...совсем забыл, для удобства можете ввести пару констант отражающих количества секунд в часе и в минуте, как было сделано в предыдущем примере:

#define mn 60UL
#define hr 3600UL

здесь добавление модификаторов (букв UL) в задании констант, говорят компилятору - что данная константа будет иметь тип безннакового длинного целого числа ( Unsigned Long)....ну это для сведения.Если этого не сделать, то дальнейшее присвоение в коде программы будет сделано, но значение будет не правильное. т.к. по умолчанию компилятор воспримет их - как проcтое знаковое целое - int (integer), .

После введения констант - задание времени рассвета и заката будет выглядеть в коде так:
long sunrise_start = 9*hr+45*mn; //Начало восхода в 9 - 45
long sunrise_duration = 30*mn; //Длительность восхода 30 минут
long sunset_start = 21*hr+15*mn; //начало заката в 21-15
long sunset_duration = 30*mn; //Длительность заката 30 минут

Согласитесь оно, много информативнее, чем просто длинное число секунд, это с одной стороны, с другой, вычисление значения, которое будет подставлено - будет происходить только один раз при компиляции программы, и не будет требовать ресурсов микропроцессора. Этот простенький приемчик сильно упрощает жизнь программиста, особенно при отладке...
2014-02-21 добавлено 21/02/2014 11:09:40#1940738
Нравится arch07

Завсегдатай




460 39
Москва
3 мес. назад
Z0RS

День добрый.
Начитавшись Ваших постов. Подумал-подумал, да и заказал Арудину. Правда я сразу замахнулся на мега 2560 R3 (понятно что избыточно для моих задач, но цена в 15 баксов не остановила - нехай будет запас), ну и заодно заказ пару нано для других проектов - один очень актуален - полив роз жены (10 горшков) при нашем отъезде на дачу с механическим управлением сервомашинкой и контролем положения "заливного" шланга парой магнит-геркон, в перспективе еще прикручу датчики влажности грунта.

Спасибо за подробное описание примеров со схемами подключения, коментариями кода и рекомендациями по его оптимизации. Хотя кодер из меня еще тот, но немного с СИ знаком. А с Вашими объяснениями поверил, что получится запустить проект.
Есть вопросик по поводу ph-метра. Пока я не баловался с СО2 в большой банке. Немного поигрался в отсаднике, где подращивал кусты в горшочках. А для большой банки считал свет недостаточным. Да и внесение удобрений автоматизировать не получалось и я "замедлил" банку, когда понял, что не справляюсь, снизив освещенность. Но сейчас хочется автоматизировать процесс. Оставив для ручного труда только прополку. Сейчас занят переделкой света на СД - там свой контроллер с рассветами-закатами.
На арудине сначала хотел оставить внесение удобрений (помпы из шприцев с сервами впечатлили простотой изготовления и управления), контроль освещенности по фоторезистору, контроль за температурой и сбор и складирование статистики на домашний сервер. Управление по веб-интерфейсу и дополнительно экранчик 20х4 потому, что нравится
Изучение нашего форума и форума украинских коллег подсказало, что автоматизировать подачу СО2 тоже реально, но тогда уж надо озаботится контролем.
И вот тут полезли сплошные вопросы:
Ваши высказывания о недостаточности битности АЦП. А какова точность измерения PH достаточна для автоматизации аквариума? Разве 0,1 единицы плохо?
Я пока еще только разбираюсь. Немного раздражает, что вся эта система СО2 - PH очень инертна и я пока с трудом представляю что требуется в плане железа. Какой электрод достаточен, а какой избыточен, требуемая точность измерений, последствия отказа системы. Был бы признателен, если бы вы высказали свои соображения по этому поводу. Как часто требуется калибровать электрод, как отследить что требуется калибровка или только по времени? Наверняка есть некоторые наработки и оценки проектов коллег.

Заранее спасибо.
2014-02-28 добавлено 28/02/2014 11:39:10#1943653

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
arch07
День добрый.
Начитавшись Ваших постов. Подумал-подумал, да и заказал Арудину. Правда я сразу замахнулся на мега 2560 R3

Доброго времени дня....И поздравляю с почином и сочувствую...одновременно....

arch07
полив роз жены (10 горшков) при нашем отъезде на дачу с механическим управлением сервомашинкой и контролем положения "заливного" шланга парой магнит-геркон, в перспективе еще прикручу датчики влажности грунта.

Я с Ардуино ( в смысле с AVR технологиями) начинал тоже с полива и опрыскивания кофейных деревьев ...

arch07
Спасибо за подробное описание примеров со схемами подключения, коментариями кода и рекомендациями по его оптимизации. Хотя кодер из меня еще тот, но немного с СИ знаком. А с Вашими объяснениями поверил, что получится запустить проект.

Если честно, то это не совсем подробное и не полное описание..... мне не сложно написать готовый проект среднестатистического контроллера для аквариума, но задача этой темы - в другом, сделать аквариумистов, тех, кто пожелает, чуть более развитыми в автоматизации, которую они могут делать самостоятельно.
В этом случае, человек сам сможет формализовать соответствующую задачу, и в последствии реализовать ее автоматизацию, возможно, и не на процессорах ATMEL и платах ARDUINO....в принципе сопоставимых платформ обнаруживается большое количество.

И вот эта задача для меня - интереснее, т.к. приходится подбирать состав информации так, чтобы было довольно насыщенно, и оставалось пространство для самостоятельной работы....вообще как в секции робототехники....с детишками За них, также - нельзя все делать....интерес пропадет....человеку интересно - пока он сам чего-то достигает...

arch07
Есть вопросик по поводу ph-метра. Пока я не баловался с СО2 в большой банке. Немного поигрался в отсаднике, где подращивал кусты в горшочках. А для большой банки считал свет недостаточным. Да и внесение удобрений автоматизировать не получалось и я "замедлил" банку, когда понял, что не справляюсь, снизив освещенность. Но сейчас хочется автоматизировать процесс. Оставив для ручного труда только прополку. Сейчас занят переделкой света на СД - там свой контроллер с рассветами-закатами.
На арудине сначала хотел оставить внесение удобрений (помпы из шприцев с сервами впечатлили простотой изготовления и управления), контроль освещенности по фоторезистору, контроль за температурой и сбор и складирование статистики на домашний сервер. Управление по веб-интерфейсу и дополнительно экранчик 20х4 потому, что нравится
Изучение нашего форума и форума украинских коллег подсказало, что автоматизировать подачу СО2 тоже реально, но тогда уж надо озаботится контролем.
И вот тут полезли сплошные вопросы:
Ваши высказывания о недостаточности битности АЦП. А какова точность измерения PH достаточна для автоматизации аквариума? Разве 0,1 единицы плохо?

Что касается измерения pH....понимаете, все зависит от задач, которые Вы решаете, для вообще среднестатистического контроля и 0,2 единицы вполне достаточно....а есть задачи где и 0,05 мало....

Потом, чтобы контролировать водородный показатель в корридоре 0,1 его необходимо измерить с точностью не хуже статистической погрешности т.е. 5% а это точность 0,005 единиц.
А если корридор расширить до 0,2 (и это не сказать что очень узкий корридор) то необходима точность 0,01 единицы, а она не достижима с такой разрядностью АЦП.

Вот и получается, что более менее надежный коридор, который можно контролировать это 0,3 - 0,5 единицы.....а это можно и без контроллера делать...у меня уже давно нет контроллеров подачи СО2 и измерения водородного показателя на банках, т.к. буферная система воды и стабильность банки - работают значительно лучше контроллера.
А как отдельный прибор - мне например, очень нужно....С другой стороны, есть идея подкислять воду в одном из экспериментов - дозируя серную кислоту в банку....вот в этом случае, придется делать дозатор с pH метром, и совершенно другое измерение СО2. Вообщем, задачи , как я уже говорил, могут быть оооочень разными...

Но Вам рекомендую - поработайте над pH - метром - пригодится...тем более если цветоводством/растениеводством/гидропоникой занимаетесь....его можно вообще отдельным устройством сделать - получится гораздо лучше китайских "уродцев", но делать придется на на другом микроконтроллере, например на MSP430 серии...когда с ардуиновскими платами наиграетесь то MSP не покажется сильно другим...А вообще, разобрав несколько промышленных pH метров - я понял, что свой на MSP будет гораздо лучше....т.к. внутри промышленных тоже попадаются PIC, AVR, MSP и прочие микропроцессоры....только, своему можно придать свойства, какие будут удобны, а промышленные имеют закрытую прошивку и ничего не изменишь....

arch07
Я пока еще только разбираюсь. Немного раздражает, что вся эта система СО2 - PH очень инертна


То, что система инертна....это вообще огромный плюс....а не отрицательное свойство, но инертна система только при наличии ощутимого буфера, в виде солей жесткости например...буфер, как раз делает резкие скачки уровня pH - невозможными. А резкие скачки водородного показателя - могут быть летальными для обитателей банки....
Для примера, тройку месяцев назад, я по-игрался с кипячением воды, и выяснил, что 20 минутное кипячение и последующее суточное отстаивание снижает карбонатку с 12 до 5.....т.е. буферные свойства воды изменились значительно в 2,5 раза примерно...
Ну и практически сразу пришла мысль перевести небольшую банку на эту воду.....пару месяцев я ее переводил.....и сейчас я использую для подмен только такую воду...
И результат, не сказать что, впечатляет скорее наоборот, кардинальных изменений - практически нет, банка стала более не стабильной....в небольших количествах появляются водоросли до этого не виданные даже в микроскоп....уменьшился прирост быстрорастущих....т.е. требуется заново подбирать схемы внесения удобрений и наверное, их состав...

arch07
и я пока с трудом представляю что требуется в плане железа.


А Вы начитались про ионную потенциометрию? и железо тоже ионселективным электродом измерять собираетесь? Или я что-то не понял?
Вообще, то наверное можно, только ионселективные электроды - это очень дорого...

arch07
Какой электрод достаточен, а какой избыточен, требуемая точность измерений, последствия отказа системы. Был бы признателен, если бы вы высказали свои соображения по этому поводу.
Как часто требуется калибровать электрод, как отследить что требуется калибровка или только по времени? Наверняка есть некоторые наработки и оценки проектов коллег.


Вообще, про электроды , если не "разливаться мыслью по древу" - то, всего скорее, Вам будут доступны комбинированные стеклянные электроды и изопотенциальной точкой pH=7.0
Это среднестатистический комбинированный электрод, среди них находятся все самые дешевые модели...

Можно посмотреть вот этот документ http://www.izmteh.ru... про выбор электродов...или аналогичные документы на сайтах производителей.

Из практики - из дешевых электродов стоимостью до 20 баксов, которые продаются на ebay.com или аналогичных площадках, очень хороших - практически не бывает...все они довольно быстро "уплывают" на 0,1 - 0,3 единицы, и срок жизни у них короче, чем обещается производителем как правило от 6-8 месяцев, после этого срока откалибровать такой электрод возможно с точностью до 0,08 - 0,15 единицы, или вообше не возможно. Эти электроды очень чувствительные к грубому обращению, удары даже легчайшие как правило - выводят такой электрод из строя, касание мембранного слоя стекла (шарика) - тоже приводят к последствиям - отрицательным....

Очень не плохие JBL электроды...довольно стабильны, калибровку можно делать 1 раз в месяц. Но цена вопросы уже 50-60 баксов без доставки....В измерениях, в разных экспериментах - в основном их использую....

Ну а если есть возможность - то конечно, промышленные электроды от известного бренда, да еще с цифровым интерфейсом - будут лучшим выбором....но с программированием придется по возится по-больше, зато можно будет не делать предусилительную часть измерителя...но цены начинаются от нескольких сотен баксов.... Экономическая целесообразность пропадает...
Вообщем вариантов много....

Что касается калибровки - опять же зависит, от того, за какое время электрод теряет необходимую точность...т.е. зависит от того, что необходимо, и от характеристик электрода.
Для измерений в экспериментах - я калибрую перед каждым использованием, а когда стоял контроллер в банке - то 1 раз в месяц, такая была программа в контроллере, но и качество электрода позволяло....Вообще можно оценить, сколько точности теряет электрод, если во время очередной калибровки посмотреть на сколько изменился потенциал в калибровочном растворе, по сравнению с предыдущей калибровкой. Ну поскольку все "интересные" аквариумисту значения лежат около изопотенциальной точки, то в растворе с pH=7.

А отследить необходимость калибровки - практически не возможно....так, что только по времени.....

Вообще, в измерении pH - конструктивных проблем практически нет, вся сложность собрать усилительную часть...но это все уже так расписано и существует во многих вариантах...
А программно вообще - проще чем задачи по программированию таймеров....поэтому я это и не расписываю....
Пользовательский интерфейс с кнопками и дисплеями - я принципиально не делаю...в лучшем случае использую последовательный порт. ...а тому кому нужен HMI - сам запрограммирует...
там тоже ничего сложного....

Вообще, если честно, то пора наверное данную тему закрывать, т.к. для устройств по-проще, типа программируемых таймеров, и контроллеров аквариума (не изощренных, без связи с внешним миром) - в принципе - все разобрано...а для, задач требующих одновременно, и контроля коротких интервалов времени (скажем 1 секунда - для дозирования ) и не детерминированных по времени процессов, таких как обмен по TCP протоколу и т.д.....совместить в однопроцесорном микроконтроллере - невозможно...и более серьезный контроллер необходимо строить или на ARM технологии, или использовать несколько AVR процессоров в одном проекте...что делает программирование сложнее.....значительно.....
2014-02-28 добавлено 28/02/2014 16:16:46#1943765

Завсегдатай




460 39
Москва
3 мес. назад
Ок, просто и понятно. 50-100 баксов в год... ну его такие расходники...
Тогда просто со2 по таймеру, подберу режим и все. Я с осмосом наигрался, остановился на водопроводной воде, рыбу уже приучил к 20 процентной подмене . Вот теперь очередной виток - хочу минимизировать ручной труд.
Думаю над протокой, но пока не решаюсь.

Управление кнопками - согласен. Вообще МК это так для души и рукоблудства. Пока я больше ему контрольные функции доверяю и то, что банку "уронить" не сможет. Думал достаточно дешево контроль PH наладить можно, но если нет, то нет. Не критично. Тут весь контроллер с сервами меньше расходника стоят. Я лучше дропчеккер повешу.

Интересно, а распознавание цвета дропчеккера можно организовать?

Тему жалко. Хорошее начинание. Прикладные задачи - это то что отличает стандартные примеры. Я на арудину давно посматривал, но чаще обходился другими решениями.

Надеюсь, что не откажете в консультации по прикладному кодингу
2014-02-28 добавлено 28/02/2014 18:49:31#1943849

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
arch07
Ок, просто и понятно. 50-100 баксов в год... ну его такие расходники...

Ну ...а Вы за-дешево хотели pH измерять? Это не бесплатное удовольствие....если только электроды не "достаются" бесплатно откуда-то....с работы например....

На пром предприятиях встречаются комбинированные электроды Mettler Toledo обслуживаемые....очень долговечные...но все равно через года 3-4 и они придут в негодность....а еще есть с заменяемыми мембранами....ну у этих двух - цена вообще "неприличная"....если только не.... ну Вы понимаете.... Но...это - брать не свое - не хорошо....я себе такое никогда не позволял....хотя возможностей было очень много....Использовать некоторое оборудование на работе, для получения информации, знаний...это - да...было...дело....

Потом, в принципе, можно и 20 долларовые электроды использовать, просто не нужно ожидать от них высокой точности...да в среднестатистической банке она и не нужна.... это с одной стороны...

А электронное измерение СО2 или кислорода - еще дороже....хорошие электроды для измерения растворенных газов - очень дорогие, цены - от несколько сотен баксов....

Можно конечно поиграться с датчиком на основе MG811 - типа такого http://www.ebay.com/...

разместив его в погруженном в воду воздушном пространстве (колокол), тогда газообмен сделает среду в колоколе насышенной СО2 и это будет пропорционально содержанию газа в воде.....я пробовал...но только деньги зря потратил....т.к. можно измерять до 10-15 ppm ....правда, когда мне подарили отслуживший свой срок, но еще вполне рабочий - электрод для измерения растворенного СО2 - вопрос отпал сам собой...

arch07
Тогда просто со2 по таймеру, подберу режим и все.

Вообще, если честно можно и без клапана и таймера обойтись....уже несколько лет обхожусь....в одной из банок, вообще никогда не было ни дропп-чеккера, ни клапана на подаче СО2...просто баллон, редуктор, игольчатый вентиль, счетчик пузырей, диффузер и все....подача постоянная....ночью на несколько часов включается аэрация...иногда измеряю pH капая индикаторной жидкости....но делаю это - сейчас реже раза в месяц...Вот, это - кстати, карбонатная буферная система воды в действии...
Поэтому, в аспекте подачи СО2 - я, об автоматизации думаю в последнюю очередь...это с другой стороны

arch07
Я с осмосом наигрался, остановился на водопроводной воде, рыбу уже приучил к 20 процентной подмене . Вот теперь очередной виток - хочу минимизировать ручной труд.
Думаю над протокой, но пока не решаюсь.

Ленивая протока, без всяких бачков, просто на доливе и переливе через устройство на принципе сифона, шланг для долива внутри шланга для слива - проще ничего быть не может...только иногда послеживать нужно, чтобы сифон не завоздушивался....но приподнятие уровня воды в банке - покажет, что в сифоне воздух в верхней части скопился....но это очень редко бывает...
Вообщем....не просто - а очень просто....поищите...даже здесь на форуме была информация...а схему самого сифона я где-то приводил....если не найдете...поищу...
Эту приспособу - я не использую как протоку в чистом виде - не понравилось, использую просто для поддержания уровня воды в банке и автоматической подмены, а еще клапан электромагнитный на воду еще нужен....если автоматизировать будете...но они в магазинах..от 600 рублей видел....

arch07
Пока я больше ему контрольные функции доверяю и то, что банку "уронить" не сможет.

А, как Вы думаете, розеточный таймер - может уронить банку? А ведь сделаны они еще хуже...и от коммутации индуктивной нагрузки иногда слетает программа....


arch07
Интересно, а распознавание цвета дропп-чеккера можно организовать?

Можно...но не на Arduino, нужно платформа, на которой можно систему технического зрения развернуть....я к сожалению кроме LabView ничего не знаю...а это дорого, громоздко и сложно в программировании....и опять же нецелесообразно....

arch07
Тему жалко. Хорошее начинание. Прикладные задачи - это то что отличает стандартные примеры. Я на арудину давно посматривал, но чаще обходился другими решениями.
Надеюсь, что не откажете в консультации по прикладному кодингу

Ну....я же ее удалять не собираюсь, и в режиме вопрос-ответ она может существовать столько, сколько нужно....хоть кому-нибудь...
Просто, есть еще наработки, по использованию SD-карты например, и всякие фишки с TTL-ной периферией....но это я наверное уже не буду выкладывать....ибо нет смысла...причины - в предыдущем сообщении.
2014-03-01 добавлено 28/02/2014 23:12:32#1943980

Завсегдатай




460 39
Москва
3 мес. назад
сообщение Z0RS
Ну ...а Вы за-дешево хотели pH измерять? Это не бесплатное удовольствие....

ну... надежда была... Светодиоды вон как за последнее время подешевели

сообщение Z0RS
Поэтому, в аспекте подачи СО2 - я, об автоматизации думаю в последнюю очередь...это с другой стороны

Принял к сведению...

сообщение Z0RS
Ленивая протока....

Это да, но у нее мне не нравится толщина сливного шланга и потенциальная возможность забиться, если эту толщину уменьшать. И вообще я обычно всесторонне вопрос изучаю и к тому, что может затопить все 15 этажей подо мной отношусь с жуткой перестраховкой. Протоки изучаю с момента пуска первого аквариума (года 3 ужо). Пока посматриваю на сообщающиеся сосуды с одним шлангом туда-сюда как наиболее перспективное направление.

Ну а про таймеры я в курсе. Насчет дроп чеккера мысль была: веб-камера и распознавание картинки на сервере с более мощной операционкой (благо есть такой дома), но отказался - слишком громоздкая и неустойчивая система.


Тут вопросик нарисовался:
Имеется система:
Арудино (не важно какая), таймер реального времени, экранчик, плата с реле.
И вот такой датчик http://www.aliexpres...

1. по таймеру включается реле - напряжение подается на помпу(это мы уже умеем)
2. контролируем по датчику потока объем.
3. контролируем по времени работу реле (это на сучай, если насос не включился, шланг слетел, завоздушивание и пр.)
4. отключаем реле по событию 2 или 3 - что раньше наступит.

Самое поганое, что вышеприведенный датчик - для меня темный лес. Судя по всему построен на эффекте холла и один импульс -> один оборот крыльчатки -> пропущенный объем

Z0RS, можно попросить Вас реализовать это в правильном коде? А то у меня есть подозрение, что мой вариант - загонять это в цикл с потенциальной возможностью ухода в бесконечность не есть верное решение.

P.S. Пока только умозрительно играюсь... Арудины с датчиками и прочим жду не ранее числа 15-го.

Изменено 2.3.14 автор arch07
2014-03-02 добавлено 02/03/2014 18:25:46#1944514

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
arch07
мне не нравится толщина сливного шланга и потенциальная возможность забиться, если эту толщину уменьшать.


Если честно : сам живу на 7-м этаже, и особо не переживаю, т.к. к тому, что сделал своими руками - отношусь с уважением, т.к. свой труд уважаю в первую очередь (как же уважать чужой труд, если не уважать свой ) , и стараюсь делать такие вещи с головой и надежно...
Мы уезжали на несколько недель в отпуск - я оставлял протоку на небольшой подпитке, чтобы уровень не падал, и чтоб растения хоть немного получали питательных веществ....и не особо боялся...но у меня тогда улиток не было....а вообще говорят, что у кого-то было, что ампулярия закрыла выход протоки....но можно и это решить ...см. ниже.

В качестве шланга слива - VarioLUX 10мм диаметр в магазине OBI брал....цена конечно кусалась....
Лежит уже более 3 лет ....дверями по нему возят, наступают...но он как вчера уложили....я его не прчищаю...просто в сифонную часть в сливную воду, иногда (1-2 раза в год) лью химию всякую с кислотами...типа САНИТА и т.д. он становится прозрачный прозрачный....как новый....

Внутри 10 мм. шланга - лежит 4 мм полиуретановая трубочка (брал на ebay) по ней подается вода....

Если сильно переживаете - поставьте датчик уровня на банку, и клапан на подачу воды...при достижении верхнего предельного уровня - клапан закрыть...
в программе для Ардуино это будет одна строка, типа такой
digitalWrite (номер_пина_порта_датчика_уровня, !номер_пина_порта_вывода_для_клапана);
ну понятно, что я утрирую, и если будете делать автоматическую подачу, по код будет по-сложнее....чуть-чуть

arch07
посматриваю на сообщающиеся сосуды с одним шлангом туда-сюда как наиболее перспективное направление.

Вы, просто не представляете себе, насколько это геморройное направление, по сравнению с ленивой протокой на сифонном эффекте....

arch07
И вот такой датчик http://www.aliexpres...

1. по таймеру включается реле - напряжение подается на помпу(это мы уже умеем)
2. контролируем по датчику потока объем.
3. контролируем по времени работу реле (это на сучай, если насос не включился, шланг слетел, завоздушивание и пр.)
4. отключаем реле по событию 2 или 3 - что раньше наступит.



Ну да...скорее всего - это дискретный импульсный датчик расхода, выдает некоторое количество импульсов на литр. Это можно будет установить только при наличии датчика на руках, т.к. что то я не нашел информации у продавца по количеству импульсов ....
Кстати минимальный поток, который данный датчик фиксирует 1 литр в минуту - это для подмены хороший поток, а для протоки - так вообще слишком сильный.....

Как программировать? Ну если в главном цикле программы будет обработка коротких временных интервалов, то обрабатывая еще и импульсы с этого датчика также в главном цикле - можно что-то потерять либо импульсы с датчика, либо какое-то событие, а это может быть событие включения дозатора, например, а что еще хуже, это может быть событие выключения дозатора....и последствия неминуемы.

Первое что приходит в голову, повесить это датчик на вход, который может генерировать аппаратное прерывание, а в функции обработки прерывания - просто увеличивать какую либо переменную (т.е. просто организовать счетчик), которую уже проверять и использовать в главном цикле с требуемой дополнительной логикой....так сказать, с высоким приоритетом зафиксировать импульс и самым низким приоритетом использовать информацию по количеству подсчитанных импульсов и все должно получится....

Попробую накидать в коде ....по-позже....
2014-03-02 добавлено 02/03/2014 20:02:30#1944549

Завсегдатай




460 39
Москва
3 мес. назад
Z0RS

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

Жду вашего примера. И еще больше жду арудину с приблудами.

Насчет датчика - я не задумвался над этим. Я просто заказал самый дешевый, что нашел. Он ведь не для работы, а для обучения. Подойдет для практического использования - хорошо, нет, так пойму что мне надо и подберу подходящий.
Набор для макетирования собирал мало представляя что мне потребуется, нахватавшись из инета. Вот после того как поиграюсь, оценю возможности, явно осознаю перспективы - тогда да. Закажу уже понимая что и как. Я вообще повелся на ваши дозаторы для удо - уж очень стимпанковская весчь тем более они мне кажутся более надежными и дешевыми чем перистальтическая помпа в сравнимую цену. А уж идея таки подвязать арудину не только на удобрения пришла потом, при изучении тем. До этого видел проекты украинских друзей с сенсорным экраном и платы аквашилд, которую ребята из израиля делают, но не проникся.

Мой опыт программирования в основном PHP и базы данных. там все просто и понятно пошел запрос - получил ответ и жди действий пользователя. Аппаратные процессы идут независимо и удобно предоставляют данные о своей деятельности не озадачивая меня как программиста о загрузке процессора и прочего. Программирование мк в связке с железом совсем новое ощущение.
Подозрение что порт ввода требуется слушать постоянно щемилось на краю сознания и не давало покою мозгам. До приоритетов я еще не дошел, но поищу.
2014-03-02 добавлено 02/03/2014 21:49:09#1944580

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
arch07
Жду вашего примера. И еще больше жду арудину с приблудами.


Тут одна принципиальная сложность возникла - я не знаю есть ли дребезг у этого датчика? если есть то это все усложняет...вообще конечно быть не должно. Это он в теории на эффекте холла, а на практике китайцы могли и на герконе сделать.....а герконы это датчик с дребезгом....
Тем более что
arch07
Я просто заказал самый дешевый, что нашел.

Это то и настораживает.....

arch07
Я вообще повелся на ваши дозаторы для удо - уж очень стимпанковская весчь тем более они мне кажутся более надежными и дешевыми чем перистальтическая помпа в сравнимую цену.

Вообще, тема про дозаторы была не моя...а форумчанина с ником lisenkow.
Я ее просто оккупировал...
Кстати те дозаторы, что Вы там видели, это еще не дозаторы, а как раз перистальтические насосики, всего скорее из какой-нибудь модели струйного принтера....а дозаторами станут, когда к ним автоматику присоединят...
Ну насчет надежности не знаю...но в принципе дозатору много и не надо...перекачать несколько миллилитров в сутки...даже такой техники должно хватить на долго...

arch07
До этого видел проекты украинских друзей с сенсорным экраном и платы аквашилд, которую ребята из израиля делают, но не проникся.

Чтойто? Нормальный рабочий проект....как раз не очень далеко от розеточного таймера...т.е. все просто и довольно надежно...должно быть....

arch07
Программирование мк в связке с железом совсем новое ощущение.

Ну....для меня это новое - хорошо забытое старое.....начинал с МК КР580ВМ80А в 1987 году....практически тогда же Z80, что практически одно и тож....

arch07
Подозрение что порт ввода требуется слушать постоянно щемилось на краю сознания и не давало покою мозгам. До приоритетов я еще не дошел, но поищу.

При программировании в общем цикле, даже с прерываниями....понятие "постоянно" - не существует...есть понятие "периодически"....
А с прерываниями - слушать, как раз, и не надо, внутренняя схема МК сама обнаружит изменение уровня сигнала на указанном порту ввода, и заставит МК выполнить указанную программистом функцию....

Приоритетов в программировании AVR и нет никаких....все только то, что организуете сами....под приоритетом я имел ввиду, что если запрограммировано прерывание аппаратное - то указанная функция выполнится с наивысшим приоритетом, а вот использование результатов ее деятельности можно в общем цикле "неспешно" разобрать....поставив разбор условий событий, возникающих по времени, и контролирующих например дозирование - на первое место....В примере про многокомандный таймер - я показал, как разгрузить главный цикл для того, чтобы он оставался коротким, и временные события, обрабатываемые в нем не теряли ни одной дискреты времени и ни одного значимого события...
Ой...не знаю, только понимаете ли Вы меня.....

В принципе есть методы "продвинутого" программирования, которые могут и из AVR выжать гораздо больше, чем кажется возможным.....но это на ассемблере в обязательном порядке....
Про ущербность стандартных СИ-шных библиотек и библиотек устройств периферии - вообще говорить не хочется....такая лажа....но ....некуда деваться....если время ограничено..
2014-03-02 добавлено 02/03/2014 22:43:36#1944590

Завсегдатай




460 39
Москва
3 мес. назад
1. С дребезгом датчика - разберемся при получении. Пока принимаем как нормальный. Накрайняк раскурочим и модернизируем Кстати "дребезг" - это нечеткий цифровой ответ датчика, когда из-за несовершенства конструкции один импульс может быть принят контроллером за два? Или это что-то другое?
2. Z80 - это мой первый компьютер (Спектрум). И я тогда только на бейсике учился. Зато сам написал прогамму расчета параметров стрелок и сделал курсовую за 1 день, вместо месяца расчетов на калькуляторе (ну не считая недели кодинга )
Ностальжи...
3. Насчет проектов ребят - там продавали готовый продукт, который был мне избыточен в случае платы (как таймер) и неудобен в случае сенсорного экрана. А сложность представленного кода с минимум моих знаний отпугивала от настройки "под себя".
4. Ваша тема и та про помпы немного упорядочила знания. Показала логику работы (не процессора, а создания проекта), сподвигла сделать то, что мне будет удобно. Немного непривычно делать проект открывая все новые и новые возможности. Какие-то отпадают по причине дороговизны или не востребованности, другие наоборот...

Например сейчас не могу понять что произойдет, если отключится питание в момент работы сервомашинки. У нее есть обратная связь? по идее там переменный резистор, считывающий положение вала.
По идее при подаче питания надо проверить как стоит серва. В примерах же только задается положение или у меня плохие примеры. Вообще с питанием платы отдельный вопрос. так и хочется подвесить аккумулятор или ионистор. Но почему-то нет таких примеров в практических реализациях, значит это нерационально.

Второе пока совсем непонятное для меня место - это шины I2C и SPI. Подозреваю, что это что-то хорошее, позволяющее подключить просто достаточно сложные устройства, в большом количестве (вы же вешаете дисплей и таймер на 2 проводочка), но... нипонял как. пока. Тяжко без железа.
Вроде разобрался с дисплеями - графические тупо просят координату и цвет (ну или растровую картинку, но это насколько я понимаю уже программная реализация), знаковые проще - они просят знак. Но тогда где-то у них должны быть прошиты эти знаки. Но гады продавцы не говорят где что там внутри и подозреваю, что кириллицы там нет - латиница, цифры и немного спецзнаков.

Насчет пойму-непойму - вы пишите незнакомые слова, они полезны - сподвигают расширить кругозор. Я когда учился водить очень боялся ездить т.к. плохо понимал, что там внутри машины машины происходит и чем мне грозят мои действия. И пока сам не сделал кап. ремонт двигателя и потом настроил его (еще карбюраторный) не успокоился. Ваш подход к оптимизации кода мне импонирует - спешу научится хотя бы на уровне любителя, но хоть толкового К сожалению мало людей которые подробно могут описать свои действия понятным обывателю языком, т.к. техническая терминология сильно упрощает, но к сожалению сразу отсекает непосвященных.
Странно читать статьи на сайте арудино про использование переменной (подразумевается, что человек только-только приступил к программированию), а через пару абзацев натолкнуться на использование переменных в функциях, причем что такое функция и с чем ее едят даже не упомянуто. Слава богу мне это понятно, но и статью-то я начал читать просто для порядка - ничего нового я для себя в ней не открыл.
2014-03-03 добавлено 02/03/2014 23:44:00#1944610

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
сообщение arch07
Кстати "дребезг" - это нечеткий цифровой ответ датчика, когда из-за несовершенства конструкции один импульс может быть принят контроллером за два?
Или это что-то другое?

Можно и так сказать....
http://habrastorage....
Для примера - в крайнем левом положении устойчивое состояние единицы, в крайнем правом устойчивое состояние нуля, а вот кратковременные броски между состоянием нуля и единицы - это и есть дребезг....практически все кнопки так срабатывают, многие герконы, контакты реле....и т.д.... это нужно "фильтровать" программно...

сообщение arch07
Например сейчас не могу понять что произойдет, если отключится питание в момент работы сервомашинки. У нее есть обратная связь? по идее там переменный резистор, считывающий положение вала.

Я не знаю о чем речь...Вы хоть бы ссылки давали на то, что прочитали перед тем, как написать сообщение. Сервоприводов существует огромное количество, как с обратной связью, так и без....и интерфейсов обратной связи существует не один....аналоговый сигнал с соосного переменного резистора - это простейший вид обратной связи...но в принципе и на нем много чего можно сделать...

сообщение arch07
Вообще с питанием платы отдельный вопрос. так и хочется подвесить аккумулятор или ионистор. Но почему-то нет таких примеров в практических реализациях, значит это нерационально.


Сделать бесперебойное питание для микроконтроллера - это никто не запрещает....но если он не несет каких-то специфических функций, например сбор и сохранение данных, или что-то в этом роде, то логика тут такая:
Зачем обеспечивать бесперебойность контроллера, если все управляемые устройства остались без электропитания, проще обеспечить корректное включение при подаче электропитания, тем более это все равно придется программировать...т.к. хоть один раз но контроллер включить придется.... и он процедуры включения должен корректно отработать.
НО.....это слегка "ущербные" рассуждения и нужно стремится к бесперебойной работе микроконтроллера....


сообщение arch07
Второе пока совсем непонятное для меня место - это шины I2C и SPI. Подозреваю, что это что-то хорошее, позволяющее подключить просто достаточно сложные устройства, в большом количестве (вы же вешаете дисплей и таймер на 2 проводочка), но... нипонял как. пока. Тяжко без железа.

Подозреваете почти правильно....почитаете про данные шины поймете..просто, в двух словах не объяснишь.....да и смысла нет...все и так расписано подробно...
И почитать про данные шины - нужно в первую очередь, т.к. это позволить выбирать более правильные устройства периферии....
Есть еще ISP, IC , последняя, в одном из примеров применялась для подключения температурного датчика.....которых можно много "повесить" на одну шину....в большинстве случаев цель этих шин, одна - экономить ресурсы микропроцессора в виде портов ввода/вывода и интерфейсных портов.....но есть и расплата - в разных случаях она разная...зачастую это скорость обмена с периферией, ограничения по длине шины , и т.д...

сообщение arch07
Вроде разобрался с дисплеями - графические тупо просят координату и цвет (ну или растровую картинку, но это насколько я понимаю уже программная реализация), знаковые проще - они просят знак. Но тогда где-то у них должны быть прошиты эти знаки. Но гады продавцы не говорят где что там внутри и подозреваю, что кириллицы там нет - латиница, цифры и немного спецзнаков.

Да, так и есть - наборы символов прошиты...для того, чтобы в символьных дисплеях появилась кириллица - их нужно приобретать в России...в "чип и дип" например, хотя это и не лучший пример....что гораздо дороже...чем у китайцев...в разы дороже...
Потом, некоторые дисплеи позволяют запрограммировать под определенным кодом свой символ (несколько символов) ....и в некоторых случаях этого будет достаточно...


сообщение arch07
Странно читать статьи на сайте арудино про использование переменной (подразумевается, что человек только-только приступил к программированию), а через пару абзацев натолкнуться на использование переменных в функциях, причем что такое функция и с чем ее едят даже не упомянуто. Слава богу мне это понятно, но и статью-то я начал читать просто для порядка - ничего нового я для себя в ней не открыл.


Вообще, что такое переменная, константа, функция, процедура, и т.д.....эти вопросы давно находятся в программе информатики средней школы и не только в России...
Понятно, что есть пласт людей, которые учились в средней школе до того момента, когда эти понятия включили в программу....но с другой стороны, сейчас , слава процессу цивилизации, литературы по программированию не просто много, а ооооооочень много.... и вся она доступна....так, что было бы желание.
Те, кто учился программировать по журналу "РАДИО" 1986 и далее годов - поймут преимущества сегодняшнего положения дел.....
2014-03-03 добавлено 03/03/2014 02:45:08#1944631

Новичок




1
Russian Federation Moscow
3 г. назад
сообщение Z0RS
Обратите внимание, что при использовании I2C последовательного интерфейса - соединения значительно упрощаются. И LCD дисплей подключен транзитом через модуль RTC (часов реального времени). Никаких паяных соединений нет вообще....все скоммутировано - проводами с разъемами.
Скетч - естественно, несколько другой использовался с добавлением строк инициализации и использования LCD 16x2. [/color]


Уважаемый Z0RS! А могли бы поделиться готовым скетчем с вариантом LCD? Сам только начинаю свои шаги в программировании, пока разберусь - пройдет время, а опробовать хочется уже сейчас А в остальном все четко расписали и схемки приложили - большой респект Вам за это! Сейчас, изучая профильные форумы по Ардуино, вижу, что не все заморачиваются подробным комментированием скетча и принципиальной схемой коммутации, а у вас все по полочкам!

И еще вопрос касательно формата времени UNIX - правильно ли я понял, что максимальное число секунд может быть 60*60*24=86400? Существует ли способ заставить реле срабатывать раз в двое суток. т.е. как-то задать 48 ч в сутках что ли или доп.проверка должна быть по условиям? Или использовать какой-то другой подход для решения данной задачи?
2014-03-04 добавлено 04/03/2014 07:35:51#1945046

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
Alexey Khaydukov
Уважаемый Z0RS! А могли бы поделиться готовым скетчем с вариантом LCD? Сам только начинаю свои шаги в программировании, пока разберусь - пройдет время, а опробовать хочется уже сейчас....

Готовым скетчем чего? Если просто пример, как использовать LCD на интерфейсе I2C - то в теме такие примеры есть.....
Или Вы имеете ввиду готовый скетч какой-то автоматизации, какого-то аквариума?

Если да, то : Вы, наверное плохо прочитали всю тему от начала....я неоднократно цели создания данной темы озвучивал....и
ОСНОВНАЯ ЦЕЛЬ ТЕМЫ :

Дать понять аквариумистам, что создание устройств автоматизации, для контроля процессов в аквариуме и других объектах дома и не только - они могут делать САМОСТОЯТЕЛЬНО.
Это не сложно....это во-первых, а во вторых показать одну из дешевых платформ, которая может быть использована для создания устройств автоматизации. Это готовые платы ARDUINO, построенные на основе микроконтроллеров класса AVR - фирмы AMTEL, это во-вторых....

Понимаете, в чем все дело: Мне не сложно организовать, выпуск готового коммерческого продукта, причем удельная себестоимость продукта будет ниже, чем у плат ардуино на ebay.com
Можно организовать сбор требований к контроллеру и сделать некий, среднестатистический продукт. Заказать в Тайване изготовление плат под него, корпусов, б/п и т.д. и в итоге будет даже дешевле, чем аквариумист соберет сам....я все это могу организовать, т.к. знаю как и через кого это делается....

И все равно эта идея обречена на коммерческий провал? Знаете почему?


Теперь по теме:

Alexey Khaydukov
И еще вопрос касательно формата времени UNIX - правильно ли я понял, что максимальное число секунд может быть 60*60*24=86400? Существует ли способ заставить реле срабатывать раз в двое суток. т.е. как-то задать 48 ч в сутках что ли или доп.проверка должна быть по условиям? Или использовать какой-то другой подход для решения данной задачи?

Нет....Вы не правильно поняли....говорите, что все расписано чудесно-пречудесно , а оказывается нет.

В примере с мультипрограммным таймером в структуре описания задач (я приведу еще раз строку описания)

{RelPin2,DAILY,13*hr+35*mn,6*hr+55*mn,LOW}

Первый параметр - это номер пина порта вывода, к которому присоединено какое-либо устройство коммутации (реле, симмистор и т.д.)

А теперь - внимание : Второй параметр задает период задачи в секундах, а символьные константы - использованы просто для удобства восприятия кода.
Т.е если нужно, чтобы задача выполнялась каждый час - этот параметр должен быть равен 3600, если необходимо выполнение один раз в 2 суток то этот параметр должен быть равен 86400 х 2 = 172800.

Третий параметр, это смещение от начала периода. Четвертый это длительность, пятый - состояние которое должно быть выставлено на указанном пине - для включения контроллируемого устройства.

Например, необходимо, чтобы задача выполнялась раз в 2-е суток, в 6 - 45 по времени суток, длительностью 149 минут , строка в структуре задач будет выглядеть примерно так:

{RelPin2,172800,6*hr+45*mn,149*mn,LOW}

А можно сделать, чтобы задача выполнялась раз в 6 секунд, например с платой ARDUINO UNO, у которой к 13 пину жестко присоединен светодиод, можно вставить в структуру задач, вот такую строку :

{13,6,0,3,HIGH}

и светодиод раз в 6 секунд будет загораться на 3 секунды....я такой "финт" - использую как, так называемый "хард-бит" т.е. "серцебиение" устройсва автоматизации - если мограет светодиодом, значит главный цикл выполняется, и остальные задачи, также контролируются, а остальное мне не интересно. Поэтому, мне особо LCD и не нужен.

Теперь вернемся к
arch07


Что касается импульсного датчика потока...да ...как не крути, а лучше всего использовать аппаратное прерывание
На плате UNO на втором пине можно использовать прерывание номер 0 (ноль)....на плате Мега прерываний больше, может посмотреть в документации какие прерывания на какие пины приходятся здесь http://arduino.cc/en... в самом начале статьи есть табличка.
Я использовал нулевое ....в коде это выглядит так:

pinMode(2,INPUT);
attachInterrupt(0,ISR_1,RISING);

Т.е. объявляем порт на 2 пине как ВХОД, и назначаем на нем обработку аппаратных прерываний, причем имя функции обработчика прерываний будет ISR_1 , но можно и любое другое назначить...Эти строчки помещаем в функцию setup().
Здесь параметр RISING означает, что обработчик прерывания будет вызван по мере фиксирования возрастающего фронта сигнала на указнанном входе. FALLING - будет означать фронт спада сигнала....

Затем ниже закрывающей скобки последней объявленной функции в скетче, т.е. в свободном месте в конце файла объявляем и описывем функцию-обработчик прерывания:
void ISR_1(){
Fl_flag++;
}

Здесь 2 хитрости, во первых переменную Fl_flag предварительно нужно описать следующим образом :
volatile int Fl_flag = 0;
Это описание необходимо разместить в скетче до функции setup();

Модификатор переменной volatile - объяснять не буду...пока....потом сами разберетесь, если будет необходимо....(просто без него возможны ошибки.....причем "павающие" - зависящие от процесса компиляции).

Т.е наш обработчик прерывания просто увеличивает значение переменной на единицу и все....вообще, тут главное правило, чем короче код обработчика прерывния - тем правильнее.

Все остальное делается в главном цикле в функции loop()

Поскольку сейчас никакой задачи по этому датчику не поставлено, то я не знаю какую логику написать, я думаю сами напишите по-позже, когда формализуете задачу.
главное, после использования данной переменной, в гланом цикле ее нужно или уменьшить на единицу, если мы делаем чтото в главном цикле по правилу - один цикл одна итерация, или обнулить данную переменную

Fl_flag=0;

например может существовать некоторое количество импульсов на литр пропущенного объема, тогда мы в главном цикле проверяем не стала ли переменная, которую мы увеличиваем в обработчике прерываний, равной количеству импульсов на литр, и тогда увеличиваем другую переменную, в которой считаем литры, а эту - обнуляем и так, до тех пор , пока не сосчитаем требуемое количество литров.....и .т.д ....вообщем, тут фантазии много может быть...



Изменено 4.3.14 автор Z0RS
2014-03-04 добавлено 04/03/2014 11:07:27#1945103

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
В связи с поступающими вопросами об управлении светодиодным светом и об их подключении - сделал простейшую схему-пример для использования сборки из 6 светодиодов с платой Arduino, которая будет обеспечивать диммирование светодиодов для создания эффектов восхода и заката.
Собственно сама схема:

Это простейшая схема с одним каналом управления ШИМ. При необходимости может быть масштабирована.

Это же в pdf и с чуть лучшим качеством:
http://my-files.ru/z...

Для того, чтобы использовать с этой схемой пример - с закатом и рассветом, в коде необходимо поменять адрес пина порта ШИМ, а то я его в схеме нарисовал на 6 пине а в коде назначил 9, а теперь и то и другое уже выложено на файлообменик и нужно перезаливать, но я думаю и так все разберутся, кому требуется...
Поменять вот это:
#define PWM_PIN 9

на вот это:

#define PWM_PIN 6

Изменено 6.3.14 автор Z0RS
2014-03-06 добавлено 06/03/2014 13:04:44#1946078

Посетитель




93 1
Москва
1 дн. назад
Z0RS


А возможно ли заменить uno r3 на микро или нано? Для экономии места. Соответственно с сохранением остальных устройств схемы.
2014-03-09 добавлено 09/03/2014 15:25:23#1947299

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
Bwzs
А возможно ли заменить uno r3 на микро или нано? Для экономии места. Соответственно с сохранением остальных устройств схемы.


Легко. Но есть нюансы....
Есть микро и нано без разведенного на плате конвертера интерфейсов с USB...такие платы можно запрограммировать, только имея такой конвертер интерфейсов в виде отдельного устройства. Отсюда вытекают два варианта, либо брать микро или миньки с USB или брать дополнительно конвертер USB/ISP/TTL.

И еще по-поводу масштабирования...по вопросу в личку.....
Вот накидал схему, где 3 канала света. Два канала ШИМ управляемые, а один канал управляется релейной коммутацией....

Ну, понятно, это все ориентировочно ...просто чтобы показать, что все это возможно....
2014-03-09 добавлено 09/03/2014 17:00:45#1947318

Посетитель




93 1
Москва
1 дн. назад
Z0RS


Типо такой?
http://www.ebay.com/...
2014-03-09 добавлено 09/03/2014 19:02:51#1947343

Свой на Aqa.ru




3481 679
Санкт-Петербург
2
6 час. назад
Каменный век.Есть процы и подешевле и поудобнее.
2014-03-09 добавлено 09/03/2014 19:31:52#1947354

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
Андрей финн
Каменный век.Есть процы и подешевле и поудобнее.


Ну и создайте тему...и учите программировать те процы, что дешевле и удобнее, можете начать с изучения архитектуры и с ассемблера сразу, так правильнее....
А то, умничать все горазды....

Bwzs
Типо такой?
http://www.ebay.com/...


Да...такой комплект подойдет...
А альтернативой может быть такая плата, конвертер интерфейсов уже непосредственно на ней разведен....
http://www.ebay.com/...


Изменено 9.3.14 автор Z0RS
2014-03-09 добавлено 09/03/2014 19:36:20#1947362

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
Как присоединить плату Arduino UNO к компьютеру для программирования:

По идее при первичном присоединении платы для программирования в среде Arduino, если это происходит в операционной системе Windows (разных версий начиная с XP) то должно определится подключаемое по USB устройство. Далее, по идее, виндоус должна определить подключаемый виртуальный COM-порт и проставить драйвера под него...после чего в диспетчере устройств при наличии подключения появится виртуальный COM-порт ...примерно так:

Понятно, что это картинка сделана в среде XP, в более поздних версиях будет немного по другому....

Иногда виндоус не находит подходящий драйвер.

Как правило, на платах Ардуино, либо установлен конвертер интерфейсов USB/ISP или он эммулируется на отдельном микропроцессоре ATMEL.
В этом случае может помочь установка драйверов например с этого сайта:
http://www.ftdichip....
В любом случае вначале необходимо добится появления виртуального COM-порта.
Затем, в среде программирования Arduino, необходимо сделать настройку на данный порт:


И затем установить тип программатора:

Правда, он по умолчанию и так должен быть установлен как показано на картинке...

В принципе, и все....можно программировать..
А нет не все....
Еще один момент необходимо выбрать тип платы....ну здесь принцип простой, необходимо выбрать либо тот тип платы, который имеется на руках, либо тип платы с сопостовимым микропроцессором.

Вообще, если все манипуляции по присоединению будут сделаны правильно, в нижнем правом углу будет написано что плата присоединена по тому порту, который виртуальный COM-порт...


Изменено 13.3.14 автор Z0RS
2014-03-13 добавлено 13/03/2014 11:19:22#1948791

Постоянный посетитель




257 4
Новосибирск
6 мес. назад
Добрый день!
Драйвера у меня установились сами (windows7), com порт появился.
Поставил програматор как у вас (у меня по умолчанию стоял второй сверху), но ошибка все равно осталась.
при поптытке залить он компелирует нормально, но потом пишет avrdude: stk500_getsync(): not in sync: resp=0x00
(как на картинке)
2014-03-13 добавлено 13/03/2014 12:57:33#1948824

Свой на Aqa.ru




693 77
Выкса
8 мес. назад
lisenkow


У Вас на картинке
http://www.picturesh...
в правом нижнем углу написано, что плата присоединена на первый ком-порт....я думаю, что проблема в этом....это не должен быть порт с номером один. Первый ком-порт используется операционной системой для своих нужд....и если виртуальный порт, создаваемый при подключении платы - переназначить на первый - он нормально работать не будет...
Виртуальный порт для платы должен иметь номер отличный от первого...
Потом, Вы выбрали не правильный эмулятор программатора - STK500, выберите правильный....см. предыдущий пост...

Изменено 13.3.14 автор Z0RS
2014-03-13 добавлено 13/03/2014 13:32:53#1948832

<< 1 3456789 >> Создать новую темуБыстрый ответ