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


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

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


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

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


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

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


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

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

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



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



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

Ладно, пойдёт на запчасти - дисплей к какому-нибудь проекту на Ардуине, блок питания 12 вольт тоже может пригодиться. Заказал 3 новых зарядки с китайского сайта, благо они сейчас по 25 долларов стоят. Плату я уже изучил, а терять время на ремонт при отсутствии деталей, не хочется.
slava68: (Default)
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)
Ну вот, не собирался я так глубоко изучать С++, надеялся обойтись "малой кровью". Не выходит :-(
Передать вектор неизвестного размера в функцию, а затем передать туда же массив известного размера никак не получается.
-------------
Пока мало что понимаю :-(
slava68: (Default)


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

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

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

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

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

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

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

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

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

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

Да, и вот она самая "вкусняшка":
Read more... )
slava68: (Default)
Мощная штуковина. Вот уже такую схему нарисовал:



Наступил момент, когда дальнейшее программирование без принципиальной схемы стало затруднительным.
Из-за того, что добавил RTC и SD-card теперь стало не хватать выводов для основной части проекта. Придётся пока временно чем-то пожертвовать, а в дальнейшем прикрутить какой-нибудь регистр-дешифратор для расширения.
slava68: (Default)
Купил микросхемку 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)
Порой требуется выяснить причину происхождения непериодических событий, которые возникают в случае взаимодействия нескольких действующих факторов одновременно. Эти воздействия могут быть не только электрической природы, но и изотермические-изобарические процессы в атмосфере, а так же механическое и/или геологическое воздействие. События могут иметь, как чрезвычайно кратковременный характер, например, разряд молнии, так и растянутый по времени и сочетающий в себе несколько факторов - например, выпадение росы внутри радиоаппаратуры зависит не только от снижения температуры в данной точке, но и от абсолютной влажности воздуха в этом месте. Например, на берегу реки может произойти, а на вершине холма при той же температуре - нет.
Для того, чтобы на этапе разработки исключить вредное влияние подобных помех при конструировании радиоприёмных-радиопередающих систем связи в типовых условиях эксплуатации, хорошо было бы иметь некое подобие "черного ящика", в который записываются все основные параметры работы исследуемого изделия. Далее, при обработке полученных данных на компьютере, можно будет сопоставить на единой временной шкале причины и следствия различных влияющих факторов.

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

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

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

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

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



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

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

Полезные ссылочки:
http://avrdevices.ru/chasi-realynogo-vremeni-ds1307/
http://cxem.net/mc/mc168.php
slava68: (Default)
Если бы кто-то даже месяц назад мне сказал, что я такое сделаю, то я бы не поверил :-)


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

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

slava68: (Default)
Написал пару строк, запаял переменный резистор - а солнце ещё не встало :-)
http://pastebin.com/S9P6NdiZ
Пойду посплю, а утром откалибрую на максимальную яркость при прямом солнечном свете.
slava68: (Default)
Понадобился фоторезистор. Помню, у меня уже лет 30 валялся где-то, но так сразу не нашёл. Думаю, пойду в магазин, куплю.
ФИГА !, нет ни фоторезисторов, ни фотодиодов и вот собственно почему:

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

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

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

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

Относится это только к тем платам, которые имеют "на борту" SMD-версию ATmega328 - как правило, это Nano и Seeeduino. Счастливые обладатели ATmega в PDIP-корпусе вообще, наверное, не поймут, о чем речь ;)
slava68: (Default)
Запаял вчера по ошибке КТ814Г вместо КТ815Г в схему эмитерного повторителя. До пяти утра пытался понять причину "нелогичной работы логики" :-)
Подаю на вход дискретный сигнал - всё отлично работает. Подаю ШИМ - какая-то жёпа - то сильно светит, то несильно. Я уже начал грешить на то, что граничная частота транзистора ниже частоты ШИМ и в нем переходные процессы не поспевают за сигналом, в итоге лазер не гаснет. Померял мультиметром - на базе транзистора нет "0". Потыкал резисторами на "землю" и всякие другие места - монопенисуально. Ушёл спать. Не люблю, когда что-то не получается.

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

Сейчас пойду его зверски выкушу из платы и отомщу ему за потерянное ночью время :-)
З.Ы. там вчера ещё один косяк нарисовался - напряжение не хочет измеряться - просто показывает на входе 1,4 вольта и снижается до примерно одного вольта.
З.Ы.Ы. :-) Оказалось - я зачем-то в программе отключил подтягивание этого входа на Vcc резистором 20кОм. Тут паять ничего не пришлось :-)
slava68: (Default)
Работающий код. http://pastebin.com/B7S5ATCg
Пока два канала измерения: температура и напряжение.
Завтра добавлю фотодатчик и лазер. Потом частоту и анализ фронта изменения сигнала на прерывания.
Можно ещё звук добавить.

А сейчас спать :-)
slava68: (Default)

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

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

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

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

Profile

slava68: (Default)
slava68

August 2025

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 7th, 2025 12:34 pm
Powered by Dreamwidth Studios