Светодиодная вертушка
К очередному Новому Году смастерил ребенку на потеху. Идея не нова, принцип действия прост. Вращающиеся светодиоды зажигаются в определенный момент в нужном месте, формируя изображение. Для того, чтобы определить этот момент, в устройстве использован оптический датчик от старой колесной мышки, он позволяет определить начало круга. Можно использовать любой другой оптический датчик или датчик холла с дискретным выходом. Программно измеряется время полного оборота. Это время делится на количество "точек" по окружности. Получаем время, через которое нужно сменить состояние светодиодов. Таким образом, при изменении скорости вращения изображение остается на месте. Приводиться в движение старым электродвигателем. Если двигатель отключить и вращать руками, тоже будет работать. Я не хотел заморачиваться с системой передачи питания на вращающиеся элементы и поступил проще - батарейки вращаются вместе со всей схемой. Разумеется, такую систему нужно балансировать, поэтому и была предусмотрена возможность перемещать батарейный отсек ближе или дальше от центра вращения.
Цепи двигателя, выключатели и батареи на схеме не показаны.
Схему, печатные платы, прошивку и исходный код можно скачать здесь.
Исходный код:
#include
#include
#include
#include
#define POINTS 128
#define SYMB_COUNT 120 // !!! Не более POINTS !!!
const char symb[] = {
0b01111100,0b10000010,0b10000010,0b10000010,0b01000100,//С
0x00,0x00,0x00,0x00,0x00,
0b11111110,0b00010000,0b00010000,0b00010000,0b11111110, //H
0x00,0x00,
0b00011100,0b00100010,0b00100010,0b00100010,0b00011100, //о
0x00,0x00,
0b00111110,0b00101010,0b00101010,0b00010100,0b00000000, //в
0x00,0x00,
0b00111110,0b00001010,0b00001010,0b00000100,0b00111110, //ы
0x00,0x00,
0b00111110,0b00010000,0b00001000,0b00010000,0b00111110, //м
0x00,0x00,0x00,0x00,0x00,
0b11111110,0b10000000,0b10000000,0b10000000,0b11000000, //Г
0x00,0x00,
0b00011100,0b00100010,0b00100010,0b00100010,0b00011100, //о
0x00,0x00,
0b00000111,0b00101010,0b00110010,0b00100010,0b00111111, //д
0x00,0x00,
0b00011100,0b00100010,0b00100010,0b00100010,0b00011100, //о
0x00,0x00,
0b00111110,0b00010000,0b00001000,0b00010000,0b00111110, //м
0x00,0x00,
0b00000000,0b00000000,0b11110010,0b00000000,0b00000000, //!
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00
};
int symb_pos;
long int Rotation_time, Rotation_count;
void start_timer () {
int value;
value = 0xFFFF - Rotation_time / POINTS;
if (value > 0xFFFF - 10)
TCNT1 = 0xFFFF - 10;
else
TCNT1 = value;
}
ISR(INT1_vect) {
// Считаем кол тактов на дин оборот
Rotation_time = Rotation_count + TCNT0;
// Сбрасываем показания и запускаем таймер заново
Rotation_count = 0;
TCNT0 = 0x00;
// Запускаем таймер, отвечащий включение светодиодов
start_timer();
symb_pos = 0;
}
ISR(TIMER0_OVF_vect) {
Rotation_count +=255;
}
ISR(TIMER1_OVF_vect) {
start_timer();
PORTB = ~symb[symb_pos];
if (symb_pos < SYMB_COUNT)
symb_pos++;
}
int main( void )
{
// Настраиваем порт Светодиодов
DDRB = 255;
// Включаем подтягивающий резистор на ногу прерывания для инфракрасного датчика
PORTD |= (1<
см. также:
На предпоследней фото видно 3 штырька, для чего они? Еще есть перемычки что они делают?
Была затея связать устройство с компьютером чтобы, не меняя прошивки микроконтроллера изменять отображаемый текст. Для этого и были приспособлены эти 3 штырька. Но затея так и осталась в планах. Перемычки сделаны для отключения питания двигателя и светодиодов во время прошивки микроконтроллера.
Можете подсказать что это за штуковина на 4 фотографии (надпись HIGH)?
Компилирую Исходный код прошивки через Microsoft Visual Studio C++ 2008 пишет что библиотеки не найдены или не могут открыться. Когда я буду зашивать прошивку через программатор ошибка так и будет висеть или все зашьется ровно?
Недавні записи
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
- DC-DC для IGBT драйверів ізольований 2 W +15 -8 вольт
- U-FOC - Векторне керування безколекторними моторами
- FOC - своя реалізація векторного керування. Підбиваю підсумки 2022 року
Tags
raspberry-pi st-link bldc timer max1674 bluetooth eb-500 python ngnix rtc atmega servo avr pwm web tim uart remap brushless bme280 smd esp8266 eeprom bkp capture dht11 ethernet sensors websocket mongodb 3d-printer piezo rs-232 led css meteo i2c options exti html battery soldering bmp280 wifi mpu-9250 examples dma adc gpio sms motor solar hih-4000 lcd docker ssd1306 encoder dc-dc displays pmsm barometer watchdog java-script flask git gps mpu-6050 flash nvic books foc nodemcu programmator usb usart rfid mpx4115a stm32 ssd1331
Архіви