Постоянный посетитель
|
ARDUINO для автоматизации аквариума (страница 2) |
Создал отдельную тему по вопросам использования простых и не дорогих плат ARDUINO для целей автоматизации аквариума. Схема коммутации в случае использования платы NANO: Программа для среды программирования Arduino: //*************************************************** // Скетч для управления релейным модулем, в котором * // использовано два канала. Используется также RTC * // Релейный модуль - с инверсной логикой на входе * // Автор: ZORS * // Версия 1. Дата 21.12.2013 02:40 * //*************************************************** //----------ИМПОРТ БИБЛИОТЕК------------------------- #include //Подключаем библиотеку для использования I2C интерфейса с модулем RTC #include //Подключаем библиотеку для использования модуля часов реального времени 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 //Если секунд с начала суток больше, чем задано для включения //Но, одновременно и меньше, чем задано для включения + длительность { digitalWrite(RelayChn1,LOW); //Устанавливаем на ПЕРВОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает } else //во всех остальных случаях { digitalWrite(RelayChn1,HIGH); //Устанавливаем на ПЕРВОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается } //------------КАНАЛ 2 - все аналогично ----------- if ((utime >= StartRelCn_2) && (utime { 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 FilesArduinolibraries Сюда и помещайте папки с подключаемыми библиотеками. Если на этот момент, среда программирования была запущена - ее необходимо закрыть, и запустить заново. После этого библиотека будет доступна в меню Скетч/Импортировать библиотеку. Микросхема 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 |
|
#1907148 |
Малёк
|
|
Доброго времени суток. Большое спасибо что откликнулись. Контроллер применяю аурдино мега 2560 R3,с заделом на будующее так сказать. Часы реального времени подключил за что большая благодарность, ZORS Так как я только начинаю иметь дело с ардуино , сразу пришла мысль создать массив на каждую секунду и в зависимости от показания часов от начала суток выбирать. Как то с примитива надо начинать))) я надеюсь на вашу помощь как лучше это организовать. |
|
#1939675 |
|
Постоянный посетитель
|
|
electron Всегда пожалуйста! А для вежливого человека - в двойне пожалуйста.... electron Да....что сейчас радует, это - то, что начинающие аватоматизаторы легко могут приобрести, и покупают довольно мощные платформы. С другой стороны - это же и огорчает - работа с более мощной платформой, чем оно требуется для какого-либо проекта, учит не дорожить ресурсами микроконтроллера и не искать пути оптимизации использования этих ресурсов. Отсюда возникает сильно плохой программный код, и "корявые" знания в голове.... ну это так....лирическое отступление. Что касается платформы 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... Опробовал данный скетч - на первый вгляд все отрабатывает...есть ошбочка на секунду в закате...по моему...это нужно со знаками в условных выражениях разобраться. Положительный момент в данном подходе то, что при инициализации контроллера во время, когда текущее количество секунд находится в интервале изменения ШИМ - значение ШИМ будет выставлено коректно. Но это и отрицательный момент. т.к. светодиоды нужно включать плавно....и этим процессом не всегда драйвера занимаются коректно...т.е. при пропадании напряжения, или при другой какой причине, вызвавшей перезагрузку контроллера, если это произойдет в период времени, когда свет должен быть включен на полную яркость - он и будет включен сразу на полную...без "разгона" светодиодов....это можете сами дописать в модуле инциализации... Позже еще посмотрю...ошибки по исправляю....но в целм данный скетч рабочий... |
|
#1939886 |
Малёк
|
|
Z0RS Огромное спасибо!!!Не ожидал такого такого полного ответа. |
|
#1940226 |
Постоянный посетитель
|
|
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 минут Согласитесь оно, много информативнее, чем просто длинное число секунд, это с одной стороны, с другой, вычисление значения, которое будет подставлено - будет происходить только один раз при компиляции программы, и не будет требовать ресурсов микропроцессора. Этот простенький приемчик сильно упрощает жизнь программиста, особенно при отладке... |
|
#1940738 Нравится arch07
|
Посетитель
|
|
Z0RS День добрый. Начитавшись Ваших постов. Подумал-подумал, да и заказал Арудину. Правда я сразу замахнулся на мега 2560 R3 (понятно что избыточно для моих задач, но цена в 15 баксов не остановила - нехай будет запас), ну и заодно заказ пару нано для других проектов - один очень актуален - полив роз жены (10 горшков) при нашем отъезде на дачу с механическим управлением сервомашинкой и контролем положения "заливного" шланга парой магнит-геркон, в перспективе еще прикручу датчики влажности грунта. Спасибо за подробное описание примеров со схемами подключения, коментариями кода и рекомендациями по его оптимизации. Хотя кодер из меня еще тот, но немного с СИ знаком. А с Вашими объяснениями поверил, что получится запустить проект. Есть вопросик по поводу ph-метра. Пока я не баловался с СО2 в большой банке. Немного поигрался в отсаднике, где подращивал кусты в горшочках. А для большой банки считал свет недостаточным. Да и внесение удобрений автоматизировать не получалось и я "замедлил" банку, когда понял, что не справляюсь, снизив освещенность. Но сейчас хочется автоматизировать процесс. Оставив для ручного труда только прополку. Сейчас занят переделкой света на СД - там свой контроллер с рассветами-закатами. На арудине сначала хотел оставить внесение удобрений (помпы из шприцев с сервами впечатлили простотой изготовления и управления), контроль освещенности по фоторезистору, контроль за температурой и сбор и складирование статистики на домашний сервер. Управление по веб-интерфейсу и дополнительно экранчик 20х4 потому, что нравится Изучение нашего форума и форума украинских коллег подсказало, что автоматизировать подачу СО2 тоже реально, но тогда уж надо озаботится контролем. И вот тут полезли сплошные вопросы: Ваши высказывания о недостаточности битности АЦП. А какова точность измерения PH достаточна для автоматизации аквариума? Разве 0,1 единицы плохо? Я пока еще только разбираюсь. Немного раздражает, что вся эта система СО2 - PH очень инертна и я пока с трудом представляю что требуется в плане железа. Какой электрод достаточен, а какой избыточен, требуемая точность измерений, последствия отказа системы. Был бы признателен, если бы вы высказали свои соображения по этому поводу. Как часто требуется калибровать электрод, как отследить что требуется калибровка или только по времени? Наверняка есть некоторые наработки и оценки проектов коллег. Заранее спасибо. |
|
#1943653 |
|
Постоянный посетитель
|
|
arch07 Доброго времени дня....И поздравляю с почином и сочувствую...одновременно.... arch07 Я с Ардуино ( в смысле с AVR технологиями) начинал тоже с полива и опрыскивания кофейных деревьев ... arch07 Если честно, то это не совсем подробное и не полное описание..... мне не сложно написать готовый проект среднестатистического контроллера для аквариума, но задача этой темы - в другом, сделать аквариумистов, тех, кто пожелает, чуть более развитыми в автоматизации, которую они могут делать самостоятельно. В этом случае, человек сам сможет формализовать соответствующую задачу, и в последствии реализовать ее автоматизацию, возможно, и не на процессорах ATMEL и платах ARDUINO....в принципе сопоставимых платформ обнаруживается большое количество. И вот эта задача для меня - интереснее, т.к. приходится подбирать состав информации так, чтобы было довольно насыщенно, и оставалось пространство для самостоятельной работы....вообще как в секции робототехники....с детишками За них, также - нельзя все делать....интерес пропадет....человеку интересно - пока он сам чего-то достигает... arch07 Что касается измерения 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 То, что система инертна....это вообще огромный плюс....а не отрицательное свойство, но инертна система только при наличии ощутимого буфера, в виде солей жесткости например...буфер, как раз делает резкие скачки уровня 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 процессоров в одном проекте...что делает программирование сложнее.....значительно..... |
|
#1943765 Нравится Дядька-рыбомор
|
Посетитель
|
|
Ок, просто и понятно. 50-100 баксов в год... ну его такие расходники... |
|
#1943849 |
Постоянный посетитель
|
|
arch07 Ну ...а Вы за-дешево хотели pH измерять? Это не бесплатное удовольствие....если только электроды не "достаются" бесплатно откуда-то....с работы например.... На пром предприятиях встречаются комбинированные электроды Mettler Toledo обслуживаемые....очень долговечные...но все равно через года 3-4 и они придут в негодность....а еще есть с заменяемыми мембранами....ну у этих двух - цена вообще "неприличная"....если только не.... ну Вы понимаете.... Но...это - брать не свое - не хорошо....я себе такое никогда не позволял....хотя возможностей было очень много....Использовать некоторое оборудование на работе, для получения информации, знаний...это - да...было...дело.... Потом, в принципе, можно и 20 долларовые электроды использовать, просто не нужно ожидать от них высокой точности...да в среднестатистической банке она и не нужна.... это с одной стороны... А электронное измерение СО2 или кислорода - еще дороже....хорошие электроды для измерения растворенных газов - очень дорогие, цены - от несколько сотен баксов.... Можно конечно поиграться с датчиком на основе MG811 - типа такого http://www.ebay.com/... разместив его в погруженном в воду воздушном пространстве (колокол), тогда газообмен сделает среду в колоколе насышенной СО2 и это будет пропорционально содержанию газа в воде.....я пробовал...но только деньги зря потратил....т.к. можно измерять до 10-15 ppm ....правда, когда мне подарили отслуживший свой срок, но еще вполне рабочий - электрод для измерения растворенного СО2 - вопрос отпал сам собой... arch07 Вообще, если честно можно и без клапана и таймера обойтись....уже несколько лет обхожусь....в одной из банок, вообще никогда не было ни дропп-чеккера, ни клапана на подаче СО2...просто баллон, редуктор, игольчатый вентиль, счетчик пузырей, диффузер и все....подача постоянная....ночью на несколько часов включается аэрация...иногда измеряю pH капая индикаторной жидкости....но делаю это - сейчас реже раза в месяц...Вот, это - кстати, карбонатная буферная система воды в действии... Поэтому, в аспекте подачи СО2 - я, об автоматизации думаю в последнюю очередь...это с другой стороны arch07 Ленивая протока, без всяких бачков, просто на доливе и переливе через устройство на принципе сифона, шланг для долива внутри шланга для слива - проще ничего быть не может...только иногда послеживать нужно, чтобы сифон не завоздушивался....но приподнятие уровня воды в банке - покажет, что в сифоне воздух в верхней части скопился....но это очень редко бывает... Вообщем....не просто - а очень просто....поищите...даже здесь на форуме была информация...а схему самого сифона я где-то приводил....если не найдете...поищу... Эту приспособу - я не использую как протоку в чистом виде - не понравилось, использую просто для поддержания уровня воды в банке и автоматической подмены, а еще клапан электромагнитный на воду еще нужен....если автоматизировать будете...но они в магазинах..от 600 рублей видел.... arch07 А, как Вы думаете, розеточный таймер - может уронить банку? А ведь сделаны они еще хуже...и от коммутации индуктивной нагрузки иногда слетает программа.... arch07 Можно...но не на Arduino, нужно платформа, на которой можно систему технического зрения развернуть....я к сожалению кроме LabView ничего не знаю...а это дорого, громоздко и сложно в программировании....и опять же нецелесообразно.... arch07 Ну....я же ее удалять не собираюсь, и в режиме вопрос-ответ она может существовать столько, сколько нужно....хоть кому-нибудь... Просто, есть еще наработки, по использованию SD-карты например, и всякие фишки с TTL-ной периферией....но это я наверное уже не буду выкладывать....ибо нет смысла...причины - в предыдущем сообщении. |
|
#1943980 |
|
Посетитель
|
|
сообщение Z0RS ну... надежда была... Светодиоды вон как за последнее время подешевели сообщение Z0RS Принял к сведению... сообщение Z0RS Это да, но у нее мне не нравится толщина сливного шланга и потенциальная возможность забиться, если эту толщину уменьшать. И вообще я обычно всесторонне вопрос изучаю и к тому, что может затопить все 15 этажей подо мной отношусь с жуткой перестраховкой. Протоки изучаю с момента пуска первого аквариума (года 3 ужо). Пока посматриваю на сообщающиеся сосуды с одним шлангом туда-сюда как наиболее перспективное направление. Ну а про таймеры я в курсе. Насчет дроп чеккера мысль была: веб-камера и распознавание картинки на сервере с более мощной операционкой (благо есть такой дома), но отказался - слишком громоздкая и неустойчивая система. Тут вопросик нарисовался: Имеется система: Арудино (не важно какая), таймер реального времени, экранчик, плата с реле. И вот такой датчик http://www.aliexpres... 1. по таймеру включается реле - напряжение подается на помпу(это мы уже умеем) 2. контролируем по датчику потока объем. 3. контролируем по времени работу реле (это на сучай, если насос не включился, шланг слетел, завоздушивание и пр.) 4. отключаем реле по событию 2 или 3 - что раньше наступит. Самое поганое, что вышеприведенный датчик - для меня темный лес. Судя по всему построен на эффекте холла и один импульс -> один оборот крыльчатки -> пропущенный объем Z0RS, можно попросить Вас реализовать это в правильном коде? А то у меня есть подозрение, что мой вариант - загонять это в цикл с потенциальной возможностью ухода в бесконечность не есть верное решение. P.S. Пока только умозрительно играюсь... Арудины с датчиками и прочим жду не ранее числа 15-го. Изменено 2.3.14 автор arch07 |
|
#1944514 |
Постоянный посетитель
|
|
arch07 Если честно : сам живу на 7-м этаже, и особо не переживаю, т.к. к тому, что сделал своими руками - отношусь с уважением, т.к. свой труд уважаю в первую очередь (как же уважать чужой труд, если не уважать свой ) , и стараюсь делать такие вещи с головой и надежно... Мы уезжали на несколько недель в отпуск - я оставлял протоку на небольшой подпитке, чтобы уровень не падал, и чтоб растения хоть немного получали питательных веществ....и не особо боялся...но у меня тогда улиток не было....а вообще говорят, что у кого-то было, что ампулярия закрыла выход протоки....но можно и это решить ...см. ниже. В качестве шланга слива - VarioLUX 10мм диаметр в магазине OBI брал....цена конечно кусалась.... Лежит уже более 3 лет ....дверями по нему возят, наступают...но он как вчера уложили....я его не прчищаю...просто в сифонную часть в сливную воду, иногда (1-2 раза в год) лью химию всякую с кислотами...типа САНИТА и т.д. он становится прозрачный прозрачный....как новый.... Внутри 10 мм. шланга - лежит 4 мм полиуретановая трубочка (брал на ebay) по ней подается вода.... Если сильно переживаете - поставьте датчик уровня на банку, и клапан на подачу воды...при достижении верхнего предельного уровня - клапан закрыть... в программе для Ардуино это будет одна строка, типа такой digitalWrite (номер_пина_порта_датчика_уровня, !номер_пина_порта_вывода_для_клапана); ну понятно, что я утрирую, и если будете делать автоматическую подачу, по код будет по-сложнее....чуть-чуть arch07 Вы, просто не представляете себе, насколько это геморройное направление, по сравнению с ленивой протокой на сифонном эффекте.... arch07 Ну да...скорее всего - это дискретный импульсный датчик расхода, выдает некоторое количество импульсов на литр. Это можно будет установить только при наличии датчика на руках, т.к. что то я не нашел информации у продавца по количеству импульсов .... Кстати минимальный поток, который данный датчик фиксирует 1 литр в минуту - это для подмены хороший поток, а для протоки - так вообще слишком сильный..... Как программировать? Ну если в главном цикле программы будет обработка коротких временных интервалов, то обрабатывая еще и импульсы с этого датчика также в главном цикле - можно что-то потерять либо импульсы с датчика, либо какое-то событие, а это может быть событие включения дозатора, например, а что еще хуже, это может быть событие выключения дозатора....и последствия неминуемы. Первое что приходит в голову, повесить это датчик на вход, который может генерировать аппаратное прерывание, а в функции обработки прерывания - просто увеличивать какую либо переменную (т.е. просто организовать счетчик), которую уже проверять и использовать в главном цикле с требуемой дополнительной логикой....так сказать, с высоким приоритетом зафиксировать импульс и самым низким приоритетом использовать информацию по количеству подсчитанных импульсов и все должно получится.... Попробую накидать в коде ....по-позже.... |
|
#1944549 |
Посетитель
|
|
Z0RS Ага! Я вот тоже докумкал до аппаратных прерываний. Но для меня это дело новое - сижу курю мануалы... Вместо того что бы светильник доделывать Жду вашего примера. И еще больше жду арудину с приблудами. Насчет датчика - я не задумвался над этим. Я просто заказал самый дешевый, что нашел. Он ведь не для работы, а для обучения. Подойдет для практического использования - хорошо, нет, так пойму что мне надо и подберу подходящий. Набор для макетирования собирал мало представляя что мне потребуется, нахватавшись из инета. Вот после того как поиграюсь, оценю возможности, явно осознаю перспективы - тогда да. Закажу уже понимая что и как. Я вообще повелся на ваши дозаторы для удо - уж очень стимпанковская весчь тем более они мне кажутся более надежными и дешевыми чем перистальтическая помпа в сравнимую цену. А уж идея таки подвязать арудину не только на удобрения пришла потом, при изучении тем. До этого видел проекты украинских друзей с сенсорным экраном и платы аквашилд, которую ребята из израиля делают, но не проникся. Мой опыт программирования в основном PHP и базы данных. там все просто и понятно пошел запрос - получил ответ и жди действий пользователя. Аппаратные процессы идут независимо и удобно предоставляют данные о своей деятельности не озадачивая меня как программиста о загрузке процессора и прочего. Программирование мк в связке с железом совсем новое ощущение. Подозрение что порт ввода требуется слушать постоянно щемилось на краю сознания и не давало покою мозгам. До приоритетов я еще не дошел, но поищу. |
|
#1944580 |
|
Постоянный посетитель
|
|
arch07 Тут одна принципиальная сложность возникла - я не знаю есть ли дребезг у этого датчика? если есть то это все усложняет...вообще конечно быть не должно. Это он в теории на эффекте холла, а на практике китайцы могли и на герконе сделать.....а герконы это датчик с дребезгом.... Тем более что arch07 Это то и настораживает..... arch07 Вообще, тема про дозаторы была не моя...а форумчанина с ником lisenkow. Я ее просто оккупировал... Кстати те дозаторы, что Вы там видели, это еще не дозаторы, а как раз перистальтические насосики, всего скорее из какой-нибудь модели струйного принтера....а дозаторами станут, когда к ним автоматику присоединят... Ну насчет надежности не знаю...но в принципе дозатору много и не надо...перекачать несколько миллилитров в сутки...даже такой техники должно хватить на долго... arch07 Чтойто? Нормальный рабочий проект....как раз не очень далеко от розеточного таймера...т.е. все просто и довольно надежно...должно быть.... arch07 Ну....для меня это новое - хорошо забытое старое.....начинал с МК КР580ВМ80А в 1987 году....практически тогда же Z80, что практически одно и тож.... arch07 При программировании в общем цикле, даже с прерываниями....понятие "постоянно" - не существует...есть понятие "периодически".... А с прерываниями - слушать, как раз, и не надо, внутренняя схема МК сама обнаружит изменение уровня сигнала на указанном порту ввода, и заставит МК выполнить указанную программистом функцию.... Приоритетов в программировании AVR и нет никаких....все только то, что организуете сами....под приоритетом я имел ввиду, что если запрограммировано прерывание аппаратное - то указанная функция выполнится с наивысшим приоритетом, а вот использование результатов ее деятельности можно в общем цикле "неспешно" разобрать....поставив разбор условий событий, возникающих по времени, и контролирующих например дозирование - на первое место....В примере про многокомандный таймер - я показал, как разгрузить главный цикл для того, чтобы он оставался коротким, и временные события, обрабатываемые в нем не теряли ни одной дискреты времени и ни одного значимого события... Ой...не знаю, только понимаете ли Вы меня..... В принципе есть методы "продвинутого" программирования, которые могут и из AVR выжать гораздо больше, чем кажется возможным.....но это на ассемблере в обязательном порядке.... Про ущербность стандартных СИ-шных библиотек и библиотек устройств периферии - вообще говорить не хочется....такая лажа....но ....некуда деваться....если время ограничено.. |
|
#1944590 |
Посетитель
|
|
1. С дребезгом датчика - разберемся при получении. Пока принимаем как нормальный. Накрайняк раскурочим и модернизируем Кстати "дребезг" - это нечеткий цифровой ответ датчика, когда из-за несовершенства конструкции один импульс может быть принят контроллером за два? Или это что-то другое? |
|
#1944610 |
Постоянный посетитель
|
|
сообщение arch07 Можно и так сказать.... http://habrastorage.... Для примера - в крайнем левом положении устойчивое состояние единицы, в крайнем правом устойчивое состояние нуля, а вот кратковременные броски между состоянием нуля и единицы - это и есть дребезг....практически все кнопки так срабатывают, многие герконы, контакты реле....и т.д.... это нужно "фильтровать" программно... сообщение arch07 Я не знаю о чем речь...Вы хоть бы ссылки давали на то, что прочитали перед тем, как написать сообщение. Сервоприводов существует огромное количество, как с обратной связью, так и без....и интерфейсов обратной связи существует не один....аналоговый сигнал с соосного переменного резистора - это простейший вид обратной связи...но в принципе и на нем много чего можно сделать... сообщение arch07 Сделать бесперебойное питание для микроконтроллера - это никто не запрещает....но если он не несет каких-то специфических функций, например сбор и сохранение данных, или что-то в этом роде, то логика тут такая: Зачем обеспечивать бесперебойность контроллера, если все управляемые устройства остались без электропитания, проще обеспечить корректное включение при подаче электропитания, тем более это все равно придется программировать...т.к. хоть один раз но контроллер включить придется.... и он процедуры включения должен корректно отработать. НО.....это слегка "ущербные" рассуждения и нужно стремится к бесперебойной работе микроконтроллера.... сообщение arch07 Подозреваете почти правильно....почитаете про данные шины поймете..просто, в двух словах не объяснишь.....да и смысла нет...все и так расписано подробно... И почитать про данные шины - нужно в первую очередь, т.к. это позволить выбирать более правильные устройства периферии.... Есть еще ISP, IC , последняя, в одном из примеров применялась для подключения температурного датчика.....которых можно много "повесить" на одну шину....в большинстве случаев цель этих шин, одна - экономить ресурсы микропроцессора в виде портов ввода/вывода и интерфейсных портов.....но есть и расплата - в разных случаях она разная...зачастую это скорость обмена с периферией, ограничения по длине шины , и т.д... сообщение arch07 Да, так и есть - наборы символов прошиты...для того, чтобы в символьных дисплеях появилась кириллица - их нужно приобретать в России...в "чип и дип" например, хотя это и не лучший пример....что гораздо дороже...чем у китайцев...в разы дороже... Потом, некоторые дисплеи позволяют запрограммировать под определенным кодом свой символ (несколько символов) ....и в некоторых случаях этого будет достаточно... сообщение arch07 Вообще, что такое переменная, константа, функция, процедура, и т.д.....эти вопросы давно находятся в программе информатики средней школы и не только в России... Понятно, что есть пласт людей, которые учились в средней школе до того момента, когда эти понятия включили в программу....но с другой стороны, сейчас , слава процессу цивилизации, литературы по программированию не просто много, а ооооооочень много.... и вся она доступна....так, что было бы желание. Те, кто учился программировать по журналу "РАДИО" 1986 и далее годов - поймут преимущества сегодняшнего положения дел..... |
|
#1944631 |
|
Новичок
1
11 года |
|
сообщение Z0RS Уважаемый Z0RS! А могли бы поделиться готовым скетчем с вариантом LCD? Сам только начинаю свои шаги в программировании, пока разберусь - пройдет время, а опробовать хочется уже сейчас А в остальном все четко расписали и схемки приложили - большой респект Вам за это! Сейчас, изучая профильные форумы по Ардуино, вижу, что не все заморачиваются подробным комментированием скетча и принципиальной схемой коммутации, а у вас все по полочкам! И еще вопрос касательно формата времени UNIX - правильно ли я понял, что максимальное число секунд может быть 60*60*24=86400? Существует ли способ заставить реле срабатывать раз в двое суток. т.е. как-то задать 48 ч в сутках что ли или доп.проверка должна быть по условиям? Или использовать какой-то другой подход для решения данной задачи? |
|
#1945046 |
Постоянный посетитель
|
|
Alexey Khaydukov Готовым скетчем чего? Если просто пример, как использовать LCD на интерфейсе I2C - то в теме такие примеры есть..... Или Вы имеете ввиду готовый скетч какой-то автоматизации, какого-то аквариума? Если да, то : Вы, наверное плохо прочитали всю тему от начала....я неоднократно цели создания данной темы озвучивал....и ОСНОВНАЯ ЦЕЛЬ ТЕМЫ : Дать понять аквариумистам, что создание устройств автоматизации, для контроля процессов в аквариуме и других объектах дома и не только - они могут делать САМОСТОЯТЕЛЬНО. Это не сложно....это во-первых, а во вторых показать одну из дешевых платформ, которая может быть использована для создания устройств автоматизации. Это готовые платы ARDUINO, построенные на основе микроконтроллеров класса AVR - фирмы AMTEL, это во-вторых.... Понимаете, в чем все дело: Мне не сложно организовать, выпуск готового коммерческого продукта, причем удельная себестоимость продукта будет ниже, чем у плат ардуино на ebay.com Можно организовать сбор требований к контроллеру и сделать некий, среднестатистический продукт. Заказать в Тайване изготовление плат под него, корпусов, б/п и т.д. и в итоге будет даже дешевле, чем аквариумист соберет сам....я все это могу организовать, т.к. знаю как и через кого это делается.... И все равно эта идея обречена на коммерческий провал? Знаете почему? Теперь по теме: Alexey Khaydukov Нет....Вы не правильно поняли....говорите, что все расписано чудесно-пречудесно , а оказывается нет. В примере с мультипрограммным таймером в структуре описания задач (я приведу еще раз строку описания) {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 |
|
#1945103 |
Постоянный посетитель
|
|
В связи с поступающими вопросами об управлении светодиодным светом и об их подключении - сделал простейшую схему-пример для использования сборки из 6 светодиодов с платой Arduino, которая будет обеспечивать диммирование светодиодов для создания эффектов восхода и заката. Это простейшая схема с одним каналом управления ШИМ. При необходимости может быть масштабирована. Это же в pdf и с чуть лучшим качеством: http://my-files.ru/z... Для того, чтобы использовать с этой схемой пример - с закатом и рассветом, в коде необходимо поменять адрес пина порта ШИМ, а то я его в схеме нарисовал на 6 пине а в коде назначил 9, а теперь и то и другое уже выложено на файлообменик и нужно перезаливать, но я думаю и так все разберутся, кому требуется... Поменять вот это: #define PWM_PIN 9 на вот это: #define PWM_PIN 6 Изменено 6.3.14 автор Z0RS |
|
#1946078 |
|
Посетитель
|
|
Z0RS А возможно ли заменить uno r3 на микро или нано? Для экономии места. Соответственно с сохранением остальных устройств схемы. |
|
#1947299 |
Постоянный посетитель
|
|
Bwzs Легко. Но есть нюансы.... Есть микро и нано без разведенного на плате конвертера интерфейсов с USB...такие платы можно запрограммировать, только имея такой конвертер интерфейсов в виде отдельного устройства. Отсюда вытекают два варианта, либо брать микро или миньки с USB или брать дополнительно конвертер USB/ISP/TTL. И еще по-поводу масштабирования...по вопросу в личку..... Вот накидал схему, где 3 канала света. Два канала ШИМ управляемые, а один канал управляется релейной коммутацией.... Ну, понятно, это все ориентировочно ...просто чтобы показать, что все это возможно.... |
|
#1947318 |
Посетитель
|
|
#1947343 |
|
Свой на Aqa.ru
|
|
Каменный век.Есть процы и подешевле и поудобнее. |
|
#1947354 |
Постоянный посетитель
|
|
Андрей финн Ну и создайте тему...и учите программировать те процы, что дешевле и удобнее, можете начать с изучения архитектуры и с ассемблера сразу, так правильнее.... А то, умничать все горазды.... Bwzs Да...такой комплект подойдет... А альтернативой может быть такая плата, конвертер интерфейсов уже непосредственно на ней разведен.... http://www.ebay.com/... Изменено 9.3.14 автор Z0RS |
|
#1947362 |
Постоянный посетитель
|
|
Как присоединить плату Arduino UNO к компьютеру для программирования:
По идее при первичном присоединении платы для программирования в среде Arduino, если это происходит в операционной системе Windows (разных версий начиная с XP) то должно определится подключаемое по USB устройство. Далее, по идее, виндоус должна определить подключаемый виртуальный COM-порт и проставить драйвера под него...после чего в диспетчере устройств при наличии подключения появится виртуальный COM-порт ...примерно так: Понятно, что это картинка сделана в среде XP, в более поздних версиях будет немного по другому.... Иногда виндоус не находит подходящий драйвер. Как правило, на платах Ардуино, либо установлен конвертер интерфейсов USB/ISP или он эммулируется на отдельном микропроцессоре ATMEL. В этом случае может помочь установка драйверов например с этого сайта: http://www.ftdichip.... В любом случае вначале необходимо добится появления виртуального COM-порта. Затем, в среде программирования Arduino, необходимо сделать настройку на данный порт: И затем установить тип программатора: Правда, он по умолчанию и так должен быть установлен как показано на картинке... В принципе, и все....можно программировать.. А нет не все.... Еще один момент необходимо выбрать тип платы....ну здесь принцип простой, необходимо выбрать либо тот тип платы, который имеется на руках, либо тип платы с сопостовимым микропроцессором. Вообще, если все манипуляции по присоединению будут сделаны правильно, в нижнем правом углу будет написано что плата присоединена по тому порту, который виртуальный COM-порт... Изменено 13.3.14 автор Z0RS |
|
#1948791 |
|
Посетитель
|
|
Добрый день! |
|
#1948824 |
Постоянный посетитель
|
|
lisenkow У Вас на картинке http://www.picturesh... в правом нижнем углу написано, что плата присоединена на первый ком-порт....я думаю, что проблема в этом....это не должен быть порт с номером один. Первый ком-порт используется операционной системой для своих нужд....и если виртуальный порт, создаваемый при подключении платы - переназначить на первый - он нормально работать не будет... Виртуальный порт для платы должен иметь номер отличный от первого... Потом, Вы выбрали не правильный эмулятор программатора - STK500, выберите правильный....см. предыдущий пост... Изменено 13.3.14 автор Z0RS |
|
#1948832 |