Светодиодная вертушка
К очередному Новому Году смастерил ребенку на потеху. Идея не нова, принцип действия прост. Вращающиеся светодиоды зажигаются в определенный момент в нужном месте, формируя изображение. Для того, чтобы определить этот момент, в устройстве использован оптический датчик от старой колесной мышки, он позволяет определить начало круга. Можно использовать любой другой оптический датчик или датчик холла с дискретным выходом. Программно измеряется время полного оборота. Это время делится на количество "точек" по окружности. Получаем время, через которое нужно сменить состояние светодиодов. Таким образом, при изменении скорости вращения изображение остается на месте. Приводиться в движение старым электродвигателем. Если двигатель отключить и вращать руками, тоже будет работать. Я не хотел заморачиваться с системой передачи питания на вращающиеся элементы и поступил проще - батарейки вращаются вместе со всей схемой. Разумеется, такую систему нужно балансировать, поэтому и была предусмотрена возможность перемещать батарейный отсек ближе или дальше от центра вращения.
Цепи двигателя, выключатели и батареи на схеме не показаны.
Схему, печатные платы, прошивку и исходный код можно скачать здесь.
Исходный код:
#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<
см. также:
Додати коментар
Недавні записи
- 🇺🇦 FOC Board STM32F103RB 🧩
- STM32 Motor control SDK - керування оборотами мотора за допомогою потенціометра 📑
- Flask✙Gunicorn✙Nginx➭😎
- STM32 Motor control SDK - програмне керування обертам мотора
- STM32 Motor control SDK - як створити перший проект
- Vue SVG. Приклад побудови живого параметричного креслення
- Вимірювання моменту мотора
- Vue SVG - компонент. Приклад 📑
- Flask + Vue 🏁 Финальный пример 🏁
- Flask, CORS, JSON-файл. Пример#6
Tags
bldc brushless stm32 motor web html css flask atmega foc git java-script pmsm raspberry-pi python websocket mongodb esp8266 nodemcu st-link tim timer docker ngnix programmator ssd1331 ssd1306 wifi uart meteo bme280 bmp280 i2c gps mpu-6050 mpu-9250 sensors 3d-printer options usb barometer remap watchdog flash eeprom rtc bkp encoder pwm servo capture examples dma adc nvic usart gpio books battery dc-dc sms max1674 avr lcd dht11 piezo rs-232 rfid solar exti bluetooth eb-500 displays ethernet led smd soldering mpx4115a hih-4000
Архіви