roboforum.ru

Технический форум по робототехнике.
Текущее время: 01 май 2025, 22:59

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Рюшечки для робота
СообщениеДобавлено: 21 июл 2007, 17:01 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2007, 19:23
Сообщения: 1058
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК
Давайте поделимся всякими рюшечками - мелкими приятными, пусть почти бесполезными функциями конструкций.
НАПРИМЕР
С целью увеличения интересности подпольно спаянного и в тайне запрограммированного робота использую проигрывание мелодий AVR-кой на пьезопищалку от китайских игрушек или будильников.
Пищалка подключается плюсиком через керамический конденсатор 0,47 мкФ к "+" питания (VCC) а минусовой лапкой - к ноге МК.
Этот традиционный способ, упомянтый еще в книге Предко, наверное обусловлен тем, что старые модели контроллеров могли выдерживать втекающие токи бОльшие, чем вытекающие.
В современных мегах, вроде бы одинаковые (не берусь утверждать на 100%), поэтому можно плюсом пищалки к ноге МК, а минусом через конденсатор - на землю.
Если использовать динамик, нужно будет юзать транзистор.
Частоты нот первой октавы в герцах:
до - 130,8
до# - 138,6
ре - 146,8
ре# - 155,6
ми - 164,8
фа - 174,6
фа# - 185,0
соль - 196,0
соль# - 207,7
ля - 220,0
ля# - 233,1
си - 246,9
Частоты одинаковых нот соседних октав отличаются в два раза. На слух на пищалке более приятно звучат ноты второй и третьей октав.
Генерацию можно осуществить в цикле for (cvarv):
Код:
...
 for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1911);}; //до
 for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1702);}; //ре
 for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1517);}; //ми
 for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1432);}; //фа
 for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1276);}; //соль  
 for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1136);}; //ля
 for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1012);}; //си
...

При этом частоты нужно пересчитать в периоды задержек между инвертированием сигнала на лапке контроллера.
Например для ноты до второй октавы частота равна 130,8*2=261,6 Гц. Период колебаний равен 1/261,6=3,8227 миллисекунд.
Сигнал на ножке МК нужно изменять через промежуток времени в 2 раза меньший, т.е. 3,8227/2=1,911 миллисекунд или
1911 микросекунд.
Выражение в условии выполнения цикла i<100 определяет длительность проигрывания ноты, т.е. число полупериодов колебаний.
Для звучания ноты до 0,5 секунды нужно примерно 0,5/0,001911=262 раза изменить сигнал на лапе, что и следует указать в операторе цикла.
Разработчики cvarv рекомендуют отключать прерывания перед использованием функций задержек delay_us и delay_ms (они используют сторожевой таймер).
Последняя, по-моему, реализована кривовато, т.к. задержи больше, чем задаются, а первая - потому что длительность нельзя передавать как параметр в процедуру (должна быть постоянной), а очень хочется.
Для подачи звуковых сигналов можно использовать и ШИМ, чтобы разгрузить контроллер.
PS. Звук очень удобно юзать для отладки и диагностики.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 июл 2007, 23:17 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
На radiokot.ru есть разные мелодии для таких вот писчалок. Тема кажись там называется звонок патриот.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 июл 2007, 09:23 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2007, 19:23
Сообщения: 1058
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК
Очень удобно переделывать мелодии для старых телефонов, поддерживающих нотную запись мелодий.
Кучка там:
http://sotovaya.com/notes-nokia.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 июл 2007, 11:38 
Не в сети
Аватара пользователя

Зарегистрирован: 04 май 2007, 17:56
Сообщения: 50
Откуда: Москва
господа , а может быть возьмем сразу на уровень выше..скажем из это сделать голосовой модуль для робота..http://pol-sem.narod.ru/polymuson/polymuson.htm  :lol:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 июл 2007, 11:42 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
ковокс никогда не умрёт =)

а вобще это уже не рюшечка к девайсу а отдельный самостоятельный девайс


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 июл 2007, 19:11 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2007, 19:23
Сообщения: 1058
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК
Неплохая ссылочка! А чего, очень даже неплохо, если робот будет ойкать при столкновении с препятствием или ням-ням просить при разрядке аккумулятора.  :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 июл 2007, 03:29 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Вот вам еще ссылочка на затравку: прямой цифровой синтез (ака DDS) на АВР и ковоксе!

http://www.myplace.nu/avr/minidds/index.htm

А голос - это надо чтоб кто-то сел и надиктовал все русскоязычные слоги хотя-бы в двух-трех интонациях (говорится слово и из него вырезается слог) - тогда будет более-менее связная речь. Пишем все это дело на SD подходящего объема - и дело в шляпе!  :wink:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 июл 2007, 16:06 
Не в сети
Аватара пользователя

Зарегистрирован: 04 май 2007, 17:56
Сообщения: 50
Откуда: Москва
SSG писал(а):
Неплохая ссылочка! А чего, очень даже неплохо, если робот будет ойкать при столкновении с препятствием или ням-ням просить при разрядке аккумулятора.  :)

угу , я уже взял на вооружение схему, а также разные сэмплы-фразы Бэндера Би Родригеза думаю будет весело  :lol:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Рюшечки для робота
СообщениеДобавлено: 13 фев 2010, 09:44 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Вот эта вещица поинтереснее будет, там и исходники есть. Минимум деталей, максимум возможностей.
http://elm-chan.org/works/sd8p/report.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Рюшечки для робота
СообщениеДобавлено: 13 фев 2010, 11:56 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
SSG писал(а):
Давайте поделимся всякими рюшечками

Вот моя рюшечка :)
Мега8+транзистор+динамик от нокии.


Добавлено спустя 8 минут 35 секунд:
Вот ещё одна :)
http://roboforum.ru/viewtopic.php?f=88&t=6729&start=240

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Рюшечки для робота
СообщениеДобавлено: 15 фев 2010, 00:28 
Не в сети
Аватара пользователя

Зарегистрирован: 04 окт 2007, 16:11
Сообщения: 1027
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел
"Мурка" - для робота самое то! :)
Еще и упал в конце - вобще круто! :Yahoo!:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Рюшечки для робота
СообщениеДобавлено: 23 фев 2010, 23:44 
Не в сети
Аватара пользователя

Зарегистрирован: 04 окт 2007, 16:11
Сообщения: 1027
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел
Код:
void Beep()
{
long i;
for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1911);}; //до
  for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1702);}; //ре
  for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1517);}; //ми
  for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1432);}; //фа
  for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1276);}; //соль 
  for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1136);}; //ля
  for (i=1;i<100;i++) {PORTD.7=~PIND.7; delay_us(1012);}; //си   

while(1);
}

Генерацию осуществляю такой процедурой, но что то неиграет.
Правельно ли я ее произвожу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Рюшечки для робота
СообщениеДобавлено: 24 фев 2010, 00:11 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
Вот код мурки :)
Вызываешь функцию music(); и всё заработает...
Код:
flash char note[47][2]=
    {
   157,50,
   157,100,
   159,25,
   157,25,
   143,50,
   157,100,
   0,25,
   170,50,   
   191,100,
   202,25,
   191,25,
   202,50,
   227,100,
   0,50,
   114,50,
   114,100,   
   120,25,
   114,25,
   101,50,
   114,100,
   120,25,
   114,25,
   101,100,

   96,50,
   100,50,
   114,50,
   0,25, 
   120,25,
   100,50,
   114,50,
   0,100, 
   114,50,
   127,50,
   143,50,
   152,50,
   127,50,
   143,50,
   0,100,
   152,50,   
   152,50,
   127,50,
   143,50,
   152,50,
   170,100,
   202,25,
   191,25,
   227,100 
   };
   
///////////////////////////////////////////////////////////
music()
{   
      for(i=0; i<23; i++)
        {
        OCR2=note[i][0];
        delay_ms(note[i][1]);     
        }
      OCR2=0;   
}
///////////////////////////////////////////////////////////

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Рюшечки для робота
СообщениеДобавлено: 24 фев 2010, 00:19 
Не в сети
Аватара пользователя

Зарегистрирован: 04 окт 2007, 16:11
Сообщения: 1027
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел
Динамик надоно на ножку ШИМ-а заводить, я правильно понял?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Рюшечки для робота
СообщениеДобавлено: 24 фев 2010, 00:37 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
На выход второго таймера (ОС2) в Меге8 это PB3.
Настройка таймера 2:
Код:
ASSR=0x00;
TCCR2=0b00011010;
TCNT2=0x00;
OCR2=0x00;

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO