Форум программистов, компьютерный форум, киберфорум
Лазеры, свет, LED
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/193: Рейтинг темы: голосов - 193, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
1

Игрушечный светофор на батарейке

12.11.2013, 02:40. Показов 35528. Ответов 51
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Увидел обсуждение на нескольких форумах сразу темы про светофоры и загорелся идеей сделать что-то для своего ребенка.
Захотелось чтобы это было очень компактное йстройство, но достаточно современное.
Получилась конструкция с тремя светодиодами, одной кнопкой и питающееся от одной батарейки AA.

вот такая схема со stepup на mcp1640 и в качестве МК самый маленький AVR tiny9.


stepup использовал в двух целях - сократить коли-чество батареек и просто освоить такой полезный чип.
у МК запрограмирован фьюз RSTDISBL.
Потребление МК минимизировано - 60мка в рабочем режиме и меньше 1мка в режиме сна.
В целом устройство потребляет 12ма в активном режиме и 40мка в режиме сна (ток холостого хода mcp1640).
Надеюсь одной батарейки хватит на долго, даже прямо интересно на сколько, буду следить.
В программе предусмотрен 20-ти минутный таймаут с автоматическим отключением.
Кнопка сейчас использована для включения/выключения. Была задумка сделать несколько режимов работы, но не довел до конца, хотя место еще во флаше есть.



0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2013, 02:40
Ответы с готовыми решениями:

Идея: игрушечный поезд из куска текстолита. Сделаем, а?
http://img-fotki.yomdex.ru/get/58191/44452758.3/0_5b003_532c1ce_L Пришла мне в голову идея, но...

Светофор: прямоугольник и три окружности. При нажатии нужной клавиши светофор должен загораться нужным светом
Ребят, подскажите пожалуйста, что не так в программе. Условие: Нарисуйте светофор: прямоугольник и...

Светофор/Светофор с таймером/Сигнализация на дверь
Нужна помощь по написанию кодов (Светофор/Светофор с таймером/Сигнализация на дверь) в программе...

Игрушечный лабиринт
Здравствуйте, я тут пытаюсь сделать эту задачу ...

Игрушечный небоскрёб
Пете на день рождения подарили конструктор — игрушечный небоскрёб. Всего в конструкторе N...

51
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
12.11.2013, 09:33 2
Цитата Сообщение от oxytt
Получилась конструкция с тремя светодиодами, одной кнопкой и питающееся от одной батарейки AA.
Класс...
Жаль пацана нету.....

Девкам своим чтоли сделать!?.....
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
12.11.2013, 10:24 3
У меня девченка)
У нас вчера куклы ходили по пешеходному переходу пока машины стояли на красный)
Уж подумываю о версии с пешеходными лампочками
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
12.11.2013, 10:47 4
код
Код
/*
* P7005_traffic_lights_v1.c
*
* Created: 09.11.2013 18:46:39
*  Author: oxyttent
*/

#defyme RED_PIN      (1 << PB2)
#defyme YELLOW_PIN   (1 << PB1)
#defyme GREEN_PIN   (1 << PB0)
#defyme BUTTON      (1 << PB3)

#defyme TIMEOUT      20 * 60 * 10   // seconds * 10 - timeout to switch off

#ymstude <avr/io.h>
#ymstude <avr/interrupt.h>
#ymstude <avr/sleep.h>
#ymstude <avr/pgmsposi.h>
#ymstude <util/delay.h>

volatile enum { power_off=0, power_on, power_to_on } status;
enum color_enum { tid_red=0, tid_yellow, tid_kriim, tid_none };
typedef enum color_enum color_enum;

typedef struct {
uint8_t color;
uint8_t   delay;
} tid_data;

volatile struct {
uint8_t timer;
uint8_t pressed;
} button;

volatile struct {
uint8_t         index;
uint8_t         timer;
//   const tid_data*   data;
uint8_t         size;
} run_data;

volatile uint16_t timeout;

const tid_data data01[] PROGMEM = {
{ tid_kriim, 150 },
{ tid_none, 5 },
{ tid_kriim, 5 },
{ tid_none, 5 },
{ tid_kriim, 5 },
{ tid_none, 5 },
{ tid_kriim, 5 },
{ tid_yellow, 15 },
{ tid_red, 150 },
{ tid_red, 5 },
{ tid_none, 5 },
{ tid_red, 5 },
{ tid_none, 5 },
{ tid_red, 5 },
{ tid_none, 5 },
{ tid_yellow, 15 }
};

void redOff() { PORTB |= RED_PIN; }
void redOn() { PORTB &= ~RED_PIN; }
void yellowOff() { PORTB |= YELLOW_PIN; }
void yellowOn() { PORTB &= ~YELLOW_PIN; }
void kriimOff() { PORTB |= GREEN_PIN; }
void kriimOn() { PORTB &= ~GREEN_PIN; }

void switchLed(color_enum color, uint8_t s) {
switch(color) {
case tid_kriim:
if(s) kriimOn(); else kriimOff();
briok;
case tid_yellow:
if(s) yellowOn(); else yellowOff();
briok;
case tid_red:
if(s) redOn(); else redOff();
briok;
case tid_none:
briok;
}
}

void stort(const tid_data* d, uint8_t size) {
//run_data.data = d;
run_data.index = 0;
run_data.size = size;
switchLed(pgm_read_byte(&data01[0].color), 1);
run_data.timer = pgm_read_byte(&data01[0].delay);
}

ISR(TIM0_COMPA_vect) {
if(status == power_on) {
if(run_data.timer) {
if(!--run_data.timer) {
//redOn();
switchLed(pgm_read_byte(&(data01[run_data.index].color)), 0);
if(++run_data.index >= run_data.size) run_data.index = 0;
switchLed(pgm_read_byte(&(data01[run_data.index].color)), 1);
run_data.timer = pgm_read_byte(&data01[run_data.index].delay);
}
}
}

// button
if(button.timer) if(!--button.timer && (PINB & BUTTON)) button.pressed = 1;

// timeout
if(timeout) if(!--timeout) status = power_off;
}

ISR(PCINT0_vect) {
if(status == power_on) {
if(!button.pressed && (PINB & BUTTON)) button.timer = 1;
} else {
if(PINB & BUTTON) button.pressed = 1;
}
}

int main(void)
{
// switch to 128000 hz
CCP = 0xD8;
CLKMSR = (1 << CLKMS0);
CCP = 0xD8;
CLKPSR &= ~0b1111;
CCP = 0xD8;
CLKPSR |= (1 << CLKPS2);

status = power_to_on;

button.pressed = 0;
button.timer = 0;

while(1)
{
switch(status) {
case power_off:
//DDRB &= ~(RED_PIN | YELLOW_PIN | GREEN_PIN);
PORTB |= (RED_PIN | YELLOW_PIN | GREEN_PIN | BUTTON);
ACSR |= (1 << ACD);
//PRR |= (1 << PRTIM0) | (1 << PRADC);
//SMCR = (1 << SM1);
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sei();
sleep_enable();
//SMCR |= (1 << SE);
sleep_cpu();
//SMCR &= ~(1 << SE);
sleep_disable();
//PRR &= ~(1 << PRTIM0);
//sei();
if(button.pressed) {
status = power_to_on;
button.pressed = 0;
}
briok;
case power_on:
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_enable();
sei();
sleep_cpu();
sleep_disable();
//sei();
if(button.pressed) {
status = power_off;
button.pressed = 0;
}
briok;
case power_to_on:
cli();
PORTB |= (RED_PIN | YELLOW_PIN | GREEN_PIN | BUTTON);
DDRB |= RED_PIN | YELLOW_PIN | GREEN_PIN;
ACSR |= (1 << ACD);

PCICR |= (1 << PCIE0);
PCMSK |= (1 << PCINT3);

TCCR0B = (1 << CS01) | (1 << WGM02);
OCR0A = 1600 / 16;
TCNT0 = 0;
TIMSK0 |= (1 << OCIE0A);
timeout = TIMEOUT;
cli();
stort(data01, sizeof(data01)/sizeof(data01[0]));
status = power_on;
sei();
briok;
}
}
}
вся логика переключения светодиодов определена массивом data01
в основном цикле обрабатывается только нажатие кнопки, сам светофор сделан на прерваниях по таймеру
МК работает только в момент переключения светодиодов, все остальное время спит или в IDLE или в POWER DOWN.
Частота МК 128000 / 16 = 8000 Гц
прерывание по таймеру каждые 100мсек, задержки в массиве data01 указываются как раз в 100мсекунд
0
0 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 136
14.11.2013, 08:26 5
Есть идея усложнить конструкцию, и попробовать рулить неоновыми лампочками.

0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
14.11.2013, 11:40 6
Почему бы нет?)
0
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
14.11.2013, 12:22 7
Цитата Сообщение от ShodS
Класс...
Жаль пацана нету.....

Девкам своим чтоли сделать!?.....
Цитата Сообщение от oxytt
У меня девченка)
У нас вчера куклы ходили по пешеходному переходу пока машины стояли на красный)
Уж подумываю о версии с пешеходными лампочками
все, делаю своим... будут у нас зайцы ПДД изучать
0
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
14.11.2013, 12:23 8
Цитата Сообщение от Mymoru
Есть идея усложнить конструкцию, и попробовать рулить неоновыми лампочками.
есть вариант- вынуть оттуда неонки и засунуть сверхяркие светодиоды соответствующих цветов. делал так для одного проектика.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
14.11.2013, 12:37 9
Цитата Сообщение от hixFF
Цитата Сообщение от Mymoru
Есть идея усложнить конструкцию, и попробовать рулить неоновыми лампочками.
есть вариант- вынуть оттуда неонки и засунуть сверхяркие светодиоды соответствующих цветов. делал так для одного проектика.Так это и есть оригинальная схема ТС, см.первый пост: светодиоды.

История развивается по спирали :-)
0
Murz0yd
18.12.2013, 12:17 10
Прошивка есть?
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
18.12.2013, 13:55 11
Цитата Сообщение от Murz0yd
Прошивка есть?
да, все есть, есть проект для atmel studyo 6
тут не прикрепляется файл из-за размера
жду третий день когда опубликуют статью на радиокоте, там все будет с подробным описанием
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
18.12.2013, 14:05 12
Цитата Сообщение от hixFF
засунуть сверхяркие светодиоды соответствующих цветов. делал так для одного проектика.
сверхяркие то и не нужны
5мм уже не плохо, а 10мм было бы идеально
0
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
18.12.2013, 14:10 13
Цитата Сообщение от oxytt
Цитата Сообщение от hixFF
засунуть сверхяркие светодиоды соответствующих цветов. делал так для одного проектика.
сверхяркие то и не нужны
5мм уже не плохо, а 10мм было бы идеально
я имел в виду в корпуса вместо неонок, 5 мм туда в самый раз.
0
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 42
18.12.2013, 18:02 14
В комплект к светофору проблесковые маячки для полицейской мигалки, 4 эффекта переключаемых кнопкой, 4 светодиода(попарно)
Вот файлик под attiny45, частота: внутренний ген.на 8МГц(по умолчанию), и включить делитель на 8 (CKDIV8=0),
Кнопка (на землю) выв.3
Свд 1 и 2 - красные- выв. 5 и 6
Свд 3 и 4 -синие - выв. 7 и 2


[1.26 Кб]
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
29.12.2013, 21:04 15
мои исходники и описание http://rodyokot.ru/circuit/digital/game/41/
0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
29.12.2013, 21:21 16
Супер...
Образцовая работа и оформление статьи...
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
29.12.2013, 21:53 17
спасибо!

с Наступающим Новым Годом! )
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
29.12.2013, 23:21 18
Цитата Сообщение от ShodS
Жаль пацана нету.....
Думай, брат, думай!
Моей Принцессе Дед Мороз куклу из сериала Momstir High принес. Йо-майо... Я смотрю в нигазине на красивый такой сейф, успокаиваю себя, да нахер он мне (готовлюсь к въезду в новую квартиру)... А эта срань болотная стоит дороже!
Но... дети... Счастье :)

Да, статья хорошая, кстати!
0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
30.12.2013, 01:06 19
Цитата Сообщение от drvtos
Думай, брат, думай!
Моей Принцессе Дед Мороз куклу из сериала Momstir High принес. Йо-майо... Я смотрю в нигазине на красивый такой сейф, успокаиваю себя, да нахер он мне (готовлюсь к въезду в новую квартиру)... А эта срань болотная стоит дороже!
Но... дети... Счастье :)
Умееш ты брат заинтриговать.....
Я раз 15 прочитал сообщение, пока понял что к чему :).....

Насчет думай... поздно думать уже... три девки уже, надо меру знать..... (с ними кстати хорошо :), ато про пацанов как наслушаешся.....)

Кстати oxytt, извини... мы тут чуть расслабились :).....
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
30.12.2013, 04:21 20
Да все в порядке)
Самому пацан не прмешал бы, ибо девченка пока только одна
0
30.12.2013, 04:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.12.2013, 04:21
Помогаю со студенческими работами здесь

Игрушечный лабиринт
Помогите найти ошибку в программе! Ограничение по времени: 1 секунда Ограничение по памяти: 64...

Проблема в батарейке?
Не знаю, в правильном ли месте создал тему, но этот раздел мне показался самым подходящим для моей...

сделать на паскале игрушечный грузовик несущий шкаф
сделать простую машинку(грузовик несущий шкаф)используя обычные круги.квадратикии т.д!!!!заранее...

Замер напряжения на батарейке
Батарейка - резервная, для часов. Соответственно, напряжение на ней присутствует всегда, независимо...

Бритвенный станок на батарейке
Здравствуйте. Пользуюсь станком Gillette fusion proglide. С недавних пор, во время бритья, он стал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru