Внешний вид светодиодного волчка на микроконтроллереСуществует множество конструкций и схем волчков со светодиодами. Обычно в них есть несколько светодиодов разного цвета и во время вращения эти цвета "размываются" на всю площадь волчка. Наш волчок при вращении отображает сообщение. И более того — если вы закрутите его в обратном направлении, то он покажет другое сообщение. Быстрое переключение светодиодов отображает сообщение, которое человеческий глаз способен уловить.

Схема нашего волчка такова, что при вращении в разные стороны он может показывать различные сообщения. Блок-схема волчка приведена на рисунке:
 
Блок-схема волчка


Устройство состоит из ряда светодиодов, смонтированных радиально от центра волчка к его периферии. Волчок питается от двух батареек размером ААА (никель-металло-гидридных или щелочных), выдающих от 2,4 до 3 В. Поскольку микроконтроллер должен питаться от 5 В, то предусмотрен повышающий преобразователь (который поднимает напряжение от батареек до +5 В). Для определения факта вращения и его направления в схеме есть две катушки индуктивности.

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

Ниже изображена принципиальная схема волчка со светодиодами. Он питается от двух батареек размера ААА (на схеме — ААА1 и ААА2). Выключатель SW2 позволяет отключать питание. Учтите, что индикатора включения питания нет, поэтому весьма возможно, что вы забудете выключить питание и разрядите батарейки.

Напряжение от батареек подается на преобразователь МАХ756, который обеспечивает напряжение +5 В для питания микроконтроллера AVR ATTiny44 (IC3), а также двух операционных усилителей LM358 (IC1 и IC2). Микроконтроллер управляет восемью светодиодами. Цепь обнаружения движения (состоящая из двух операционных усилителей) определяет факт вращения и направление поворота. Эта информация подается в микроконтроллер на сигнальные контакты INT (контакт РВ2) и DIR (контакт РВ1). Схема светодиодного волчка (кликните по схема для увеличения):
 
Схема светодиодного волчка на микроконтроллере AVR ATtiny44
Цепь обнаружения движения состоит из двух идентичных каналов (состоящих из катушек L2 и L3). Когда катушка двигается в магнитном поле, в ней возникает напряжение. Наша схема использует магнитное поле Земли, поэтому при вращении волчка генерируется очень небольшое переменное напряжение. Частота этого напряжения равна скорости вращения волчка. Две катушки размещены под углом 90° на краю волчка. Таким образом, сигнал от одной катушки запаздывает на 90° по сравнению с сигналом другой катушки. Если рассмотреть эти сигналы на осциллографе, то при вращении волчка в одну сторону первый сигнал будет опережать второй, а при вращении в другую сторону — отставать от него:

Диаграмма напряжений на входах микроконтроллера

Синусоидальные сигналы от катушек усиливаются операционными усилителями, включенными как неинвертирующие усилители (IC1A и IC2A). Эти усиленные сигналы преобразуются при помощи RC-цепей задержки (R14, С9 и R15,C8 — в одном канале и R21, С12 и R22, С11 — в другом). Задержанные синусоидальные напряжения поступают на компараторы (IC1B и IC2B), чтобы получить прямоугольные сигналы той же частоты. Прямоугольные сигналы от операционных усилителей (INT и DIR) подаются на микроконтроллер. Сигнал INT поступает на контакт РВ2 микроконтроллера Tiny44 (это контакт прерывания). Этот контакт программно сконфигурирован как вход по нарастающему фронту. Второй канал DIR подключен к РВ1. При каждом прерывании микроконтроллера сигналом INT он выполняет процедуру обработки прерывания, которая читает состояние контакта DIR. Если контакт DIR равен 0, то это означает одно направление вращения, а если 1 — другое. Микроконтроллер также измеряет частоту сигнала INT и использует эту информацию для определения времени одного оборота волчка. Шаблоны свечения светодиодов (для Обоих направлений) хранятся в памяти программ микроконтроллера. На основе информации о скорости вращения микроконтроллер решает, как долго демонстрировать шаблон свечения. Если скорость вращения падает, то время отображения шаблона свечения пропорционально увеличивается. Если скорость вращения высокая (как это бывает в начале вращения), то все шаблоны свечения демонстрируются в течение более короткого времени. Это обеспечивает постоянство отображаемого сообщения независимо от скорости вращения волчка.

Шестиконтактный разъем — ISP, который необходим для программирования микроконтроллера. Перемычка JP1 зарезервирована для последующего использования и в текущей версии программы состояние контакта РВ0 не считывается. Катушка L4 установлена для балансировки волчка, к схеме она не подключена.

Все индикаторы размещены на нижней стороне платы и залиты термоклеем для защиты. Катушки L2 и L3 намотаны эмалированным медным проводом марки 42 SWG на сердечнике из феррита. Это очень тонкая проволока, поэтому при наматывании катушки следует соблюдать осторожность. Ферритовый сердечник был полностью заполнен обмоткой, в результате чего индуктивность составила примерно 150 мГн. Подробности по сердечнику (высота 10 мм и внутренний диаметр 3 мм) и способ его намотки приведены на нашем Web-сайте. Катушка L1 намотана 20 витками провода 28 SWG и имеет индуктивность примерно 22 мкГн. Число витков катушки L4 не имеет значения, она просто должна иметь такой же вес, как остальные катушки. Все катушки размещаются на краю платы (через 90 друг от друга).

Конструкция светодиодного волчка

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

Тактовая частота микроконтроллера равна 1 МГц. Максимальное и минимальное время одного оборота задано заранее (как и те символы, которые будут отображаться при вращении в одну и в другую сторону). Главная программа инициализирует прерывания и входит в бесконечный цикл, из которого периодически вызывается функция double_string_display, смотрите листинг программы:

void double_string_display (void)
{
// Инициализируем дисплей construct_display_fiel();
// Выполняется TOP
while (running_condition() == TOP_TURNING)
{
i = current_column/2;
if(current_column%2==l)
{
set_leds(LED_ALL_OFF);
}
else if(current_column%2==0)
{
if(mode==CLOCKWISE)
{
if(i<=(STRING_LENGTH1* 6))
set_leds((display_field_clock[i])&0x7F);
else
set_leds(LED_ALL_OFF);
}
else if(mode==ANTICLOCKWISE)
{
if(((STRING_LENGTH2* 6)-i)>=0)
set_leds((display_field_clock[(STRING_LENGTH2*6)-i])&0x7F); else 
}
}
}
// TOP не выполняется
while (rurming_condition () != TOP_TURNING)
{
// Отключить все светодиоды
set_leds(LED_ALL_OFF);
}
} /* doubletstring_display */
 

Нужный шаблон свечения на светодиодах (в соответствии с направлением вращения и с отображаемым столбцом) формирует функция set_leds. Функция construct_ display_function заполняет массив display_field_clock (в соответствии с текстом и направлением вращения). Значения таймера и тактовой частоты (для правильного отображения строк) изменяются прерываниями INTO, TIMER0 и TIMER1 (как и направление вращения). Каждый второй столбец дисплея оставляется пустым (чтобы столбцы не сливались из-за высокой скорости вращения волчка). Отношение пустых столбцов к отображаемым определяет ширину выводимых символов.

После изготовления волчка подключают батарейки и микроконтроллер программируется (при помощи интерфейса программирования ISP) кодом, который можно скачать с нашего Web-сайта. После программирования микроконтроллера кабель ISP убирают и включают питание. Раскрутите волчок и запустите его на ровной твердой поверхности. Вы увидите сообщения. Возможно, вам придется потренироваться в его раскручивании. Пусть волчок остановится, после чего закрутите его в другом направлении, и увидите другое сообщение. Не забудьте выключить питание, когда волчок не используется.

Откомпилированный исходный код (вместе с файлом MAKEFILE) и компоновку платы в программе EAGLE (и принципиальную схему) можно скачать по ссылке. Данная статья из книги "Занимательные проекты на базе микроконтроллеров tinyAVR".

P.S. Подобный проект — "Устройство рисования по воздуху"

 

Добавить комментарий


Защитный код
Обновить