Говорящий Arduino

rilax
Offline
Зарегистрирован: 28.02.2014

Здравствуйте! Недавно пришла идея сделать себе уникальный звонок на дверь. Стал искать информацию в интернете и нашел как с помощью аруино через динамик выводить звуки. Скажите пожалуйста, а возможно ли что бы через динамик выводились не просто набор тональностей, а к примеру слово "привет"? Заранее большое спасибо!

axill
Offline
Зарегистрирован: 05.09.2011

конечно

самое простое - сделать воспроизведение файлов .wav или .mp3 с SD карты. .WAV в принципе можно прямо ардуиной воспроизводить, а для mp3 нужно купить специальный шилд

rilax
Offline
Зарегистрирован: 28.02.2014

Мне нужен самый дешевы вариант! Желательно без всяких шилдов, средствами самой ардуино. Возможно ли как то генерировать слова? Есть у кого то идеи?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

wav воспроизводите ардуиной. звук заранее конечно записываться будет а не ардуина по набитому тексту будет генерировать звуки

rilax
Offline
Зарегистрирован: 28.02.2014

А куда должен записываться звук??? Нужно для этого что то покупать?

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013
axill
Offline
Зарегистрирован: 05.09.2011

В самом минимуме вам нужна будет SD карта и динамик

лучше конечно любой шилд с разьемом под карту, можно припаяться напрямую к карточке или что лучше найти micro карту с адаптером под простую SD. Припаяться к адаптеру и он станет слотом для вставки micro

Генерировать голос по словам ардуино не в состоянии. Может воспроизводить только заранее записанные звуки, слова, предложения

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

rilax,  самый экономичный вариант -сделать всё самому :) Вот например вообще без ардуино, на тиньке. Я повторял -работает! http://radioded.ru/skhema-na-mikrokontrollere/wav-pleer-na-mikrokontroll...

rilax
Offline
Зарегистрирован: 28.02.2014

axill пишет:

В самом минимуме вам нужна будет SD карта и динамик

лучше конечно любой шилд с разьемом под карту, можно припаяться напрямую к карточке или что лучше найти micro карту с адаптером под простую SD. Припаяться к адаптеру и он станет слотом для вставки micro

Очень интересная идея!

Вот у меня есть такая карта, получается мне нужно просто припоять проводки ко всем выходам на ней? И как мне ее подкючить к ардуино? 

rilax
Offline
Зарегистрирован: 28.02.2014

dimax пишет:

rilax,  самый экономичный вариант -сделать всё самому :) Вот например вообще без ардуино, на тиньке. Я повторял -работает! http://radioded.ru/skhema-na-mikrokontrollere/wav-pleer-na-mikrokontroll...

Мне нужно сделать что то подобное, только на arduino! Что бы при разных условиях проигрывался один из 3 файлов к примеру.

renoshnik
Offline
Зарегистрирован: 11.04.2013
axill
Offline
Зарегистрирован: 05.09.2011

вот эта тема может вам помочь http://chipenable.ru/index.php/programming-avr/item/212-rabota-s-sd-kart...

еще для образования можете тут посмотреть http://www.getchip.net/posts/087-attiny2313-sd-card-talking-device/

satelit
Offline
Зарегистрирован: 12.12.2015

http://tubethe.com/watch/QjrAGShRw7g/attiny2313-sd-card-talking-device.html

мне вот этот плеер нравиться( как раз под мою задумку) только ссылка на скетч бракованная. может у кого есть, скиньте пожалуйста

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Можно и чтобы текст читала. Это не так сложно как кажется. Надо только разыскать библиотеку фонем, от какого-нибудь древнего спектрума или ямахи и прошить её в progmem. после чего тупо в цикле на каждую букву или слог выводить соответствующую фонему. Когда-то давно-давно делал такой матюгальник для Ямахи - "сказочник" .. вполне сносно читал текст. Любимая шутка позже у моих коллег была тайком поставить этот матюгальник соседу на PC .. чел включает утром комп, тычет кнопку, а тот ему в ответ: "отойди, видишь ещё занят!" .. позже, знакомые, так в НГУ одно время шугали студентов от компов на переменках одно время, дабы не мешали операторам.. :)

Лучше искать слоговую фонемную библиотеку. Русский язык слоговый, и их не так много .. 256. Но, фонемы должны быть разные: ударный слог, безударный, окончание .. выбираем ту, которая подходит по соседнему контексту. А можно и самому начитать. Делов-то.

Navigator
Navigator аватар
Offline
Зарегистрирован: 26.01.2016

Для воспроизведения текстов можно сначала создать файлы 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

 

 

satelit
Offline
Зарегистрирован: 12.12.2015

dimax пишет:

rilax,  самый экономичный вариант -сделать всё самому :) Вот например вообще без ардуино, на тиньке. Я повторял -работает! http://radioded.ru/skhema-na-mikrokontrollere/wav-pleer-na-mikrokontroll...

пару вопросов не понятно

1) не нашел по ссылке скетч, только не понятные файлы( с тинько вообще не связывался--только блинк)

2) как мне тиньку 85 прошить либо через ардуино(ардуино иде уже подладил и 2313 прошивал под блинк)

помогите разжевать мне моно версию и через ардуино прошить( в моно версии фьюзы вроде можно не трогать)

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

PS извеняюсь за вопросы, нереально одновременно ардуино и тини изучать, я то думал одинаковые, а нет 

satelit
Offline
Зарегистрирован: 12.12.2015

http://wiki.amperka.ru/конспект-arduino:счетчик-нажатий

вот тут разжованно про счетчик, отсюда пытаюсь достать кусочек скетча

satelit
Offline
Зарегистрирован: 12.12.2015

собираю говорящую сигналку

001#include <SD.h>                      //  нужно включить архив SD
002#define SD_ChipSelectPin 4  // с использованием цифрового пин4 на ардуино нано 328
003#include <TMRpcm.h>           //   также необходимо включить эту библиотеку...
004 
005TMRpcm 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 
019void 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     
041void 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, не пойму почему, строчка копия если нажата кнопка один

satelit
Offline
Зарегистрирован: 12.12.2015

на 101 строчку ругается

AmateurFF
Offline
Зарегистрирован: 02.02.2015

А ошибка в 99, 104, 108.

PS. 113 забыл.

satelit
Offline
Зарегистрирован: 12.12.2015

так это же пауза программы, что бы успела музыка сыграть

AmateurFF
Offline
Зарегистрирован: 02.02.2015

Ага, а точку с запятой для паузы ставить не надо? Это что-то новое в "C".

satelit
Offline
Зарегистрирован: 12.12.2015

точки понаставил, тепенрь со скобками разобраться не могу, скетч не умещается на дисплей целиком

 

satelit
Offline
Зарегистрирован: 12.12.2015

помогите шимировать проигрываемый файл с частотой 1кгц , что бы громче играла, по принципу мегафона, хочу на праздники закончить

 

AmateurFF
Offline
Зарегистрирован: 02.02.2015

Убери последнюю delay. Она вне функции.

satelit
Offline
Зарегистрирован: 12.12.2015

с функциями разобрался, там пару скобок в конце не хватало. теперь решил что ардуино большая будет в размерах, я так понимаю что бы переписать пот аттини 85, достаточно 43-45 строчку переписать. только колво ножек моловато(4 на флешку, два на питание, один на провод ос сигналки, и один на кнопку крякалки) 

satelit
Offline
Зарегистрирован: 12.12.2015

вот переделал маленько, пока только под нано, пришлось ножки переименовать, у нано нет 13-15 ножек. играет только пятый файл приблизительно каждые 10 сек

 

satelit
Offline
Зарегистрирован: 12.12.2015

начал с простого, написал маленький скетч, если нажата кнопка то воспроизводжим файл1. звук очень плохого качества а через минуто вооще скрежет. адаптор sd использую специальную для ардуино