Анимированная картина "Ретро автомобиль"
Ваше мнение об этом проекте будет полезно его автору. Приглашаем Вас присоединиться к его обсуждению на форуме.
Анимированная картина "Ретро автомобиль"
В этой работе мы заставили "ожить"изображение старого автомобиля на картине в рамке.
Вот как это выглядит:
По всем четырем сторонам рамки наклеены светодиодные полоски, имеющие напряжение питания 12 В.
Между собой эти полоски спаиваются параллельно проводами с обратной стороны рамки
и припаиваются к разъему питания для подключения сетевого адартера (любой сетевой адаптер с выходным напряжением 12 В, током не менее 0,3 А).
К выводам этого же разъема питания припаиваются провода питания платы микроконтроллера Arduino.
Использованная нами плата AT-Mini328
имеет диапазон напряжений питания 9 ... 30 В, что вполнен допускает ее питание тем же напряжением, что и у светодиодных полосок.
На данном этапе важно соблюдать правильную полярность источника питания при подключении как к светодиодам рамки, так и к плате Arduino.
Светодиодные полоски создают лишь общую подсветку картины, а вот световая сцена создается отдельными светодиодами, смонтированными в следующих местах картины:
- два светодиода установлены в фары автомобиля, включены параллельно
- по одному светодиоду встроены в боковые фонари машины (указатели поворота)
- по шесть светодиодов установлены на ободе переднего и заднего правых колес, при этом светодиоды, имеющие одинаковое расположение на переднем и заднем колесе соединены параллельно, что дает нам шесть пар светодиодов на колесах.
Мы выбради выводные 3 мм светодиоды белого света, поэтому монтировали их в отверстия диаметром 3 мм, просверленные в нужных местах картины
С обратной стороны они закреплены клеем при помощи термоклеевого пистолета. Монтаж проводов между светодиодами и платой Arduino - навесной.
И в сборе обратная сторона картины выглядит так:
Использование портов ввода/вывода платы Arduino:
Все используемые порты работают как порты вывода.
- Порт D0 - левый указатель поворота
- Порт D1 - правый указатель поворота
Колеса:
- Порт D2-D7 - светодиоды на ободах колес (D2 - верхний светодиод, все последующие - далее по часовой стрелке)
Фары:
Для фар мы решили применить плавное управление яркостью их свечения, поэтому мы их подключили к порту, имеющему функцию ШИМ регулятора (PWM). Для этого был выбран порт D10.
Вот код программы, загруженной в плату Arduino (его, конечно можно и нужно оптимизировать, но свою задачу он выполняет полностью):
/*
Retro
Программа анимации картины со старым автомобилем
*/
int I = 0;
void setup() {
pinMode(13, OUTPUT);
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(10, OUTPUT);
//pinMode(11, OUTPUT);
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
}
void loop() {
for (int i=0; i <= 255; i++){
analogWrite(10,i);
delay(5);
}
for (int i=255; i >= 0; i--){
analogWrite(10,i);
delay(5);
}
for (int i=0; i <= 255; i++){
analogWrite(10,i);
delay(5);
}
for (int i=255; i >= 0; i--){
analogWrite(10,i);
delay(5);
}
for (int i=0; i <= 255; i++){
analogWrite(10,i);
delay(5);
}
for (int i=255; i >= 0; i--){
analogWrite(10,i);
delay(5);
}
for (int i=0; i <= 255; i++){
analogWrite(10,i);
delay(5);
}
delay(1000);
digitalWrite(0, HIGH);
delay(500);
digitalWrite(0, LOW);
delay(500);
digitalWrite(0, HIGH);
delay(500);
digitalWrite(0, LOW);
delay(500);
digitalWrite(0, HIGH);
delay(500);
digitalWrite(0, LOW);
delay(500);
digitalWrite(0, HIGH);
delay(500);
digitalWrite(0, LOW);
delay(500);
digitalWrite(0, HIGH);
delay(500);
digitalWrite(0, LOW);
delay(500);
digitalWrite(0, HIGH);
delay(500);
digitalWrite(0, LOW);
delay(500);
digitalWrite(1, HIGH);
delay(500);
digitalWrite(1, LOW);
delay(500);
digitalWrite(1, HIGH);
delay(500);
digitalWrite(1, LOW);
delay(500);
digitalWrite(1, HIGH);
delay(500);
digitalWrite(1, LOW);
delay(500);
digitalWrite(1, HIGH);
delay(500);
digitalWrite(1, LOW);
delay(500);
digitalWrite(1, HIGH);
delay(500);
digitalWrite(1, LOW);
delay(500);
digitalWrite(1, HIGH);
delay(500);
digitalWrite(1, LOW);
delay(500);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
delay(1000);
for (int i=1; i<=10; i++)
{
turn(100/i,10);
}
turn(10,10);
for (int i=10; i>=1; i--)
{
turn(100/i,10);
}
}
void turn(int spd, int count)
{
for (int ii=0; ii <=count; ii++)
{
for (int i=2; i <=8; i++){
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(i,HIGH);
delay(spd);}
digitalWrite(7,LOW);
}
}