Говорящий Arduino
- Войдите на сайт для отправки комментариев
Пт, 21/03/2014 - 10:29
Здравствуйте! Недавно пришла идея сделать себе уникальный звонок на дверь. Стал искать информацию в интернете и нашел как с помощью аруино через динамик выводить звуки. Скажите пожалуйста, а возможно ли что бы через динамик выводились не просто набор тональностей, а к примеру слово "привет"? Заранее большое спасибо!
конечно
самое простое - сделать воспроизведение файлов .wav или .mp3 с SD карты. .WAV в принципе можно прямо ардуиной воспроизводить, а для mp3 нужно купить специальный шилд
Мне нужен самый дешевы вариант! Желательно без всяких шилдов, средствами самой ардуино. Возможно ли как то генерировать слова? Есть у кого то идеи?
wav воспроизводите ардуиной. звук заранее конечно записываться будет а не ардуина по набитому тексту будет генерировать звуки
А куда должен записываться звук??? Нужно для этого что то покупать?
http://voice-chip.ru/waytronic4.htm
В самом минимуме вам нужна будет SD карта и динамик
лучше конечно любой шилд с разьемом под карту, можно припаяться напрямую к карточке или что лучше найти micro карту с адаптером под простую SD. Припаяться к адаптеру и он станет слотом для вставки micro
Генерировать голос по словам ардуино не в состоянии. Может воспроизводить только заранее записанные звуки, слова, предложения
rilax, самый экономичный вариант -сделать всё самому :) Вот например вообще без ардуино, на тиньке. Я повторял -работает! http://radioded.ru/skhema-na-mikrokontrollere/wav-pleer-na-mikrokontroll...
В самом минимуме вам нужна будет SD карта и динамик
лучше конечно любой шилд с разьемом под карту, можно припаяться напрямую к карточке или что лучше найти micro карту с адаптером под простую SD. Припаяться к адаптеру и он станет слотом для вставки micro
Очень интересная идея!
Вот у меня есть такая карта, получается мне нужно просто припоять проводки ко всем выходам на ней? И как мне ее подкючить к ардуино?
rilax, самый экономичный вариант -сделать всё самому :) Вот например вообще без ардуино, на тиньке. Я повторял -работает! http://radioded.ru/skhema-na-mikrokontrollere/wav-pleer-na-mikrokontroll...
Мне нужно сделать что то подобное, только на arduino! Что бы при разных условиях проигрывался один из 3 файлов к примеру.
https://www.youtube.com/watch?v=8Zo9EPe-aTU
https://www.youtube.com/watch?v=cCTzxiwZyXY
вот эта тема может вам помочь http://chipenable.ru/index.php/programming-avr/item/212-rabota-s-sd-kart...
еще для образования можете тут посмотреть http://www.getchip.net/posts/087-attiny2313-sd-card-talking-device/
http://tubethe.com/watch/QjrAGShRw7g/attiny2313-sd-card-talking-device.html
мне вот этот плеер нравиться( как раз под мою задумку) только ссылка на скетч бракованная. может у кого есть, скиньте пожалуйста
Можно и чтобы текст читала. Это не так сложно как кажется. Надо только разыскать библиотеку фонем, от какого-нибудь древнего спектрума или ямахи и прошить её в progmem. после чего тупо в цикле на каждую букву или слог выводить соответствующую фонему. Когда-то давно-давно делал такой матюгальник для Ямахи - "сказочник" .. вполне сносно читал текст. Любимая шутка позже у моих коллег была тайком поставить этот матюгальник соседу на PC .. чел включает утром комп, тычет кнопку, а тот ему в ответ: "отойди, видишь ещё занят!" .. позже, знакомые, так в НГУ одно время шугали студентов от компов на переменках одно время, дабы не мешали операторам.. :)
Лучше искать слоговую фонемную библиотеку. Русский язык слоговый, и их не так много .. 256. Но, фонемы должны быть разные: ударный слог, безударный, окончание .. выбираем ту, которая подходит по соседнему контексту. А можно и самому начитать. Делов-то.
Для воспроизведения текстов можно сначала создать файлы WAV, mp3 с помощью синтезатора речи, их достаточно мого, такие как:
1. www.ivona.com/en – Ivona - онлайн синтезатор речи для русского языка. Голосовые движки очень высокого качества. Несколько голосов (мужской и женский). Максимальный размер текста - 250 символов.
2. www.acapela-group.com – Acapela - бесплатная онлайн-программа синтеза речи для русского языка. Синтез речи очень высокого качества. Есть мужские и женские голоса. Максимальный размер текста - 300 символов.
3. translate.google.com – Google Переводчик - бесплатный онлайн-переводчик с поддержкой синтеза речи для русского языка. Автоматически определяет язык. Может читать довольно длинные тексты на русском языке.
4. www.linguatec.de/onlineservices/voice_reader/ – Linguatec - бесплатный синтезатор речи для русского языка онлайн. Синтез речи среднего качества. Максимальный размер текста - 250 символов.
5. text-to-speech.imtranslator.net – imTranslator.net - бесплатные голосовые движки для русского языка онлайн. Синтез речи нормального качества. Максимальный размер текста - 1000 символов.
Также для озвучивания робота есть интересный синтезатор речи с различными эффектами, три женских голоса и один мужской:
http://www.oddcast.com/home/demos/tts/tts_example.php?sitepal
rilax, самый экономичный вариант -сделать всё самому :) Вот например вообще без ардуино, на тиньке. Я повторял -работает! http://radioded.ru/skhema-na-mikrokontrollere/wav-pleer-na-mikrokontroll...
пару вопросов не понятно
1) не нашел по ссылке скетч, только не понятные файлы( с тинько вообще не связывался--только блинк)
2) как мне тиньку 85 прошить либо через ардуино(ардуино иде уже подладил и 2313 прошивал под блинк)
помогите разжевать мне моно версию и через ардуино прошить( в моно версии фьюзы вроде можно не трогать)
а на третью задачу у меня голова уже лопнула(и клик бутон мне скидывали и посылали бутон перечитывать) нужно при нажатии на кнопку один раз проигрывался первый файл и молчек. если два раза нажать второй фаил
PS извеняюсь за вопросы, нереально одновременно ардуино и тини изучать, я то думал одинаковые, а нет
http://wiki.amperka.ru/конспект-arduino:счетчик-нажатий
вот тут разжованно про счетчик, отсюда пытаюсь достать кусочек скетча
1
собираю говорящую сигналку
001
#include <SD.h> // нужно включить архив SD
002
#define SD_ChipSelectPin 4 // с использованием цифрового пин4 на ардуино нано 328
003
#include <TMRpcm.h> // также необходимо включить эту библиотеку...
004
005
TMRpcm tmrpcm;
// создать объект для использования в этом наброске
006
007
int
SW1;
// провод от сигналки
008
int
SW2;
// кнопка крякалки
009
int
SW3;
// задний ход
010
int
SHORT_BC=0;
//счетчик кратковременных нажатий
011
int
LONG_BC=0;
//счетчик длинных нажатий
012
int
LONG_BCA=0;
// счетчик самой длинной нажатий
013
014
015
long
START_BP_Millis = 0;
//точка начала отчета после нажатия
016
017
018
019
void
setup
()
020
{
021
022
pinMode(14,INPUT);
// провод сигналки
023
pinMode(15,INPUT);
// кнопка крякалка
024
pinMode(16,INPUT);
//провод заднего хода
025
026
027
tmrpcm.speakerPin = 9;
// 9 на Уно, Нано, и т. д.
028
029
if
(!SD.begin(SD_ChipSelectPin)) {
// см. если карта
030
// присутствует и может быть инициализирован:
031
return
;
// ничего не делаем если не больше
032
}
033
034
tmrpcm.volume(1);
035
tmrpcm.play(
"1.wav"
);
//ооо новый аккумулятор
036
}
037
038
039
040
041
void
loop
()
042
{
043
SW1=digitalRead(14);
044
SW2=digitalRead(15);
045
SW3=digitalRead(16);
046
{
047
if
(digitalRead(14)==HIGH)
//если нажать кнопку ...
048
{{
049
tmrpcm.volume(1);
050
tmrpcm.play(
"2.wav"
);
//писк
051
}
052
START_BP_Millis-START_BP_Millis;
// начинаем отсчет длительности нажатия... с нуля
053
if
(millis() - START_BP_Millis < 500)
054
055
056
START_BP_Millis = millis();
// счетчик длительности нажатия обнулить для следуещего отсчета
057
058
SHORT_BC++;
// увеличить счетчик кратковременных нажатий
059
}
060
061
062
if
(millis() - START_BP_Millis >= 500)
// и удерживать 0,5 cекунды или больше...
063
{
064
START_BP_Millis = millis();
// счетчик длительности нажатия обнулить для следуещего отсчета
065
LONG_BC++;
// увеличить счетчик длинных нажатий
066
067
}
068
else
if
(millis() - START_BP_Millis >= 1500)
// и удерживать 0,5 cекунды или больше...
069
{
070
START_BP_Millis = millis();
// счетчик длительности нажатия обнулить для следуещего отсчета
071
LONG_BCA++; }
// увеличить счетчик длинных нажатий
072
}
073
074
075
if
(digitalRead(14)==HIGH)
//если нажать кнопку ...
076
{
077
078
if
( SHORT_BC==1)
//если одно короткое нажатие
079
tmrpcm.volume(1);
080
tmrpcm.play(
"2.wav"
);
//то играем файл машина закрыта
081
if
(SHORT_BC==2)
// если два коротких нажатий
082
083
tmrpcm.volume(1);
084
tmrpcm.play(
"3.wav"
);
//то играет файл машина закрыта
085
if
(SHORT_BC>=3)
//если три раза и больше
086
tmrpcm.volume(1);
087
tmrpcm.play(
"4.wav"
);
//то играет файл
088
if
(LONG_BC>=1);
089
tmrpcm.volume(1);
090
tmrpcm.play(
"5.wav"
);
//паника
091
092
}
093
094
095
096
if
(SW1 == LOW && tmrpcm.isPlaying()==0)
097
{tmrpcm.volume(1);
098
tmrpcm.play(
"6.wav"
);}
//файл крякалки
099
delay(10000)
//пауза пока не сыграет крякалка
100
101
if
(SW2 == LOW && tmrpcm.isPlaying()==0)
//if SW2 pressed then play file "4.wav"
102
{tmrpcm.volume(1);
103
tmrpcm.play(
"7.wav"
);
//файл2 моя машина едет назад
104
delay(15000)}
// останавливаем программу на 15 сек, пока не проиграет файл
105
if
(SW3 == LOW)
//if SW3 pressed then play file "5.wav"
106
{tmrpcm.volume(1);
107
tmrpcm.play(
"8.wav"
);
108
delay(15000)}
//останавливаем программу на 15 сек, пока играет файл
109
110
111
}
112
113
delay(3000)
114
//сдесь скорее всего функция делай 3 сек
115
//обнулить переменные
116
117
118
119
120
компилятор ругается сна строчку если нажата кнопка 2, не пойму почему, строчка копия если нажата кнопка один
на 101 строчку ругается
А ошибка в 99, 104, 108.
PS. 113 забыл.
так это же пауза программы, что бы успела музыка сыграть
Ага, а точку с запятой для паузы ставить не надо? Это что-то новое в "C".
точки понаставил, тепенрь со скобками разобраться не могу, скетч не умещается на дисплей целиком
помогите шимировать проигрываемый файл с частотой 1кгц , что бы громче играла, по принципу мегафона, хочу на праздники закончить
Убери последнюю delay. Она вне функции.
с функциями разобрался, там пару скобок в конце не хватало. теперь решил что ардуино большая будет в размерах, я так понимаю что бы переписать пот аттини 85, достаточно 43-45 строчку переписать. только колво ножек моловато(4 на флешку, два на питание, один на провод ос сигналки, и один на кнопку крякалки)
вот переделал маленько, пока только под нано, пришлось ножки переименовать, у нано нет 13-15 ножек. играет только пятый файл приблизительно каждые 10 сек
001
#include <SD.h> // нужно включить архив SD
002
#define SD_ChipSelectPin 4 // с использованием цифрового пин4 на ардуино нано 328
003
#include <TMRpcm.h> // также необходимо включить эту библиотеку...
004
005
TMRpcm tmrpcm;
// создать объект для использования в этом наброске
006
007
int
SW1;
// провод от сигналки
008
int
SW2;
// кнопка крякалки
009
int
SW3;
// задний ход
010
int
SHORT_BC=0;
//счетчик кратковременных нажатий
011
int
LONG_BC=0;
//счетчик длинных нажатий
012
int
LONG_BCA=0;
// счетчик самой длинной нажатий
013
014
015
long
START_BP_Millis = 0;
//точка начала отчета после нажатия
016
017
018
019
void
setup
()
020
{
021
022
pinMode(5,INPUT);
// провод сигналки
023
pinMode(6,INPUT);
// кнопка крякалка
024
025
026
027
tmrpcm.speakerPin = 9;
// 9 на Уно, Нано, и т. д.
028
029
if
(!SD.begin(SD_ChipSelectPin)) {
// см. если карта
030
// присутствует и может быть инициализирован:
031
return
;
// ничего не делаем если не больше
032
}
033
034
tmrpcm.volume(1);
035
tmrpcm.play(
"1.wav"
);
//ооо новый аккумулятор
036
}
037
038
039
040
041
void
loop
()
042
{
043
{
044
SW1=digitalRead(5);
045
SW2=digitalRead(6);
046
047
{
048
if
(digitalRead(5)==HIGH)
//если нажать кнопку ...
049
050
tmrpcm.volume(1);
051
tmrpcm.play(
"2.wav"
);
//писк
052
053
START_BP_Millis-START_BP_Millis;
// начинаем отсчет длительности нажатия... с нуля
054
if
(millis() - START_BP_Millis < 500)
055
056
057
START_BP_Millis = millis();
// счетчик длительности нажатия обнулить для следуещего отсчета
058
059
SHORT_BC++;
// увеличить счетчик кратковременных нажатий
060
061
062
063
if
(millis() - START_BP_Millis >= 500)
// и удерживать 0,5 cекунды или больше...
064
{
065
START_BP_Millis = millis();
// счетчик длительности нажатия обнулить для следуещего отсчета
066
LONG_BC++;
// увеличить счетчик длинных нажатий
067
068
}
069
else
if
(millis() - START_BP_Millis >= 1500)
// и удерживать 0,5 cекунды или больше...
070
{
071
START_BP_Millis = millis();
// счетчик длительности нажатия обнулить для следуещего отсчета
072
LONG_BCA++; }
// увеличить счетчик длинных нажатий
073
074
075
076
if
(digitalRead(5)==HIGH)
//если нажать кнопку ...
077
{
078
079
if
( SHORT_BC==1)
//если одно короткое нажатие
080
tmrpcm.volume(1);
081
tmrpcm.play(
"2.wav"
);
//то играем файл машина закрыта
082
if
(SHORT_BC==2)
// если два коротких нажатий
083
084
tmrpcm.volume(1);
085
tmrpcm.play(
"3.wav"
);
//то играет файл машина закрыта
086
if
(SHORT_BC>=3)
//если три раза и больше
087
tmrpcm.volume(1);
088
tmrpcm.play(
"4.wav"
);
//то играет файл
089
if
(LONG_BC>=1);
090
tmrpcm.volume(1);
091
tmrpcm.play(
"5.wav"
);
//паника
092
093
094
095
096
097
if
(SW2 == LOW && tmrpcm.isPlaying()==0)
098
{tmrpcm.volume(1);
099
tmrpcm.play(
"6.wav"
);}
//файл крякалки
100
delay(10000);
//пауза пока не сыграет крякалка
101
102
103
104
}
105
}
106
}
107
}
108
109
110
111
112
113
114
115
начал с простого, написал маленький скетч, если нажата кнопка то воспроизводжим файл1. звук очень плохого качества а через минуто вооще скрежет. адаптор sd использую специальную для ардуино