Светодиодная вертушка
К очередному Новому Году смастерил ребенку на потеху. Идея не нова, принцип действия прост. Вращающиеся светодиоды зажигаются в определенный момент в нужном месте, формируя изображение. Для того, чтобы определить этот момент, в устройстве использован оптический датчик от старой колесной мышки, он позволяет определить начало круга. Можно использовать любой другой оптический датчик или датчик холла с дискретным выходом. Программно измеряется время полного оборота. Это время делится на количество "точек" по окружности. Получаем время, через которое нужно сменить состояние светодиодов. Таким образом, при изменении скорости вращения изображение остается на месте. Приводиться в движение старым электродвигателем. Если двигатель отключить и вращать руками, тоже будет работать. Я не хотел заморачиваться с системой передачи питания на вращающиеся элементы и поступил проще - батарейки вращаются вместе со всей схемой. Разумеется, такую систему нужно балансировать, поэтому и была предусмотрена возможность перемещать батарейный отсек ближе или дальше от центра вращения.
Цепи двигателя, выключатели и батареи на схеме не показаны.
Схему, печатные платы, прошивку и исходный код можно скачать здесь.
Исходный код:
#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 пишет что библиотеки не найдены или не могут открыться. Когда я буду зашивать прошивку через программатор ошибка так и будет висеть или все зашьется ровно?
Недавні записи
- Text to speech. Українська мова
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
Tags
docker sensors rtc led timer wifi remap sms css websocket mongodb bme280 rfid bluetooth esp8266 nodemcu bkp piezo bmp280 i2c mpu-6050 encoder examples avr brushless ngnix nvic displays bldc java-script pmsm barometer pwm lcd ethernet stm32 raspberry-pi capture usart gpio exti atmega meteo solar smd dma adc eeprom eb-500 flask python ssd1306 uart options flash mpx4115a html gps st-link 3d-printer servo dc-dc foc git books battery hih-4000 watchdog dht11 web tim programmator ssd1331 mpu-9250 usb rs-232 motor max1674 soldering
Архіви