В этой конструкции фонем нет, есть целые слова. Конечно же, это существенно сказалось на качестве речи. Словарный запас не большой, но его достаточно, чтобы озвучить текущее время, дату, день недели, температуру. Несомненно, это снова очередной, и я вам скажу, успешный шаг к интеллектуальным повседневным вещам!
Схема сложностей не представляет, её можно взять с предыдущей конструкции без всяких изменений (для тех, кто успел её изготовить).
Печатная плата односторонняя.
Алгоритм работы такой: Контроллер принимает специально подготовленную строку через УАРТ с другого контроллера, в котором собственно организованы часы с термометром. Далее вычитывает бинарные данные из микросхемы памяти и из них формирует посредством ШИМа необходимые фразы.
Время - формат 1020210 (10 - это маркер времени, далее часы и минуты: двадцать часов двадцать одна минута). Последняя цифра: если 0 - время "милитер” 24 часа. Если 1 – время 12 часов и тогда диктор сообщит что у нас восемь часов двадцать одна минута вечера. Дата - формат 207190513 (20 - это маркер даты, далее день недели [7-воскресенье], число, месяц, год: Сегодня воскресенье девятнадцатого мая две тысячи тринадцатого года). Температура - формат 30041 (30 - это маркер температуры, далее температура и знак: четыре градуса ниже ноля). Воспроизведение одной фонемы - формат 400101 (40 - это маркер одной фонемы, далее номер фонемы[01 - кукует кукушка] и количество повторов). Разделителем между форматами служит символ "/" - косая черта. Общий вид передаваемой строки - 1020210 / 207190513 / 30041 / 400301
Ниже приводится фрагмент подпрограммы, которая формирует строку для отправки в синтезатор речи. Я думаю, вам будет несложно внедрить этот код в свои часы.
'==========Подготовка текста времени и температуры для отправки в синтезатор речи========== '****************************************************************************************** Govorilka:
'Формат 102021 / 207190513 / 30041 / 400301 'В одиночном звуке ввел количество повторов
'===Дата=== Str_temp = "20" Str_temp = Str_temp + Str(weekday) If Dat < 10 Then Str_temp = Str_temp + "0" Str_temp = Str_temp + Str(dat) Else Str_temp = Str_temp + Str(dat) End If If Month < 10 Then Str_temp = Str_temp + "0" Str_temp = Str_temp + Str(month) Else Str_temp = Str_temp + Str(month) End If If Year < 10 Then Str_temp = Str_temp + "0" Str_temp = Str_temp + Str(year) Else Str_temp = Str_temp + Str(year) End If Str_temp = Str_temp + "/"
'===Время=== If Hour < 10 Then Str_temp = Str_temp + "100" Str_temp = Str_temp + Str(hour) Else Str_temp = Str_temp + "10" Str_temp = Str_temp + Str(hour) End If If Mine < 10 Then Str_temp = Str_temp + "0" Str_temp = Str_temp + Str(mine) Else Str_temp = Str_temp + Str(mine) End If Str_temp = Str_temp + "/"
'===Температура=== If Temper < 10 Then Str_temp = Str_temp + "300" Str_temp = Str_temp + Str(temper) Else Str_temp = Str_temp + "30" Str_temp = Str_temp + Str(temper) End If If Znak = "-" Then Str_temp = Str_temp + "1" If Znak = "+" Then Str_temp = Str_temp + "0" Str_govor = Str_temp
Print #1 , Str_govor + Chr(13);
Return
Посылать необходимый текст можно и с помощью любой терминальной программы, настроив её на скорость 9600.
Сигнал через простейший фильтр НЧ попадает на усилитель. Лучшее качество звучания получается с НЧ динамиками достаточно большой мощности. На фото динамик от системника, но и он вполне справляется с поставленной задачей.
В качестве микросхем памяти можно использовать любые SPI FLASH из серии 25хх, общей ёмкостью не менее 2МБ.
В результате творческой работы был изготовлен бинарный файл и написан код для его воспроизведения. С адреса &h10000 записаны фонемы для озвучивания времени, даты, дня недели и температуры. Адреса можно посмотреть в файле !BBS_Minimum_01.doc в архиве.
Архив (плата, схема, описание адресов, прошивка WAV, исходный код). После изготовления платы необходимо прошить микросхему памяти с помощью соответствующего программатора - их описания есть на нашем сайте ( 1 и 2). Далее прошить контроллер и выставить фус-биты. Для PonyProg FUSE : CKOPT , BODLEVER , BODEN , SUT0 После этого можно нажать кнопку "Тест" и проверить работоспособность устройства. Следующий шаг - подключение другого контроллера или терминала.
Устройство также собрано и протестировано администратором сайта, который выражает благодарность автору.
С уважением, Вадим Муравьёв.
|