Удлинитель сигналов поворота AKA лентяйка

Как известно, при обгонах и перестроениях из ряда в ряд, поворота руля не хватает для отключения сигнала поворота, и после окончания маневра его нужно отщелкивать вручную. Многие мудаки решают это проблему просто – не включают поворотники вообще. А для тех, кто включает, на подавляющем большинстве современных автомобилей реализован интересный фичер – при кратковременном несильном нажатии на переключатель поворотников, так, чтобы он не зафиксировался, а вернулся в исходное положение, поворотники автоматически мигают три раза.

Фичер очень удобный и по умному называется удлинителем сигнала поворотов (по англ. comfort turn signal или one-touch turn signal), а в народе зовется лентяйкой.

Пример работы:

На более старых авто, как например на моем Nissan’е, данной функции нет, и производитель рекомендует, при коротких маневрах, придерживать переключатель поворотников рукой в полунажатом состоянии – в таком положении поворотник мигает, но переключатель не фиксируется и возвращается в исходное положение, если перестать придерживать его.

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

Продолжить чтение

МФУ HP LaserJet Pro M1212nf – микро-обзор

На днях приобрел данный прибор. Перед покупкой очень долго шерстил интернет, пытаясь понять, какое МФУ стоит купить, исходя из следующих требований:HP_LaserJet_Pro_M1212nf_3

  • Сетевой интерфейс – абсолютно необходим, ибо дома у меня несколько компов, а шарить сканнер и принтер геморно;
  • Фидер для сканера – иногда приходится много сканировать, и вручную это нереальная трата времени и нервов;
  • Надежность – само собой;
  • Удобство – бесспорно;
  • Лазерность – в гробу я видал струйники, ИМХО это пройденный этап (кроме редких частных случаев, разумеется). Кроме того я делаю печатные платы на дому, где печать на лазерном принтере – часть технологического процесса;
  • Дешевизна – относительная конечно, так, чтобы не в ущерб всему остальному;
  • Доступность расходников – а именно, тонера и барабана. При этом важно помнить, что существует eBay.

Такие параметры как скорость работы, количество бумаги, которое можно упихать в приемный лоток и т.п. меня интересовали меньше, потому что я не для многолюдного оффиса искал устройство.

Сказать по правде, просмотр обзоров в сети занял очень много времени, и оказался практически бесполезен. По ряду причин. К примеру, была масса обзоров отличных МФУ от разных производителей, которых не было в наличии ни в одном магазине. Или же в неплохом по остальным параметрам МФУ не хватало, например, сетевого интерфейса или фидера для сканера. Было несколько, по слухам, нормальных устройств от Brother и Lexmark, которые в принципе могли бы мне подойти, но исторически так сложилось, что продукцию этих фирм я обхожу за версту. Или даже за две версты. В конце концов, остался лишь один претендент, который был в продаже, обладал сетевым интерфейсом, фидером, был лазерным, относительно дешевым, симпатичным и с массой доступных расходников на eBay. Это был HP LaserJet Pro M1212nf.

HP_LaserJet_Pro_M1212nf_2

Продолжить чтение

Индикатор расхода топлива для инжекторного двигателя – версия 2

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

В конструкцию прибора были внесены некоторые изменения, касающиеся стабилизации питания и отображения результатов измерений.image

Поговорим обо всем по порядку. Итак – начну с питания. Несмотря на то, что схема понижения и стабилизации напряжения питания микроконтроллера, примененная в первой версии устройства работала без нареканий, ее решено было переделать. По большей части причиной послужило то, что в моем распоряжении появилась горсть 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). Это гарантирует отсутствие фатальных помех по сигнальной линии.

В остальном схема осталась без изменений – более конкретные объяснения есть в упомянутых мной статьях о первой версии устройства.

Стоит упомянуть, что на контроллере осталось четыре неиспользованных ноги – возможно, кому-то захочется расширить функционал устройства с их помощью.

Продолжить чтение

Ваттметр

Приобрел себе вот такую вот штуку:

image

Это ваттметр – он умеет показывать электрическую мощность, потребляемую включенным в него электроприбором. Ваттметр включается в розетку, а потребитель мощностью до 1400 Ватт (для этой конкретной модели) в сам ваттметр – такой допустимой мощности достаточно для, например, утюга.

Вот точные спецификации ваттметра:

  • Plug In/Socket Out Voltage: 220V
  • Plug In/Socket Operation Current/Power: 6A or 1400W
  • Local Power: ~1.2W
  • Operative Current / Power: ~2 mA or 0.44W
  • Power Resolution: 1W
  • Accurate Class: 1.0 class (~1%)
  • Anti-Lightning Dynamic (Surge Protection) Function: Yes
  • Operation Temperature: 0-50 Degrees Celsius
  • Timer mode settings are from 00-59 minutes.
  • 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

Ваттметр продается с вилками для разных стандартов розеток, а на себе несет панель, в которую можно воткнуть вилку всех возможных мировых стандартов – а их, как выяснилось, навалом.

image

Продолжить чтение

Индикатор расхода топлива для инжекторного двигателя – часть 0b11

imageПоследняя часть цикла статей о индикаторе расхода топлива. Первые две части находятся здесь и здесь.

Программа для контроллера получилась довольно комплексной, потому я постарался наполнить ее комментариями, насколько это возможно. Вдобавок, полагаю будет не лишним описать здесь весь принцип реализованного алгоритма.

Саму программу и файл прошивки можно сказать здесь.

Программа пользуется обоими таймерами, имеющимися на борту микропроцессора. Восьмибитный таймер, запущенный с делителем 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).

Продолжить чтение

Индикатор расхода топлива для инжекторного двигателя – часть 0b10

imageИтак, в первой части повествования мы с вами разобрались в базовой теории работы инжектора и определились с функционалом и принципом реализации будущего устройства для измерения потребления топлива.
Сердцем устройства станет, разумеется, микроконтроллер (далее МК). Мой выбор пал на самый древний, что завалялся у меня на полке – Atmel AVR AT90S2313. Его скромных возможностей выше крыши хватит для реализации задуманного. В этом МК нет никакого внутреннего резонатора – к нему нужно подключить внешний источник тактовой частоты – как правило это кварцевый резонатор. Я подчеркиваю – выбор пал на этот МК только потому что более простого у меня не оказалось.

Как было сказано, принцип работы индикатора расхода строится на измерении суммарного интервала открытия форсунки в единицу времени. Чем больше замеренный суммарный интервал, тем больше делений загорится на индикаторе. Значит пришла пора определиться с единицей времени, и сделать это можно по следующей логике: по идее, на холостом ходу мотор моего Nissan’a (да и на самом деле на большинстве других легковых авто) работает со скоростью около 700 об/мин (это по паспорту). Допустим он работает даже 600 об/мин, т.е. 10 об/сек. Таким образом, за 1 секунду, коленвал совершит 10 оборотов. Форсунка открывается 1 раз за 2 оборота, во время такта впуска. Таким образом, за секунду, форсунка откроется 5 раз, а значит минимальный отрезок времени, за который она откроется хотя-бы раз (что бы наш измеритель хоть чего-нибудь да измерил) равняется 1/5 секунды или 200мс. Ну вот и возьмем эти 200мс за единицу времени, т.е. будем мерить сколько времени была открыта форсунка за 200мс. Соответственно, с тем же 200от-миллисекундным интервалом будут обновляться показания на индикаторе.

Продолжить чтение

Индикатор расхода топлива для инжекторного двигателя – часть 0b01

imageНа многих современных авто бортовой компьютер выводит на дисплей информацию о потреблении топлива в текущий момент времени. Причем информация эта выводится в двух видах. Иногда в литрах на 100 км., но чаще в литрах в час. Причем если первый показатель довольно понятен и исчерпывающ, то второй сам по себе ничего не говорит – приходится еще и глядеть на спидометр, и потом напрягать мозги, вычисляя сколько же литров живой воды схавает двигатель за 100 км. пробега в данном режиме. Короче бред полный, на мой взгляд.

Кроме всего прочего, меня лично не устраивает цифровой вывод информации, поскольку он отвлекает внимание от дороги. Можно конечно поставить гигантский индикатор со здоровенными цифрами, но это потребует реорганизации всей торпеды, а делать этого совсем не хочется.

И тогда я понял, что мне нужен простой “прогресс бар” (вообще это это называется “бар граф” от англ. bargraph, но прогресс бар как то понятнее звучит Smile), который будет показывать расход топлива в единицу времени. Вот такой вот:

image

Такая система, разумеется, не будет показывать никакого числового расхода топлива, ни в единицу времени, ни в единицу пробега, но тем не менее даст четкое представление о моментальном расходе бензина.

Продолжить чтение

Всеобъемлющая флешка!

Забавную идею воплотили в жизнь инженеры компании Infinitec – беспроводной адаптер, который распознается как флеш накопитель.

Идея элементарна – спариваете брелок с точкой доступа, расшариваете на компе файлы специальной программулькой, втыкаете брелок в любой девайс, поддерживающий чтение с обычных флешек (Компы, проигрыватели, плейстейшены, принтеры и т.д. Фактически – все устройства на которых есть USB порт) и девайс наивно будет думать, что в него воткнули обычную флешку.

Смотрите ролик – не нем все показано:

[youtube]grmyT1ctjas[/youtube]
[ad#intext2]

Фотки:

image

image

В продаже появится 1го июля 2010, по цене “ниже 129 чатлов”. Я вот подумываю обзавестись!