Прошло уже пару лет, с тех пор как я собрал свою последнюю домашнюю машину – проект the brain. Я много писал о нем здесь, на сайте – это производительный, стильно оформленный компьютер, удовлетворяющий множество запросов. Запросы варьируются от исключительно ментального удовольствия от внешнего вида машины, до надежного хранения массы информации, работы (включающей в себя как графику, так и тяжелые математические вычисления и симуляции), игрушек, фильмов, самообразования и т.п.
За прошедшие два года работы в режиме 24/7, компьютер показал исключительную надежность и скорость работы, даже несмотря на сильный разгон. Но технологии постоянно движутся вперед, и потому было решено произвести небольшой апгрейд системы, а именно обновить оперативную память и жесткие диски.
С оперативкой все просто – вместо имеющихся 12 гигов, за смешные 160 долларов (все ведь относительно, как говорил Эйнштейн) на Amazon был приобретен комплект из шести четырехгиговых планок Corsair Vengeance, общим объемом 24 гигабайта (кликабельно — поводите мышкой в верхней части картинки):
Такой объем оперативки позволяет без проблем гонять по нескольку виртуальных машин одновременно – это мой основной способ работы. Головная винда остается девственно чиста (ну почти), в то время как работаю я в виртуальных машинах, которые не жалко засрать до неузнаваемости, ибо в два счета можно вернуть их в рабочее состояние, если вдруг все накроется медным тазом.
С дисковой подсистемой все немного сложнее. Дело в том, что я решил добавить твердотельный носитель для системного раздела – хотелось, чтоб винда летала, в том числе и виртуальная. И вот здесь то, собака и зарыта.
В последний год-два в интернетах появилась хренова туча красок для нанесения защитного покрытия и шелкографии на печатные платы, отверждаемых посредством ультрафиолетового света. Вот примерно таких:
Я сам еще не пробовал, но судя по форумам, с такой краской даже в домашних условиях, без особых стараний, получается добиться результата как минимум не хуже, чем на фотографиях из гайда по краске:
Смысл в том, что краска на воздухе подсыхает малость, но не в камень. А чтоб в камень – надо на нее посветить какое-то время ультрафиолетом. Тогда краска полимеризуется, и ее уже хрен смоешь. А если положить трафарет – то можно засветить только часть платы, а незасвеченые места потом смыть растворителем. Так можно закрасить все, кроме пятачков для пайки, например.
В общем, решил я поэкспериментировать с этим делом – платы, покрытые маской выглядят опрятно, лучше защищены от условий окружающей среды, легче паяются и начинают сильно попахивать индустриальным изготовлением, что не может не радовать.
Купил краску, и пока ждал посылки, начал выдумывать девайс для засветки ультрафиолетом. Решил построить девайс на основе старого сканнера – запихать ему в потроха ультрафиолетовых ламп. Но пока искал лампы да патроны, наткнулся в сети вот на такую хренотень:
Покатавшись несколько месяцев с индикатором расхода топлива, описанным мной ранее в цикле из трех статей (раз, два, три), я решился окончательно интегрировать его в панель приборов, тем более что все равно собирался вскрывать ее для установки цветных светодиодов для подсветки, вместо стандартных лампочек накаливания. О светодиодах и панели я расскажу в другой раз, а сейчас поделюсь разработанной мной новой конструкцией индикатора.
В конструкцию прибора были внесены некоторые изменения, касающиеся стабилизации питания и отображения результатов измерений.
Поговорим обо всем по порядку. Итак – начну с питания. Несмотря на то, что схема понижения и стабилизации напряжения питания микроконтроллера, примененная в первой версии устройства работала без нареканий, ее решено было переделать. По большей части причиной послужило то, что в моем распоряжении появилась горсть low-drop регуляторов напряжения на 5 вольт – TLE4275.
Регуляторы эти хороши тем, что имеют специальный выход, подключаемый к ноге reset микроконтроллера. Таким образом, регулятор напряжения включает микроконтроллер только тогда, когда питающее напряжение устаканится. В случае повторных скачков или просадки напряжения, регулятор самостоятельно перезагрузит микроконтроллер. Величина временной задержки, между моментом, когда питающее напряжение устаканивается, и моментом, когда регулятор включает микроконтроллер, устанавливается емкостью одного из конденсаторов в обвязке регулятора. Такая схема позволяет гарантировано избежать фатальных зависаний микроконтроллера при проблемах с питающим напряжением.
Лирическое отступление: при проблемном питании, как например, в бортовой сети авто, не стоит надеяться на вотч-дог в микроконтроллере. По своему опыту могу однозначно сказать, что при скачках напряжения зависает он не хуже всего остального оборудования на чипе. Следует отдавать себе отчет, что встроенный вотч-дог предназначен главным образом для борьбы с программными зависонами – например, если программа наглухо застрянет в каком-то непредусмотренном цикле и т.п. С аппаратными проблемами встроенный вотч-дог не всегда может бороться.
Кроме того, данный регулятор питания выпускается в удобных корпусах, позволяющих расположить его горизонтально на плате, а также сертифицирован для использования в автомобильной технике.
Второе изменение в конструкции моего прибора коснулось отображения информации. Во время использования первой версии устройства, я заметил, что при особенно интенсивном разгоне, потребление топлива становится настолько большим, что если принять его за 100%, потребление во время не особо напористого движения не превышает 20-40%. Таким образом, на приборе редко загоралось больше 4-5 делений из 10.
Для борьбы с этим явлением в устройство было добавлено две кнопки, позволяющие задать порог отображения расхода. Поясню на примере. Как вы помните, устройство самообучающееся – каждый раз, обнаружив новое максимальное потребление топлива за единицу времени, система запоминает его, и впоследствии ведет отображение относительно этого нового максимального значения. Примем его за 100%. В новой версии устройства, я могу принудительно заставить шкалу заполниться полностью при, к примеру, 70% от максимума. Таким образом, при потреблении 35% от максимума, будет гореть половина шкалы, при 70% и выше – вся шкала. Меня такое положение дел вполне устроило – устройство не предназначено для точного учета расхода (хотя и этот функционал может быть совсем просто реализован – нужно лишь подключиться к датчику скорости и дописать несколько строк кода), а для эффектного визуального отображения информации.
Кроме того, я внес в схему возможность вывода цифровой процентной информации на трехзначный семи-сегментный дисплей LB203YB – я не использовал его в своем авто, а лишь припаял дисплей на саму плату, но возможно, кому-то захочется посадить его на провода и вывести на панель приборов.
Для экономии ног микроконтроллера, дисплей подключен через доступные сдвиговые регистры 74HC164 – соответственно написаны функции для динамичного вывода информации. Этот геморрой занял больше всего времени при написании софта.
В схеме также присутствуют кнопки перезагрузки и сброса настроек устройства на первоначальные значения.
Таким образом, всего есть 4 кнопки – они разведены на плате, а также предусмотрена возможность подключения внешних кнопок, через разъемы на плате.
На плате предусмотрен разъем для внутрисхемного программирования чипа – ISP. Да кстати, контроллер поменялся на Atmel Atmega8 в стандартном DIP корпусе.
Так уж получилось, что совершенно случайно я просверлил в дешборде 11 дырок для светодиодов, вместо 10. В итоге в системе появился 11тый светодиод, который постоянно неспешно мигает, сигнализируя о текущем статусе работы устройства. Например, если он мигает раз в 5 секунд, то устройство находится в штатном режиме работы. Если мигает раз в секунду – то устройство обнаружило новый максимальный расход, но еще не записало его в постоянную память EEPROM (запись произойдет в течение минуты, при этом во время записи светодиод загорится постоянно на несколько секунд). Также, светодиод мигнет пять раз и останется гореть постоянно, при входе в режим настройки отображения информации.
Для входа в режим настройки достаточно несколько секунд подержать нажатыми кнопки SW3 и SW4. После того как сигнальный светодиод отмигает свои пять раз, на цифровом дисплее отобразится процент порога отображения расхода, как я и объяснял раньше. Тот же порог отобразится и на шкале, но с разрешением в 10% – большего от простой шкалы добиться невозможно. Порог можно двигать, нажимая те же кнопки SW3 и SW4. По окончанию процесса настройки нажмите кнопки SW3 и SW4 на несколько секунд снова.
Для сброса максимального значения расхода подержите нажатой кнопку SW2 – по окончании процесса сброса, сигнальный светодиод мигнет десять раз, после чего система начнет обучаться с нуля заново.
Еще одно изменение в схеме коснулось подключения к форсунке – теперь оно осуществляется через оптрон (я использовал 4N37). Это гарантирует отсутствие фатальных помех по сигнальной линии.
В остальном схема осталась без изменений – более конкретные объяснения есть в упомянутых мной статьях о первой версии устройства.
Стоит упомянуть, что на контроллере осталось четыре неиспользованных ноги – возможно, кому-то захочется расширить функционал устройства с их помощью.
Я рад опубликовать замечательный материал, присланный читателем demadsv, о разработанной и построенной им модернизированнойверсии моего ламинатора для ЛУТ.
Как вы уже догадались, за основу проекта была взята статья про ламинатор для ЛУТ. В целом, идея не претерпела значительных изменений – скорее логичное развитие аппарата. Моя версия, как я уже говорил, была лишь попыткой доказать, что ламинатор может быть реально полезным подспорьем в процессе изготовления печатных плат на дому. Proof of concept удался на славу, так что я не задумывался о дальнейшем усовершенствовании аппарата. Зато об этом задумались читатели, в частности demadsv, который адаптировал схему под более доступные элементы, добавил экран для отображения текущей температуры ламинатора и кнопки для выбора рабочей температуры.
Это ваттметр – он умеет показывать электрическую мощность, потребляемую включенным в него электроприбором. Ваттметр включается в розетку, а потребитель мощностью до 1400 Ватт (для этой конкретной модели) в сам ваттметр – такой допустимой мощности достаточно для, например, утюга.
Вот точные спецификации ваттметра:
Plug In/Socket Out Voltage: 220V
Plug In/Socket Operation Current/Power: 6A or 1400W
Power usage auto shutoff settings are from 000-660W.
Historical Data Memory: Yes
Measurement Industry Standard: IEC1036
Dimensions: 100 mm (L) x 70 mm (W) x 35 mm (H)
Cord Length: 60 cm
Ваттметр продается с вилками для разных стандартов розеток, а на себе несет панель, в которую можно воткнуть вилку всех возможных мировых стандартов – а их, как выяснилось, навалом.
Как я уже говорил, я приобрел сигнализацию себе в машину (о самой сигнализации скоро тоже выйдет статейка). При покупке я заметил, что есть в этой сигнализации выход, отвечающий за автоматическое закрывание окон в машине с электро-стеклоподъемниками.
Для того чтобы данный фичер работал, нужен внешний модуль, который получив от сигнализации сигнал, закроет по очереди все открытые окна.
Я есстественно, первым делом проверил в eBay, и на запрос power window closer обнаружил несколько девайсов по довольно скромным ценам — до 30 долларов US of A.
Начал читать в инете, и выяснил, что есть 2 типа таких штук – очень тупые и не очень тупые. Очень тупые закрыватели окон, получил сигнал, тупо подают напряжение на двигатель стеклоподъёмника в теч. 10 секунд (и так 4 окна по очереди), вне зависимости от состояния окна, т.е. двигатель будет пыжиться изо всех сил, даже если окно закрыто. Не думаю, что это такая уж катастрофа, но все больно все дебильно получается. К счастью, есть не очень тупые девайсы, которые подают напряжению на двигатель, пока на линии наблюдаются пульсации напряжения, свидетельствующие о том, что двигатель вращается. Как только ток вырастает и пульсации прекращаются, девайс отрубает двигатель, и включает следующий. При этом, вне зависимости от вышеописанных условий, через 10 секунд девайс отрубит двигатель и перейдет к следующему.
Поскольку точно определить классификацию девайса не представлялось возможным, я его тупо купил. Вот такой:
Последняя часть цикла статей о индикаторе расхода топлива. Первые две части находятся здесь и здесь.
Программа для контроллера получилась довольно комплексной, потому я постарался наполнить ее комментариями, насколько это возможно. Вдобавок, полагаю будет не лишним описать здесь весь принцип реализованного алгоритма.
Саму программу и файл прошивки можно сказать здесь.
Программа пользуется обоими таймерами, имеющимися на борту микропроцессора. Восьмибитный таймер, запущенный с делителем 1024 (т.е. работающий на частоте 8МГц/1024=7812Гц), при переполнении вызывает прерывание. За 1 секунду происходит примерно 30 таких прерываний, так что отсчитав 6 из них, можно точно отмерять промежутки времени в примерно 0.2 секунды. Это и есть те самые 0.2 секунды, задающие такт всей системе.
Шестнадцатибитный таймер использует внешнее прерывание для включения и выключения – он включается по спадающему и выключается по возрастающему фронту. Иными словами, таймер считает, когда инжектор открыт. Каждые 0.2 секунды главная функция программы сравнивает текущее значение таймера с максимально известным значением, и на основании этого сравнения, принимает решение, насколько заполнить индикатор. Теперь о максимальном значении – у программы есть два режима работы, в точности как у Терминатора – помните, у него был переключатель в мозгах, который позволял или запрещал Терминатору учиться новым вещам. Изначально программа учится – каждый раз, обнаружив новое значение таймера, которое больше предыдущего максимума, она запоминает его в энергонезависимую память EEPROM (в переменную maximum). Там-же хранится флаг (переменная learning), отвечающий за включение и отключение режима обучения – соответственно, когда этот режим выключен, программа не будет запоминать новые максимальные значения подсчетов таймера.
Возможность смены режима обучения была сделана вот для чего: как выяснилось, на максимальном “газе” (а-ля “pedal to the metal”) подача бензина столь велика, что после запоминания значений таймера в таких режимах работы, при обычном, спокойном стиле езды, индикатор заполняется всего на 2-3 деления из 10. Естественно, это не совсем удобно и устройство теряет смысл существования, при обычной езде, без гонок. Поэтому я обучил его немного газанув на разгоне, и отрубил обучающий режим. Теперь при прогреве например, горят 2 деления. При обычной езде – до 6ти, при резвом разгоне – 9-10, ну и если вообще притопить, то все 10 постоянно.
Для сброса сохраненного в EEPROM максимально известного значения таймера и переключения режимов обучения устройства, существует кнопка SW2 (смотрите схему). Если во время работы устройства подержать ее нажатой несколько секунд, то EEPROM обнулится. Если держать ее нажатой в момент инициализации микропроцессора (читай – подачи питания на устройство), то оно переключится на другой режим обучения.
Для визуализации процессов инициализации, запоминания в EEPROM новых значений и переключения режимов обучения реализованы простые схемы подмигивания индикатором – этим занимаются функции running_bar и blinking_bar.
Поскольку запись в EEPROM процесс довольно медленный, обнаружив необходимость записать в EEPROM новое значение таймера, программа ждет примерно минуту (300 циклов по примерно 0.2 секунды), прежде чем записать его (этим занимается переменная e_eprom_w_timer). Если в течении этой минуты будет обнаружено очередное, еще более высокое значение таймера, то отсчет минуты начинается заново.
Важный момент в работе шестнадцатибитного таймера – при выключении двигателя, таймер включается по спадающему фронту внешнего прерывания, и остается включенным. Это не есть хорошо, поскольку работа всего устройства будет скомпрометирована. Решение проблемы очень простое: таймер работает с делителем 64, т.е. на частоте 8МГц/64=125КГц, следовательно он переполнится примерно за 0.5 секунды. Включаем прерывание на переполнение этого таймера. Если такое прерывание наступает, то система понимает, что двигатель остановлен, вырубает таймер, обнуляет его, отменяет запись в EEPROM нового, нереального значения таймера (ведь он продолжает непрерывно считать почти полсекунды, думая что инжектор открыт) и инициализирует систему по новой (замещает неверные максимальные значения таймера правильными, из EEPROM).
После просмотра ролика и непродолжительного изучения интернета, было выяснено, что эта серая мазь из ролика под названием Rothenberger ROSOL 3 является смесью мелкой оловянной пыли и флюса и изначально была разработана для лужения медных трубок перед пайкой:
Итак, в первой части повествования мы с вами разобрались в базовой теории работы инжектора и определились с функционалом и принципом реализации будущего устройства для измерения потребления топлива.
Сердцем устройства станет, разумеется, микроконтроллер (далее МК). Мой выбор пал на самый древний, что завалялся у меня на полке — Atmel AVR AT90S2313. Его скромных возможностей выше крыши хватит для реализации задуманного. В этом МК нет никакого внутреннего резонатора – к нему нужно подключить внешний источник тактовой частоты – как правило это кварцевый резонатор. Я подчеркиваю – выбор пал на этот МК только потому что более простого у меня не оказалось.
Как было сказано, принцип работы индикатора расхода строится на измерении суммарного интервала открытия форсунки в единицу времени. Чем больше замеренный суммарный интервал, тем больше делений загорится на индикаторе. Значит пришла пора определиться с единицей времени, и сделать это можно по следующей логике: по идее, на холостом ходу мотор моего Nissan’a (да и на самом деле на большинстве других легковых авто) работает со скоростью около 700 об/мин (это по паспорту). Допустим он работает даже 600 об/мин, т.е. 10 об/сек. Таким образом, за 1 секунду, коленвал совершит 10 оборотов. Форсунка открывается 1 раз за 2 оборота, во время такта впуска. Таким образом, за секунду, форсунка откроется 5 раз, а значит минимальный отрезок времени, за который она откроется хотя-бы раз (что бы наш измеритель хоть чего-нибудь да измерил) равняется 1/5 секунды или 200мс. Ну вот и возьмем эти 200мс за единицу времени, т.е. будем мерить сколько времени была открыта форсунка за 200мс. Соответственно, с тем же 200от-миллисекундным интервалом будут обновляться показания на индикаторе.
Понадобилось мне недавно организовать защищенный доступ извне к своей домашней сети. Выбор пал, естественно, на технологию VPN. Материалов по этому вопросу в сети навалом, но по непонятным мне причинам, я не нашел ни одной статьи, в которой было бы все сразу. И это несмотря на то, что задача стоит довольно примитивная.
Поэтому пришлось скомбинировать действия их разных статей, для достижения оптимального варианта.
Работая с этим сайтом, вы даете свое согласие на использование файлов cookie сервисов Google. Это необходимо для нормального функционирования сайта, показа целевой рекламы и анализа трафика. Статистика использования сайта отправляется в Google Подробнее