slava68: (Default)
2014-08-06 08:58 pm
Entry tags:

Бассейн по научному (часть1)

Вчера спаял 4 датчика температуры, относительно герметичных. Как мы раньше жили без термоусадочной трубки ?
Ночью расставил их по местам измерения: один в тени, второй на солнце, третий в водозабор, четвёртый в выход горячей воды с нагревателя. За 10 минут подключил фоторезистор - хорошо, когда сам паяешь и пишешь программу для микроконтроллера. Будет регистрировать когда Солнце светит, а когда за тучку зашло.


На фото: Прототип многоканального многофункционального измерителя температуры.

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


На фото: Разветвитель для подключения датчиков. Будущий корпус устройства.

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


На фото: Датчик температуры в тени, датчик температуры на выходе нагревателя.

Придумал сделать подпрограмму калибровки датчиков с записью информации на SD-карту. Если на накопителе нет файла с калибровками -> то провести калибровку. Наливаем стакан с горячей водой, опускаем туда все датчики и минут 10 это всё вместе остывает. Вычисляем среднее квадратичное значение температуры и записываем в файл корректировочные коэффициенты для каждого датчика для каждого интервала температур.
Почему по наличию файла ? Иначе надо делать меню для входа в режим калибровки, а тут каждый байт на вес золота. Вот скоро приедет из Китая Мега2650, вот там развернусь, там памяти много :-)


На фото: Датчик температуры под прямыми солнечными лучами, датчик температуры в водозаборе.

К следующему эксперименту надо будет добавить датчик на выход песчаного фильтра. Когда на улице холоднее, чем вода в бассейне (а это практически всегда), то и нагреватель и фильтр охлаждают бассейн. И если через нагреватель проходит малый объём воды, то через фильтр 15 м3 в час, т.е. за 2 часа он охлаждает бассейн на 0.5 - 1 градус. Вот это и предстоит уточнить.
Ещё, надо будет сделать датчик освещённости так, чтобы на него никогда не падала тень и он был доступен для Солнца от рассвета до заката.

Продолжение (часть 2)
slava68: (Default)
2014-08-04 11:09 pm
Entry tags:

iMAX B6AC. Сдохла моя любимая зарядочка :-(

Вчера бабахнули конденсаторы внутри, на вид работоспособность сохранилась, но ..... это только на вид :-(



Сменил все лопнувшие конденсаторы и в блоке питания и на основной плате. Положил на стол, включил, и не успел оглянуться, как сверху засветился токоограничивающий резистор, а полевым транзистором снизу прожгло дырку в столе :-(
Убрал "ненужные" цепи. Менюшка работает, но когда нажимаешь "Start" происходит перезагрузка процессора.



Выпаял экран. Схема на Atmega 328. Управляющие сигналы есть там, где их не должно быть и напряжение от источника питания сразу идёт на выход, без преобразования. Может быть "слетела программа" - не знаю, насколько это возможно. Сегодня при солнечном свете рассмотрел дырку в корпусе LM393. Её там быть не должно. На форумах есть информация о перепрошивке, но у меня мало надежды на это.

Ладно, пойдёт на запчасти - дисплей к какому-нибудь проекту на Ардуине, блок питания 12 вольт тоже может пригодиться. Заказал 3 новых зарядки с китайского сайта, благо они сейчас по 25 долларов стоят. Плату я уже изучил, а терять время на ремонт при отсутствии деталей, не хочется.
slava68: (Default)
2014-07-17 01:04 am
Entry tags:

Ну вот, моя первая V.1.0.

http://pastebin.com/B4S9szNV полностью работающая.
"Быстродействующая система многоточечного замера температуры".
1. Сканирует устройства на шине 1-Wire.
2. Читает показания с датчиков в режиме "фотоснимок".
3. Сохраняет изменения конфигурации системы на SD-карту с привязкой времени.
4. Сохраняет измеренные значения температуры с привязкой времени.
5. Дублирует всю выводимую информацию в "Терминал" (COM-порт).

Датчики можно добавлять и удалять во время работы системы. Максимальное количество датчиков ограничивается только физическими возможностями шины (максимум 200 шт. в одном сегменте сети)
Периодичность снятия показаний с датчиков и периодичность сканирования шины 1-Wire на наличие изменений - пока устанавливается в коде программы.


Дальнейшие планы:
1. Отказаться от шины I2C , на которой реализован RealTimeClock в пользу аналогичного устройства на шине 1-Wire или SPI.
2. Оптимизация кода для снижения "веса" прошивки. От количества свободной памяти зависит, сколько датчиков можно обрабатывать за один раз. Сейчас всего 24 шт.
3. Спаять отдельное устройство на ATmega328.
slava68: (Default)
2014-07-13 10:22 pm
Entry tags:

C++. Чувствую, не обойтись мне без "указателей" и "ссылок" :-(

Ну вот, не собирался я так глубоко изучать С++, надеялся обойтись "малой кровью". Не выходит :-(
Передать вектор неизвестного размера в функцию, а затем передать туда же массив известного размера никак не получается.
-------------
Пока мало что понимаю :-(
slava68: (Default)
2014-07-11 11:32 pm
Entry tags:

Круть :-) Работает :-)



19 датчиков сначала измеряли температуру на столе, потом были перемещены в поток тёплого воздуха от компьютера.
Не все датчики были на одинаковом расстоянии от выхлопной трубы.

Вот, ещё что-то намерил :-)

КРАСОТИЩА-ТО КАКАЯ :-))) Конечно, реально вряд ли кто будет что-то измерять таким количеством датчиков, но надо придумать хорошее название для приборчика.

Скоро сделаю водозащищённые датчики и буду мерять температуру в бассейне. А там, глядишь, и управление нагревателем приделаю. Чтобы с Гисметео прогноз считывал и грел бассейн до комфортной температуры - в жару прохладненько, в плохую погоду по-теплее.
slava68: (Default)
2014-07-11 09:16 pm
Entry tags:

Программирование :-)))

Сегодня с утра, вроде бы уже настроил сканирование шины 1-Wire и чтение показаний всех 19-ти датчиков, но вот беда .... в первый проход по программе (я понаставил кучу дебагерских чекпоинтов во все места программы) не выводит на экран ничего, во второй проход выводит показания только первого датчика, в третий проход - первого и второго , в четвёртый - 1,2,3 и т.д.
На двадцатом проходе программы на экране все 19 датчиков. Уж чего я только не пробовал, уже даже синтаксис программы причесал "по книжному".
(Был у меня вчера случай, что "а = b" не заработало, а "x = b , a = x" заработало. Пока не стал разбираться почему, потом доделаю)

Проблема оказалась в том, что в условии цикла была функция, определяющая длину массива, а массив я чуть ранее, в предыдущей функции, удалял :-) Но блин, он откуда-то брал данные из массива и все данные были правильные :-) И длина его росла с каждым проходом и заканчивалась в нужном месте. Чудеса :-)))
slava68: (Default)
2014-07-08 01:12 am
Entry tags:

Использование "vector" в качестве динамического массива в Arduino.

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

Я сейчас уже смотрю на примеры всяких скетчей для Arduino, как на "детский сад" :-)

Как оказалось, поддержка С++ в Arduino далеко не полная :-( Ведь ресурсы однокристальной микроЭВМ сильно ограничены.

Нашёл библиотеку, подключающую "реальный" С++ к Arduino, но использовать её можно только на свой страх и риск. Нельзя забывать об аппаратных ограничениях. Ну, типа, в моём случае проверять всегда, сколько свободной памяти осталось и выводить предупреждение о невозможности подключения новых устройств.

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

Сейчас уже смог просто "запустить" <vector> на Arduino :-)))
Больше половины дела .....

Да, и вот она самая "вкусняшка":
Read more... )
slava68: (Default)
2014-06-28 02:59 am
Entry tags:

Осваиваю Proteus

Мощная штуковина. Вот уже такую схему нарисовал:



Наступил момент, когда дальнейшее программирование без принципиальной схемы стало затруднительным.
Из-за того, что добавил RTC и SD-card теперь стало не хватать выводов для основной части проекта. Придётся пока временно чем-то пожертвовать, а в дальнейшем прикрутить какой-нибудь регистр-дешифратор для расширения.
slava68: (Default)
2014-06-23 02:27 pm
Entry tags:

Пришло время

Купил микросхемку DS1307 - часы реального времени. 35 рублей.

Изучаю протокол I2C.

Полезные ссылки:
http://robocraft.ru/blog/arduino/786.html
http://avrdevices.ru/chasi-realynogo-vremeni-ds1307/
http://wiki.amperka.ru/%D0%B2%D1%80%D0%B5%D0%BC%D1%8F:rtc-%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80
http://www.khabvir.ru/forum/viewtopic.php?f=10&t=2450

http://zelectro.com.ua/RTC_DS1307_arduino

блин, уже пару часов, как спаял, а все никак не могу синхронизировать часы :-(



Простота программирования чревата тем, что каждый кулик пишет свою библиотеку и все они несовместимы :-(
http://arduino.ru/forum/programmirovanie/ds1307-pokazyvayut-strannoe-vremya-kotoroe-stoit#comment-22002
здесь скачал "правильную" библиотеку и всё заработало :-)
slava68: (Default)
2014-06-22 08:55 pm
Entry tags:

Что же мы такое изобретаем :-)

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

На первом этапе разработки мы ставим себе задачу измерять 8 каналов с различными параметрами:

Read more... )
slava68: (Default)
2014-06-22 06:32 pm
Entry tags:

Часы реального времени.

Для того, чтобы логировать измерения на SD-карточку для последующего использования необходимо привязать их к какой либо единой системе координат - например, ко времени. Логично ?
:-) Да.
Тут закономерно встаёт вопрос - где взять часы ?
Время от "большого взрыва" от начала работы в миллисекундах есть внутри каждого микроконтроллера - это конечно хорошо, и немного поизвращавшись, его можно представить в формате ГОД:МЕСЯЦ:ДЕНЬ:ЧАС:МИНУТА:СЕКУНДА:тысячные доли секунды, но опять же, это будет время от "Начала-начал", как его увязать с Рождеством Христовым ?

На полочке у меня завалялось пара GPS-навигаторов, в которых, кто бы мог подумать, есть COM-порт и оттуда можно считать самое точное время на планете Земля, в том формате, который мне нужен. Заодно и координаты места, где проводятся измерения.

Но он, сцука, жрёт столько энергии, что при автономной работе не хватит никаких аккумуляторов :-(

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



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

Хотя, может быть и GPS подключу :-) Что-то меня пропёрло на конструирование :-) Можно будет по нему синхронизировать эти часы :-)

Полезные ссылочки:
http://avrdevices.ru/chasi-realynogo-vremeni-ds1307/
http://cxem.net/mc/mc168.php
slava68: (Default)
2014-06-22 03:03 am
Entry tags:

Запаял SDшку на ARDUINку :-)))

Если бы кто-то даже месяц назад мне сказал, что я такое сделаю, то я бы не поверил :-)


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

Теперь, у моего приборчика открывается новый горизонт возможностей. Он перестал быть привязанным к компу, у него теперь появилась настоящая самостоятельность !

slava68: (Default)
2014-06-19 02:55 am
Entry tags:

регулировка яркости индикатора в зависимости от внешней засветки.

Написал пару строк, запаял переменный резистор - а солнце ещё не встало :-)
http://pastebin.com/S9P6NdiZ
Пойду посплю, а утром откалибрую на максимальную яркость при прямом солнечном свете.
slava68: (Default)
2014-06-17 02:28 am
Entry tags:

да они там ибанулись в своей Рассее !!!

Понадобился фоторезистор. Помню, у меня уже лет 30 валялся где-то, но так сразу не нашёл. Думаю, пойду в магазин, куплю.
ФИГА !, нет ни фоторезисторов, ни фотодиодов и вот собственно почему:

Read more... )
slava68: (Default)
2014-06-16 08:16 pm
Entry tags:

Разработка прибора

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

Листинг программы.
slava68: (Default)
2014-06-14 01:45 am
Entry tags:

Arduino. Аналоговые входы А6 и А7.

Решил сделать измеритель параметров германиевых диодов. Повесил на все 8 АЦП разные диодики, запитал от батарейки. Написал программку - смотрю - какая-то фигня. Диоды в А6 и А7 просто нарушают законы мироздания :-).
Практически сверхпроводники получаются. Но надо проверить, поменял провода, и теперь другие диоды стали такими замечательными, а эти - самыми обычными. Значит дело в измерительной системе. Почитал интернет, и вон оказывается чё:

A6 & A7
Еще раз убедился, что учиться никогда и никому не поздно.

Почему-то всегда считал, что "лишние" выводы ADC6 и ADC7 у MCU cемейства ATmega в корпусе TQFP32 - это полноценные выводы. И только сейчас понял, что это не так - они могут работать только как вход АЦП. Иными словами, их нельзя сконфигурить в качестве цифровых входов или выходов, увы :(

Относится это только к тем платам, которые имеют "на борту" SMD-версию ATmega328 - как правило, это Nano и Seeeduino. Счастливые обладатели ATmega в PDIP-корпусе вообще, наверное, не поймут, о чем речь ;)
slava68: (Default)
2014-06-13 02:31 pm
Entry tags:

Будни разработчика.

Запаял вчера по ошибке КТ814Г вместо КТ815Г в схему эмитерного повторителя. До пяти утра пытался понять причину "нелогичной работы логики" :-)
Подаю на вход дискретный сигнал - всё отлично работает. Подаю ШИМ - какая-то жёпа - то сильно светит, то несильно. Я уже начал грешить на то, что граничная частота транзистора ниже частоты ШИМ и в нем переходные процессы не поспевают за сигналом, в итоге лазер не гаснет. Померял мультиметром - на базе транзистора нет "0". Потыкал резисторами на "землю" и всякие другие места - монопенисуально. Ушёл спать. Не люблю, когда что-то не получается.

Как говорится - "всё, что делается после 23:00 - переделывается утром".
Проснулся, и первым делом притащил лучшего друга любого разработчика - осциллограф. Оба-на !
Как же мне сразу не пришло в голову, что транзистор не той проводимости ! А ведь я вчера был уверен, что придумал всё правильно :-))

Сейчас пойду его зверски выкушу из платы и отомщу ему за потерянное ночью время :-)
З.Ы. там вчера ещё один косяк нарисовался - напряжение не хочет измеряться - просто показывает на входе 1,4 вольта и снижается до примерно одного вольта.
З.Ы.Ы. :-) Оказалось - я зачем-то в программе отключил подтягивание этого входа на Vcc резистором 20кОм. Тут паять ничего не пришлось :-)
slava68: (Default)
2014-06-10 01:56 am
Entry tags:

Приборчик для квалификационной дипломной работы

Работающий код. http://pastebin.com/B7S5ATCg
Пока два канала измерения: температура и напряжение.
Завтра добавлю фотодатчик и лазер. Потом частоту и анализ фронта изменения сигнала на прерывания.
Можно ещё звук добавить.

А сейчас спать :-)
slava68: (Default)
2014-06-08 12:00 am
Entry tags:

Придумываю новый приборчик :-)

На Arduine делаю со студентами квалификационную работу.
Центральный модуль, маленький индикатор, 8 каналов измерений, пара каналов телемеханики, вывод информации на компутер и приём команд с компутера. Измеряет параметры, логирует на общей временной шкале. В зависимости от заданных параметров измеряемых сигналов может выполнять действия.
Масштабируемость до разумных пределов. Модульность. Можно добавить модуль Wi-Fi, GPS, GSM и т.д.

Сейчас набросал чтение кнопок и индикацию активных каналов. Мне кажется красиво получилось :-))

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

Для самых умных )