Термометр и бегущая строка в вентиляторе - Мои статьи - Каталог статей - Персональный сайт
Программирование BASCOM
Меню сайта
Категории каталога
Мои статьи [57]
Наш опрос
Оцените мой сайт
Всего ответов: 537
Главная » Статьи » Мои статьи

Термометр и бегущая строка в вентиляторе
Эффект "висящего в воздухе" текста или изображения завораживает. Устройств, использующих эффект "POV" (Persistence of vision) создано уже много. Вот еще одно, созданное с помощью AVR-BASCOM. Оно показывает температуру и бегущую строку над лопастями вентилятора.
 
 
Для создания устройства я выбрал вентилятор "VP-30C" фирмы "Fagor". Он один из немногих настенных и имеет пульт д/у. При цене в 800р это просто подарок.
 
 
Схема устройства:
 
 
Процессор взят ATmega8L. Подойдет любой другой с объемом памяти не менее 8Кб и аппаратным SPI. Текст бегущей строки хранится в AT25256 (в нее уместился словарик на 1000 слов). Можно взять другие из 25 или 45 серий. Для измерения температуры выбран DS18B20 только из-за точности в 0,5 градуса. В качестве датчика положения - датчик Холла SS526D. Он один из немногих имеет цифровой выход. Можно взять с аналоговым выходом или использовать пару ИК-светодиод-фотодиод с установкой на корпусе флажка-прерывателя. И то и другое потребует формирователя импульса. ВАЖНО!!! SS526D имеет дополнительную функцию - "направление движения", поэтому требует ДВА магнита - "север" и "юг". Для индикации применены белые сверхяркие SMD-светодиоды шириной 1,5мм. В каждом разряде по два параллельно. Ток через пару около 100мА. По 50мА на светодиод - несколько многовато, но допустимо, учитывая импульсный режим их работы и хороший обдув. На время наладки устройства рекомендую, все-таки, установить токоограничительные резисторы по 100 Ом вместо штатных 47 Ом. Применение сверхярких светодиодов обязательно - при вращении их визуальная яркость значительно падает. Для зажигания светодиодов применена сборка ключей ULN2803A. При замене ее на обычные транзисторы следует не забыть установить базовые токоограничительные резисторы (в ULN2803A они уже есть). Для подсветки использованы по два красных, синих и зеленых светодиода. Типоразмеры их у меня оказались разными, но здесь это не столь важно. Ток для питания схемы вырабатывает генератор из 8 катушек, вращающихся над восьмиполюсным магнитом от тонвала видеомагнитофона. Для изготовления катушек использованы выходные трансформаторы от телефонов PANAFON. Они имеют размер 10х10мм. Замыкающие пластины убираются, оставляются только Ш-образные. На каркас наматывается 1200 витков провода ПЭВ-0,1. Трансформаторы приклеиваются на плату по кругу через 45 градусов. Соседние катушки соединяются встречно-последовательно. Образованные таким образом четыре пары соединяются параллельно. Готовый генератор должен выдавать около 8 вольт на холостом ходу и не менее 5 вольт при токе нагрузки 150мА. Для стабилизации напряжения применен аналог мощного стабилитрона на VR1-TL431 и Q1-2SB962. Обух корпуса (коллектор) Q1 припаян к шине массы и, поэтому, не требует радиатора. Выпрямительные диоды - SS12. Можно использовать любые Шоттки на ток не менее 0,5А. Дроссель L1 не менее 10мГ и должен быть рассчитан на ток до 800мА. Соединения дачиков температуры и Холла с процессором, учитывая сильные магнитные наводки в плате, выполнены экранированным проводом. Плата устройства:
 
 
Кронштейн покрашен под цвет лопастей крыльчатки:
 
 
Для балансировки платы использованы ось и подшипники от головки видеомагнитофона. (Противовесы из припоя - регулировка паяльником):
 
 
Плата привинчена к крыльчатке шестью саморезами:
 
 
 
После сборки еще раз балансируем:

После тестирования выяснилось, что катушки при работе нагреваются градусов на пять. Этот нагрев через плату, кронштейн и провода передавался на датчик температуры и, не смотря на мощный обдув, завышал его показания. Переделывать кронштейн было лень, поэтому для теплоизоляции датчика, был использован кусочек пенопласта. При повторении устройства лучше кронштейн выполнить из дерева:
 
 
Восьмиполюсной магнит к пластиковой гайке крепления задней сетки приклеен "Квинтолом" (другого под рукой не было). Вообще-то он не клеит ферриты и полиэтилен, но как ни странно, держит:
 
 
Задняя сетка установлена и закреплена гайкой с магнитом. На ось надеты текстолитовые шайбы для установки зазора между магнитом и катушками. Магнит для датчика положения состоит из двух половинок север-юг (слева от оси):

Крыльчатка надета на ось и закреплена гайкой:
 
 
Текст бегущей строки набирается обычным "Блокнотом" WINDOWS. Каждая фраза с новой строки:
 
 
Каждая новая фраза от предыдущей отделяется шестью пробелами, для удобства восприятия. Следует заметить, что "Блокнот" каждую строку завершает байтом "0D" - Carriage Return и "0A" - Line Feed, "AkelPad" - только Line Feed, "Word" при сохранении в "txt"- формате спрашивает, чем завершать строку. Наше устройство при индикации заменит эти символы пробелами, таким образом, их станет 6+2=8 или 6+1=7 (для "AkelPad"). Размер файла текста должен быть точно равен 32768 байт. Для прошивки его в AT25256 (например, программатором PONYPROG) следует поменять расширение "txt" на "bin". При прошивке процессора достаточно одного фьюза - внутренний RC-генератор на 8МГц. Можно еще BOD на 2,7В.
 
Пояснения к программе: Текст воспроизводится восемью сдвоенными светодиодами Led0-Led7. Круг разделен на 256 секторов. 8-разрядный таймер0 используется для подсчета времени оборота между импульсами датчика Холла. Работает он на частоте 31250Гц (8МГц/256). При скорости вращения 600...3000 об/мин восьми разрядов недостаточно (за один оборот число импульсов может превысить 3000), поэтому использована переменная T0_slave для регистрации кол-ва переполнений таймера. По окончании оборота содержимое T0_slave заносится в регистр Compare1a таймера1. 16-разрядный таймер1 работает на частоте 8Мгц (т.е. в 256 раз выше таймера0) в режиме сравнения. В подпрограмме обслуживания его прерываний происходит отображение данных текущего сектора. По достижении Compare1a таймер сбрасывается и начинает отображение нового сектора. После 244 сектора таймер останавливается и программа ожидает завершения оборота. С приходом импульса от датчика Холла программа возвращается к нулевому сектору. Таким образом, скорость вывода секторов текста всегда строго соответствует скорости вращения крыльчатки и отсутствует "сползание" изображения. Справедливости ради следует отметить, что вывод изображения текущего оборота происходит по данным о скорости предыдущего. В установившемся режиме это вообще не сказывается на картинке, а при торможении/ускорении соответственно расширение/сужение текста составляет менее 1%, что практически не заметно на глаз (см. working.avi начиная с 40 секунды). В переменной Transfer хранится кол-во оборотов. На 0-м обороте происходит запрос DS18B20 на измерение температуры. На 60-м обороте (по прошествии более 3 сек) эта температура считывается, преобразуется в десятичный вид и отображается. Еще через 18 оборотов переменная Transfer сбрасывается в 0 и процесс повторяется снова. Время 3 секунды необходимо для исключения "мельтешения" показаний, кроме того, DS18B20 требует до 0,75сек для измерения, что с запасом перекрывает это время. Шина 1-wire довольно медленная, поэтому обмен по ней происходит между 224 и 244 секторами, когда изображение не выводится. Считывание данных из AT25256 происходит аппаратным SPI : по Spiout посылается адрес байта, по Spiin - байт принимается. Обмен происходит на скорости 2Мгц (строка "Clockrate = 4"). Если Ваша микросхема поддерживает скорость обмена в 4Мгц, то можно установить флаг регистра "Spsr = 1" (удвоение скорости SPI). Данный вентилятор имеет три скорости. На первой скорости (самой медленной) напряжения, вырабатываемого генератором, оказалось недостаточно, поэтому на ней отображается только температура (строка If Compare1a > 1950). И даже при этом напряжение составляет около 3,5В и светодиоды горят не в полную силу. На второй скорости отображается и температура и текст, но без подсветки (строки Compare1a < 1720). Напряжение полное - 5В - светодиоды горят в полный накал. На третьей скорости запаса напряжения хватает на подсветку текста. Температуру - синим, латиницу- красным, киррилицу - зеленым. Вообще, на подсветку планы были более глобальные - светодиодов изначально было 12 и планировалась 16-цветная палитра с сегментированными рисунками и подобием цветомузыки, но питания оказалось недостаточно. Причем этот генератор - четвертый вариант. Предыдущие были еще хуже. Вообще слухи об обратимости электромоторов оказались слегка преувеличенными. ПОЭТОМУ, прежде чем повторять этот проект, сначала соберите "обратный" стендик - магнит вращается, а плата с катушками закреплена. Так можно замерить напряжения, проверить под нагрузкой и т.д. В знакогенераторе пропущены некоторые редкоупотребляемые символы (представлены пробелом), поэтому при наборе своих текстов удостоверьтесь в их наличии и, при необходимости, отредактируйте знакогенератор.
 
 
 
Удачи в творчестве! MrShilov.
Категория: Мои статьи | Добавил: bascom (07.12.2009)
Просмотров: 7733 | Рейтинг: 5.0/5 |
Всего комментариев: 15
0  
15 Виталий   (29.01.2010 15:00)
Не понял как в личку писать ((( адрес мой vitolyaШАВКАpochta.ru
Можешь дать исходник для работы без внешней памяти (для наглядности пляшущего человечка прописать или хотяб смайлик подмигивающий) если конечно не сложно.
Да и еще мой вентилятор крутится от 3 оборотов в сек периодически наращивая обороты, планирую поставить батарею li-ion, заменить магнит катушкой (короче трансформатор) заряжать во время простоя и работы. Но пока не могу начать так как нет у нас в Архангельске в продаже датчиков холла (оптопару не хочу, пыль))) ), вот обещали на заказ привезти.... больше месяца уже везут.

0  
13 Виталий   (26.01.2010 12:22)
Я тут писал, писал, а сегодня ничего нет...

0  
14 Mrshilov   (27.01.2010 19:05)
Если нужно только пару слов - нет необходимости в 25256 - в памяти более килобайта свободного места. Таблицу символов во внешнюю память или SD-карту поместить можно, но могут возникнуть проблемы со временем - две операции считывания, вычисление положения и т.д. Можно не уложиться в сектор. Возможно потребуется повысить частоту процессора. Нужно все просчитать.
Скайпа у меня нет. Если что нужно - киньте мыло в личку.

0  
12 Виталий   (25.01.2010 16:10)
Буду очень рад получить ответ на skype nick-vitolya_vs

0  
11 Виталий   (25.01.2010 16:09)
Привет. У меня вопрос по поводу вывода текста: Почему сделан цикл чтения памяти? я не хочу вводить весь текст нужно только пару слов.... как реализовать (в программе читаем все и далее с начала if N_char>32767 Then N_char=0) пример if N_char=(заново) Then N_char=0 то есть за место (заново) значение из текста например @.... я не силен в программировании помогите разобраться и еще, как подключить sd карту чтоб читало текст с карты. (если возможно таблицу символов поместить тоже в внешнюю память чтоб можно было добавлять графику за место значения символов )

0  
9 Виталий   (15.01.2010 09:53)
А производится запись 25256 ? Я понял что через один разъем шьется и производится запись промки, так?

0  
10 Mrshilov   (16.01.2010 03:52)
Нет, 25256 нужно прошивать отдельно.

0  
8 Andrey   (28.12.2009 14:44)
Пытаюсь разобраться с вашей программой и использовать Ваше пожелание "изменять переменную "Flashdelay""
Принцип я так понимаю следующий:
1. я знаю количество оборотов
2. я знаю что моя надпись состоит в длину из сорока пикселей (в моем случае) то есть что бы она заняла весь круг мне надо что бы мой цикл был не более или равен 40 мс?
3 То есть если вентилятор крутится со скоростью 40 Гц то Flashdelay = я незнаю сколько поставить значение должно быть что то вроде условия If обороты =40 тогда Flashdelay = например 10
If обороты =80 тогда Flashdelay = например 5
не понимаю как это реализовать
пробовал Вашу программу изменить убрав пока все "лишнее" но куда выводить и как непонятно...
$regfile = "attiny2313.dat"
$crystal = 8000000

Config Portb = Output
Config Portd.0 = Input
Config Timer0 = Timer , Prescale = 256
Config Timer1 = Timer , Prescale = 1 , Compare A = Disconnect , Clear Timer = 1 'Таймер1, частота 8 МГц - выдает частоту секторов
Dim T0_slave As Word : T0_slave = 0
Dim Sector As Byte : Sector = 0
Dim Transfer As Byte
Enable Compare1a
On Compare1a Timer_1_int
Enable Timer0
Enable Timer1
On Timer0 Timer_0_int
On Int1 Hall_sensor Nosave 'Датчик Холла подключен к INT0
Config Int1 = Rising 'прерывание INT1 по фронту импульса
Enable Int1

Const Flashdelay = 1

Start Timer0
Enable Interrupts

Do
незнаю что сюда вписывать

Loop
Timer_0_int:
T0_slave = T0_slave + 256 'переполнение счетчика времени оборота
Return
Hall_sensor:

Compare1a = T0_slave + Timer0 'вычисляем время оборота (/32mkc)
Timer0 = 0
Timer1 = 0
Start Timer1
T0_slave = 0
Transfer = Transfer + 1
Sector = 0

If Compare1a < 1000 Then ' остановка скроллинга текста на первой скорости

тут тоже непонятно что написать

End If
Return

Timer_1_int:

If Sector < 244 Then
Incr Sector 'номер сектора
Else
Stop Timer1 'останавливаем индикацию, ждем Датчик Холла
Goto Stop_ind 'выходим
End If

If Sector > 1 And Sector < 200 Then ' внизу показываем текст
Gosub Text_indication
End If
Stop_ind:

Return
Text_indication:

и тут тоже неясность...

Return
End


0  
6 Andrey   (28.12.2009 09:27)
Еще один вопрос если флаг не снимать, достаточно ли будет частоты в 1 мегагерц или это мало очень для воспроизведения спецэффектов? просто если переменная Flashdelay = 2 то я вижу как включаются и гаснут светодиоды если Flashdelay = 1 то почти равномерное свечение, Bascom только начал изучать хотел узнать waitms = 1 это самая минимальная пауза которую можно сделать? Меньше еще никак? а с программой Вашей я только только пытаюсь разобраться пока сложно)

0  
7 bascom   (28.12.2009 12:35)
waitus ещё меньше

0  
4 Andrey   (27.12.2009 22:14)
Здравствуйте, только начал изучать Atmel и Bascom спаял программатор и схему появились вопросы, не могу додуматься как вы это реализовали...
$regfile = "attiny2313.dat"
$crystal = 8000000

Config Portb = Output
Config Portd.0 = Input
Const Flashdelay = 1
Dim Effect As Byte
Do
If Pind.0 = 0 Then Effect = 1
If Effect = 1 Then
Portb = &B11111110
Waitms Flashdelay
Portb = &B00010000
Waitms Flashdelay
Portb = &B00101000
Waitms Flashdelay
Portb = &B01000100
Waitms Flashdelay
Portb = &B10000010
Waitms Flashdelay
Portb = &B00000000
Waitms Flashdelay
Waitms Flashdelay
Portb = &B11111110
Waitms Flashdelay
Portb = &B10000010
Waitms Flashdelay
Portb = &B10000010
Waitms Flashdelay
Portb = &B10000010
Waitms Flashdelay
Portb = &B10000010
Waitms Flashdelay
Portb = &B00000000
Waitms Flashdelay
Waitms Flashdelay
Portb = &B11111110
Waitms Flashdelay
Portb = &B10010010
Waitms Flashdelay
Portb = &B10010010
Waitms Flashdelay
Portb = &B10010010
Waitms Flashdelay
Portb = &B10010010
Waitms Flashdelay
Portb = &B00000000
Waitms Flashdelay
Waitms Flashdelay
Portb = &B11111110
Waitms Flashdelay
Portb = &B00010000
Waitms Flashdelay
Portb = &B00010000
Waitms Flashdelay
Portb = &B00010000
Waitms Flashdelay
Portb = &B11111110
Waitms Flashdelay
Portb = &B00000000
Waitms Flashdelay
Waitms Flashdelay
Portb = &B11111110
Waitms Flashdelay
Portb = &B00100000
Waitms Flashdelay
Portb = &B00010000
Waitms Flashdelay
Portb = &B00001000
Waitms Flashdelay
Portb = &B11111110
Waitms Flashdelay
Portb = &B00000000
Waitms Flashdelay
Waitms Flashdelay
Portb = &B10001100
Waitms Flashdelay
Portb = &B01010010
Waitms Flashdelay
Portb = &B00110010
Waitms Flashdelay
Portb = &B00010010
Waitms Flashdelay
Portb = &B11111110
Waitms Flashdelay
Waitms Flashdelay
Waitms Flashdelay
Waitms Flashdelay
End If
Loop
End
Я планитовал что если соеденить датчих холла на вентиляторе от БП с Portd.0 то за один оборот у меня будет пролетать надпись КСЕНИЯ, далее я думал что замеря частоту оборотов я придумаю как реализовать что бы надпить могла двигаться и тд.. может поможете? хотя бы простейшую блок схему. Контроллер использую ATTINY2313 частоту в программе выставил 8МГц в даташите написано что она работает если фузы не трогать на 8 МГц только мне кажется что она как то медленно работает совсем


0  
5 Mrshilov   (28.12.2009 00:02)
Принцип работы довольно подробно описан в приложении. Для вашего варианта программы могу посоветовать замерять таймером время оборота и соответственно изменять переменную "Flashdelay", иначе ширина надписи будет "гулять".
По умолчанию на процессорах установлено деление на 8 основной частоты, поэтому реальная частота у вас сейчас 1 МГц. Снимите этот флаг.

0  
2 bascom   (15.12.2009 12:47)
http://pro-radio.ru/technology/3885-2/
Здесь есть вариант вращающегося трансформатора с током до 0,5 Ампера (при напряжении 5 Вольт)
Обычно это самое слабое место "призрачных" изделий.

0  
3 Mrshilov   (16.12.2009 07:27)
Очень не хотелось разбирать корпус и вставлять туда плату, катушки со своим БП.
Лучшие характеристики получаются когда катушки внутри кольцевого магнита, но тут важна точность изготовления-крепления, важна также высота катушек.
В любом случае, действительно, это самое слабое место. Если кто-то захочет создавать что-либо подобное, настоятельно рекомендую начать с питания, не наступайте на мои грабли...

0  
1 Михаил   (07.12.2009 17:35)
Руки из правильного места торчат у автора!

Имя *:
Email:
Код *:
Форма входа
E-mail:
Пароль:
Поиск
Друзья сайта
  Ремонт телефонов. РемонтUSB флешек. Сборка ПК под заказ.
Статистика

Онлайн всего: 10
Гостей: 9
Пользователей: 1
bascom
Copyright Radan Studio © 2012Создать сайт бесплатно