slava68: (Default)
Раз уж Путин запретил россиянам покупать нормальный сыр, а фальсификата на рынке 78,3% такие данные обнародовал Россельхознадзор , то мы попробовали делать сыр самостоятельно :-)
Не из пальмового масла. Может быть получится интересный новый сорт, запатентуем его и станем миллионерами :-)


Молоко было не из магазина, но кипячёное. В нём разрушены соединения кальция, которые в норме должны становиться основой сырного сгустка.
Я сделал пресс-форму из двух китайских нержавеющих кружек, насверлив отверстий в одной из них. Сегодня начну делать пресс, позволяющий давить с силой до 50кг.
Прессовать сыр необходимо в первые сутки, сейчас ему уже будет монопенисуально, хоть 1 кг, хоть 50 кг.
Если сыр будет получаться вкусный, то можно подумать о расширении производства :-)))
Уже сделал электронный термометр на Ардуинке, он звуком предупреждает о приближении температуры молока к верхней и нижней границе температуры образования сырного сгустка и сигнализирует звуком о превышении границ работоспособности фермента для свёртывания молока.
Необходимо продолжить работу над "временем отклика" сенсора ds1820. Я его упаковал в две "термоусадки" и он медленно прогревается. Надо сделать датчик температуры в трубочке из нержавейки. Теперь думаю, откуда можно её достать.

Далее, можно будет сделать электрический нагрев с функцией автоматического регулирования времени и температуры для различных видов сыра.
Код программы написал за полчаса, используя части из образцов: http://pastebin.com/UvnfdFMP

З.Ы. сегодняшний сыр на вкус получился "не резиновый", нежный, сладковатый, со вкусом кипячёного молока. Пока больше похож на "прессованный творог" :-) Съел менее половины того сыра, что на фото и уже "обожрался", очень сытный. По вкусу не похож ни на один сыр, который я ранее пробовал :-)
slava68: (Default)
Не хочется лишний раз паять микросхемы, панельки нет, вот и занялся творчеством :-)

С первого раза не получилось. Где-то нет контакта :-(
Придумал маленькую хитрость, Read more... )
slava68: (Default)
Запаял один комплект с ATmega8 в корпусе DIP28, получилось громоздко и некрасиво. В корпус, конечно влезло, но вот эстетического удовлетворения не доставило.
Вспомнил, что у меня давно валялись штук пять Атмег в корпусе TQFP32, они такие же, только лучше (у них есть 2 дополнительных ADC, которые мне совсем не нужны :-))
Проблема в том, что они в кривой конфигурации с завода идут: должны быть настроены на внутренний тактовый генератор, а они на внешний на 8 мегагерц. В первый раз мне понадобилось пару дней, чтобы разгадать секрет "неисправных" микроконтроллеров. Соорудил из одной Ардуинки тактовый генератор на 8МГц и перепрограммировал микроконтроллер на "defaults" параметры. А так как программатора у меня нет, то и программатор сделал из второй Ардуинки. Провода для ISP к Атмеге пришлось припаивать, это оказалось не так сложно, и поэтому в готовом устройстве я решил обойтись без переходников. Приклеил микруху на термоклей, оставил немного канифоли для крепления проводов, получилось очень даже неплохо :-)


готовое устройство выглядит так:

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

З.Ы. ATmega8 просто как экскаватор с чайной ложечкой вместо ковша, для применения в этом простецком устройстве, но другого ничего нет в магазине, и это самое дешёвое решение оказалось. Цена на ATtiny13 у нас на 10 рублей дешевле, чем на полнофункциональную Атмегу.
Нет смысла заморачиваться и писать оптимизированный код на ассемблере :-), когда можно сочинить "простыню" на С++.
slava68: (Default)
А может быть и микроконтроллер Atmega8 тоже. Пока ещё не проверил.
В Ардуинке должен быть автоматический предохранитель MBR0520-TP , отключающий питание при нагрузке более 0.5А, но он лопнул и задымился :-(

Впаяю вместо него диод и в следующий раз сожгу USB-порт в ноутбуке :-) раз уж я умудрился посчитать ноги микросхемы не с той стороны ...
slava68: (Default)
User manual:

Блок предназначен для управления тремя каналами электрической нагрузки (систем освещения) с помощью пульта дистанционного управления.
Основные функции:
- Возможность регистрации до 16 пультов.(по умолчанию нет зарегистрированных пультов)
- Возможность переназначения соответствия кнопок каналам коммутации.
- Возможность установки начального состояния любого канала при подаче питания (по умолчанию все ВЫКЛ.)
- Таймер автоматического отключения всех каналов коммутации через 30 минут, с возможностью его деактивации (по умолчанию ВКЛ.)
- Возможность очистить всю базу данных зарегистрированных пультов.

инструкцию написал :-) )


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

Буду благодарен за советы и комментарии. Текст программы Smart_power_switch_1.0.-3 на pastebin.com

P.S. забыл подтянуть в программе на +5 все не используемые выводы. Говорят, это повышает быстродействие и снижает энергопотребление. Т.к. при смене уровня "висячего" вывода генерируется бесполезное прерывание для обработки состояния выводов этого порта. Внутри металлического экранированного корпуса планируется много наводок 50 Гц.
Придётся впаять JTAG в "выключатель света" :-)))
Буду регулярно обновлять прошивку в нём :-)
slava68: (Default)
Доделал проектик, где к дистанционному управлению можно подключать любые радио-пульты. На это мне потребовалось около шести часов. Проще, чем сделать лабораторку для студентов :-)
Бонусом сделал:
- возможность программировать разные каналы управления на разные кнопки пульта.
- начальное состояние каналов "ВЫКЛ." (после перебоев электропитания они были включены всегда). Скорее всего сделаю эту фичу программируемой с записью в EEPROM, для использования в люстрах. В люстрах наоборот, часто бывает, включаешь выключатель и ищешь в темноте пульт :-(
- сделал максимальное время включенного света 30 минут. Тоже программируемая фича, если забыл выключить, то сам выключится. Опцию можно отключить до пропадания питания, потом сама автоматически активируется.
- пока сделал программу на 4 канала управления, у меня есть блоки на 4 канала, но легко меняется под конкретную задачу. Придётся перекомпилировать прошивку.

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

- может быть придумаю ещё что-то :-)

Ничего меньше, чем ATmega8a в наших магазинах не нашёл, поэтому буду её ставить вместо штатного микроконтроллера через переходник.

А вот сейчас потратил несколько часов на то, чтобы правильно скомпилировать программу и загрузить в такую древнюю микросхему :-(
Пришлось установить Arduino IDE 1.0.5 версии, под неё ручками прописать дополнительную плату:

потому, как на внутреннем генераторе только 8МГц, а новые IDE прошивают только 16МГц и никак иначе.
Программка нормально загружается. Даже чуть-чуть работает, только пульты не распознаёт :-( так как время у неё внутри идёт в два раза медленнее :-)

F.U.C.K. Ещё пару часов потратил на то, чтобы заставить свежую версию Arduino IDE прошивать старый микроконтроллер на частоте 1 МГц.
Она до этого могла только 16 МГц.
Моё устройство будет 99,9% времени простаивать, поэтому незачем его гонять на высокой частоте. Да и энергопотребление будет снижено.

Чтобы перекомпилировать программу под другую частоту надо изменить параметры "atmegang.build.f_cpu=1000000L" в файле:
C:\Documents and Settings\User-PC\AppData\Roaming\Arduino15\packages\arduino\hardware\avr\1.6.7\boards.txt
slava68: (Default)
Решил, что я уже вырос из написания программ для микроконтроллеров в блокноте, пора начинать осваивать современные средства разработки.
Немного изучив предложение, выбрал бесплатную софтину от производителя, тем более, что прочитал хорошие отзывы о новой версии, которая теперь стала не очень глючная.
Скачал гигабайт инсталяшки, полтора часа шёл процесс установки. Вот уже почти полдня пытаюсь хоть что-то понять - результат на уровне нуля. Не то, что не смог светодиодиком помигать, даже ещё не нашёл окно, где текст программы писать.

Из информации по продукту - чуть более, чем ничего. Хелп на английском, online в интернете, и это не самое страшное, хуже то, что он в стиле Windows, т.е. абсолютно бесполезен.
Из обзоров на ю-тубе, только какой-то хохол :-)
Я люблю украинцев, но то, как он "обучает" - у меня нервов не хватает, 40 минут смотреть "ниочём", как записать в словарь русское слово...

Говорят, что тем, кто работал в Microsoft Visual Studio интерфейс будет привычным. Я ставил себе VS полгода назад, снёс её из-за невозможности освоить этот "марсианский интерфейс".

Жаль, если не получится найти никакого хорошего самоучителя по работе с Atmel Studio 6.

З.Ы. Оу! Я приделал к Atmel Studio 6 русский язык !
Для этого надо установить дополнительно Microsoft Visual Studio 2010 Shell (Isolated) Redistributable Package ОБЯЗАТЕЛЬНО ВЫБРАТЬ "русский" на странице загрузки.

Часть Help'а тоже стала на русском :-)
slava68: (Default)
Для занятий со студентами набросал код программки, которая переключает состояние светодиода при коротком нажатии на кнопку и включает или выключает оба светодиода при длительном нажатии. Задание задумывалось для загрузки в ATTiny13a и написанная студентами программа не влезла туда по размеру. Я решил реализовать её сначала для ATmega328 (Arduino Nano), получилось более 1024 байт. Небольшая оптимизация алгоритма позволила получить 684 байта.

----------------------------------------------------------------
кодик для Arduino Nano )
----------------------------------------------------------------

Это, в принципе, уже влезает в микроконтроллер ATTiny13a и можно было бы остановиться на достигнутом, но нет предела совершенству. Хочется "красивый" код. Если избавиться от void setup() и void loop(), то получается 464 байт, но .... перестаёт работать (функция millis() и delay() это "фишка" Arduino) :-(
Реализовывать их через таймеры не хочется на этом этапе, видимо придётся остановиться на первом варианте.
Как подключить стандартную библиотеку Arduino для реализации этих функций - я так и не нашёл :-(
----------------------------------------------------------------
кодик для Attiny13a )
----------------------------------------------------------------

При компиляции в Attiny13a получилось 486 байт. Загрузилось с 25-й попытки и почему заработало так и не понял. С повторяемостью этого эксперимента, возможно будут сложности. В качестве программатора использовалась сама же Arduno. Схема подключения и настройки здесь.
Фотки:

fullsize photo http://b6.icdn.ru/s/slava_68/2/42921082aMX.jpg ............... http://b6.icdn.ru/s/slava_68/3/42921083NVU.jpg
slava68: (Default)
Имеется GSM сигнализация, которая шлёт SMSки и звонит на заранее выбранные номера в случае срабатывания датчиков на открытие двери и/или датчиков движения. Надо временно прикрутить к ней сенсор температуры, чтобы в случае снижения ниже допустимого сообщила о проблеме (например, на даче котёл погас, а в ночь мороз будет -20) надо обязательно ехать или чинить котёл или сливать воду.
Потом закажу с Китая нормальный термодатчик, а сейчас надо сделать "чтоб работало". Сигнализация имеет ещё и 4 проводных канала.

Один из них мы и будем замыкать-размыкать.

У меня есть несколько вот таких ARDUINOк


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


Начав работу примерно при 20C (температура помещения), микроконтроллер быстро начал нагреваться, дойдя до теплового равновесия в 24C за 1 минуту. Таким образом, используя ATMEGA32u4, мы можем узнать температуру окружающей среды, вычитая 4C от текущих показаний.

текст программы )

Логика работы: при снижении температуры ниже 15 градусов срабатывает реле 1 раз на 2 секунды и система "перезаряжается" только если температура поднималась после этого выше 20 градусов. Это задумано, чтобы она не отправляла SMSки много раз на границе контроля.

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

про эту ATmega32u4 )

ESP8266

Jan. 13th, 2015 08:57 pm
slava68: (Default)
Оригинал взят у [livejournal.com profile] alex_avr2 в ESP8266
Приехали модули на базе ESP8266. Подключил, поигрался, воочию убедился, что чудо существует и все работает :)



Если кто еще не знает - это модули позволяющие очень легко делать поддержку WI-Fi в разрабатываемых устройствах. Как подключение к сетям, так и организацию точки доступа.
При всем при этом стоимость модулей в районе 3-4$, что даже при нынешнем курсе всего около 200-250 рублей. Еще недавно Wi-Fi в своих устройствах был мало доступен ввиду сложности и дороговизны модулей(в 5-10 раз дороже), а теперь его поддержка простая и дешевая. При этом всеобщее засилие смартфонов открывает еще больше перспективы для взаимодействия с устройствами по Wi-Fi. Готовьтесь к тому, что скоро встроенный Wi-Fi будет в каждом тапке :)

slava68: (Default)
Решил разработать.

Канва байды:
- Центральная станция всё пишет на карточку с привязкой к "реальному времени".
- неограниченное количество remote-сенсоров, которые сами регистрируются в системе.
- протокол связи запрос-ответ и также возможность remote-сенсора инициировать сеанс связи.
- адаптация скорости передачи данных по радиоканалу (5 градаций), а также мощности передатчика (9 градаций) в зависимости от условий связи. Изменение частоты в случае помех на основной рабочей частоте.
-------------------
возможно, когда всё заработает, и если останется свободное место в памяти, прикручу шифрование радиоканала.

-------------
разрабатываю протокол радиообмена:

- размер пакета 200 байт (цифру взял с потолка) , можно менять в любую сторону. Буфер COM-порта 64 байта, неплохо бы уложиться.
- любой разумный пакет начинается на символ '+' , любые другие цифры в эфире - не наши.
- следом идёт контрольная сумма пакета.
- каждое устройство генерит random число из диапазона 10000-60000, которое будет служить идентификатором сессии и временем задержки для ответа на броадкаст пакеты, для устранения коллизий.
- каждое устройство и центральное устройство хранят параметры крайнего удачного сеанса связи (скорость, мощность, частоту).
- при проблемах связи пытаются установить контакт на минимальной скорости-максимальной мощности.
- обязательное подтверждение всех запросов-ответов.
- в пакете от центральной станции передаётся идентификатор адресата или "0" для всех.

---------------------------
пока сложности с float параметрами. Например, -12.625 градуса Цельсия. Для преобразования число->текст->число требуется привести к целому, и передавать отдельно "множитель".
Использую функцию: long data[i] = inputString.substring(pos + 1, semicolon).toInt(); для разборки пришедшей строки данных.
--------------------------
Уже немного "оживил" систему:
Пакеты шлются, подтверждаются. Т.к. UART занят передатчиком, то информацию для отладки пока вывожу на LCD индикатор.
кусочек кода: http://pastebin.com/qruDAXu8
slava68: (Default)
Включил телек, там "Великие тайны мира" на канале RenTV. "Президенты всяких академий фантастических наук" рассказывают о мировых катастрофах, грозящих уничтожить цивилизацию, .... но вот они разработали сверхнаучный приборчик, который мониторит магнитное поле Земли и всех нас спасёт.


Подумал, что я тоже могу такой приборчик изобрести :-) и даже лучше ! Хочется сделать что-то сложное и серьёзное, но есть проблемы с постановкой задачи - не знаю, чем заняться.
В той локации, где я живу, землетрясения силой 3-4 балла происходят каждые 15-20 минут, поэтому с тестированием прибора у меня не должно возникнуть сложностей.

У меня имеются 3 магнитометра с акселерометрами и ещё три магнитометра, акселерометра и гироскопа.
Имеется десяток Ардуинок, десяток комплектов приёмо-передатчиков, т.е. могу собрать минимум 6 устройств регистрирующих вибрацию и расположить их на некотором расстоянии (передатчики до километра) и зафиксировать "движения земной коры".

Проблемы, которые сразу видны на поверхности:
- "Узкие" каналы передачи данных. Измерения надо проводить синхронно, чтобы получить какой-либо осмысленный результат. Поэтому, придется сохранять данные локально, привязывая измерения к сигналу синхронизации.
- калибровка измерительных плат. Имеется 2 типа плат, вроде бы схожих по функционалу, но различных по исполнению.
slava68: (Default)
Вот оно чё, СемёнСемёныч :-(((

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

Оказывается, китайцы подделывают микросхему USB-COM конвертер, причём подделывают не точно по схеме, а взяли микроконтроллер и написали программу эмуляции микросхемы FTDI 232R. Правообладателю это не понравилось и они изменили драйвера так, что неоригинальные микросхемы перестали работать.
Подробнее на "Хабре" http://habrahabr.ru/company/zeptobars/blog/212859/ и продолжение здесь: http://habrahabr.ru/post/241001/

Как вариант решения - ставить старые драйвера :-(
slava68: (Default)
Всё хорошо в этой железяке, только вот иногда встречаются задачки, которые не имеют простого решения.

Нужно оцифровать сигнал с микрофона. На первый взгляд - гавновопрос !
Пишем val=analogRead(1);
Только вот, даже если процессор ничего больше не делает, скорость выполнения этой команды через стандартную библиотеку составляет каких-то 8кГц.

По теореме Котельникова "частота дискретизации должна минимум в два раза превышать частоту обрабатываемого сигнала", т.е. мы можем оцифровать максимум до 4кГц. Этого мало даже для речевого сигнала :-(
Если нам нужно сделать БПФ (быстрое преобразование Фурье) и получить спектр звукового сигнала, то необходимо минимум 44кГц частоты дискретизации.

Нарыл в интернете подобную проблемку. Умные люди придумали такую штуку:

#define FASTADC 1 // defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

void setup() {
long int start ;
long int i ;

#if FASTADC // set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
#endif

Serial.begin(9600) ;
Serial.print("ADCTEST: ") ;
start = millis() ;
for (i = 0 ; i < 61500 ; i++) analogRead(1) ;
Serial.print(millis() - start) ;
Serial.println(" msec (61500 calls)") ;
}
void loop() {
}
В результате получаем увеличения быстродействия примерно в 8 раз.

60кГц - это более чем достаточно, можно будет ещё и математикой заниматься в промежутках между чтением АЦП. Вот ссылочка на статейку про ускорение ввода-вывода на микроконтроллерах AVR: http://habrahabr.ru/post/141442/

только вот пока не могу разобраться, как это работает :-)))
slava68: (Default)
Модная сейчас тема.
Хочу попробовать реализовать с микроконтроллерами.

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


Например, нас есть АЦП, процессор для математических вычислений, 2к ОЗУ для
работы и 64 байта ПЗУ для хранения опорных данных в часах реального
времени, относительно медленный накопитель на SD-карте.

Придумать бы какую-нибудь задачку :-)

Мне было бы интересно это реализовать, но не хватает знаний в
этой математике, а изобретать велосипед жалко времени.
slava68: (Default)
Оригинал взят у [livejournal.com profile] 1i7 в Слушающий эхо
Повесим на Робота Машинку простой эхолокатор, чтобы дать ему возможность ориентироваться в пространстве:

Робот Машинка - эхолокатор from 1i7 on Vimeo.


Робот Машинка - сонар-03.jpg

Простая демонстрационная прошивка работы с эхолокатором (датчиком расстояния, или сонаром): Робот Машинка едет вперёд до тех пор, пока не увидит препятствие в 10ти сантиметрах перед собой. В этом случае он останавливается, отъезжает назад, поворачивает влево или вправо и снова едет вперёд до тех пор, пока не встретит препятствие.

Сделать также... )
исходники прошивки, подсветка синтаксиса

slava68: (Default)
У нас тут уже три ночи "ниже нуля" и я накрыл поверхность бассейна "теплофолом" 12мм.
ОФИГЕТЬ ! Вода практически не остывает. Значит ранее потери от зеркала бассейна были около 30кВт/ч
Нагреватель работал круглосуточно не выключаясь.
Теперь нагреватель перегревает бассейн за ночь - утром сейчас вода +40 градусов. Долго не поплаваешь.
Днём вообще отключаю подогрев. А сейчас даже подливаю холодной воды, очень уж плавать хочется.

Буду делать микроконтроллерное управление, тем более, что у меня практически готовое устройство уже есть.
slava68: (Default)
Всякие разные игрулюшечки для Ардуино.


Размер по-крупнее

Буду теперь со студентами заниматься.

З.Ы. это ещё не всё, пара телег отстала от основного обоза... ждёмс.
slava68: (Default)
После прошлого эксперимента было выявлено несколько недостатков:
- непонятно что происходит с прибором и происходит ли вообще :-)​

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

Листинг программы
Как же мало, оказывается - 30 килобайт :-(
Получилось 27302 байта из 30720 байт ПЗУ и 1374 байта переменных из 2048 байт ОЗУ.
Уже даже не представляю, что там можно ещё оптимизировать :-(
Наверное, придётся изучать ассемблер.

З.Ы. из "новых" (добавленных) косяков - минимальное время между измерениями температуры не может быть меньше ("количество датчиков" * 1 секунду + 1 секунда + "установленная периодичность"). Вернее, оно может быть установлено сколь угодно мало, но работать будет только по этой формуле. Верхняя граница не ограничена.
Решение: Можно убрать последовательное отображение температуры на индикаторе или сделать самостоятельный массив данных (но памяти уже не осталось :-( )
slava68: (Default)
Часть 1 здесь.

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


О чем нам может рассказать эта какофония графиков ?
Read more... )

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. 4th, 2025 09:26 pm
Powered by Dreamwidth Studios