Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/55: Рейтинг темы: голосов - 55, средняя оценка - 4.53
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1

Проект "Говорящий будильник"

22.02.2019, 20:36. Показов 12328. Ответов 162
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В следующем проекте я хочу сделать говорящие часы или будильник, как мне предложил уважаемый ValeryS.

Пока я на стадии обдумывания, как лучше записать и воспроизвести голос. Купить дешевые микрофон с динамиком и подсоединить к ADC и DAC соответственно ? Или как то записать голос на ноутбуке и как тогда подавать его на мою Nucleo-L152re плату ?

Одним словом, что посоветуете ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.02.2019, 20:36
Ответы с готовыми решениями:

Посоветуйте неглючный говорящий по-русски будильник
Уже перепробовал разные проги: DVBeep Pro (г глючное, недоработанное и непонятное), WakeVoice (на мой тел не устанавливается), Good Morning...

Говорящий ардуино
Здравствуйте. Делаю один проект и нужна помощь. Нужно реализовать проект, где ардуино управляется голосовыми командами и может отвечать...

Говорящий конь
Говорящий конь Юлий шел по дороге и встретил трех богатырей. — Здравствуй, богатырь номер 1,— сказал говорящий конь Юлий. — Здравствуй,...

162
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
07.04.2019, 22:53  [ТС]
Студворк — интернет-сервис помощи студентам
Rius, добрый вечер ! Мне нужно пару дельных советов, может вы мне посоветуете...

Во-первых, как подойти к планированию проекта ? Я пытаюсь наскоком добиться успешного результата, но фактически я не разобрался ни в чем за прошедшую неделю. Я работаю неэффективно, как мне прошлым летом сказал один работодатель, прежде чем уволить. Наверное мне надо прочесть теорию по командам SD card, разобраться как они передаются по SPI. Затем освоить азы FatFS. И уже только затем лезть в код. Наверное так...

Во-вторых, флешка перестала реагировать на команды, передаваемые по SPI. Она не перегорела, так как нормально работает в Виндовсе. Возможно она залочилась по команде card lock, что то такое проскочило в коде... Провода на плате все заменил на новые, они прозваниваются авометром... В чем может быть причина ?
0
Эксперт .NET
 Аватар для Rius
13398 / 7852 / 1700
Регистрация: 25.05.2015
Сообщений: 23,869
Записей в блоге: 14
07.04.2019, 23:14
1. По постройке проекта:
Надо почитать про рефакторинг, совершенный код, и прочее по теории программирования.
У любого новичка автоматически поначалу получается говнокод. Исправляется это только опытом.
Цитата Сообщение от max_sk Посмотреть сообщение
Наверное мне надо прочесть теорию по командам SD card, разобраться как они передаются по SPI. Затем освоить азы FatFS.
Я предлагал исключить SD Card, что бы избавило от этой части проблем.
SPI прост, разберётесь легко.
FatFS это лишь библиотека. Можно разобраться в устройстве разных FAT, но в вашей задаче это вовсе не принципиально - хватит пользования библиотекой. Подробности нужны в случаях типа такого.

2. Очень давно не работал с SD Card, так что не знаю.
Возможно, переключились в другой режим по умолчанию, типа 4-битного.
1
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
10.04.2019, 20:26  [ТС]
Добрый вечер !

Какое значение я должен задать для размера блока для FAT16 ? А то с кластерами и секторами я разобрался, а с блоками нет.

Добавлено через 42 минуты
блок - это erase block...
0
Эксперт .NET
 Аватар для Rius
13398 / 7852 / 1700
Регистрация: 25.05.2015
Сообщений: 23,869
Записей в блоге: 14
10.04.2019, 20:39
C++
1
2
3
4
5
6
7
8
9
10
11
12
            case GET_SECTOR_SIZE: {
                uint16_t *sectorSize = (uint16_t *)buff;
                *sectorSize = 512;
                res = RES_OK;
                break;
            }
            case GET_BLOCK_SIZE: {
                uint16_t *blockSize = (uint16_t *)buff;
                *blockSize = 1;
                res = RES_OK;
                break;
            }
Erase блок в каком месте применяется, в каком файле исходника ?
1
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
10.04.2019, 21:24  [ТС]
Одним словом, если можно, помогите мне задать правильные параметры для функции f_mkfs(), чтобы отформатировать ее в FAT 16. А именно - размер сектора( параметр GET_SECTOR_SIZE. Я понял так, что он должен быть 512 ), параметр GET_SECTOR_COUNT ( я понял так, что это количество секторов в кластере, задал 32768 ) и параметр GET_BLOCK_SIZE ( я так понял, что это размер erase block, задал 2048 ).


С этими параметрами флешка форматируется, но затем не распознается на компе, требует переформатирования...

Добавлено через 5 минут
Rius, в файле ff.c, функция f_mkfs(). А за параметрами она идет в файл user_diskio.c, в функцию USER_ioctl()...
0
Эксперт .NET
 Аватар для Rius
13398 / 7852 / 1700
Регистрация: 25.05.2015
Сообщений: 23,869
Записей в блоге: 14
10.04.2019, 22:03
Цитата Сообщение от max_sk Посмотреть сообщение
параметр GET_SECTOR_COUNT ( я понял так, что это количество секторов в кластере, задал 32768 )
Нет. Это количество секторов на диске. Получается делением объёма флеш-памяти на размер сектора (512 байт).

Цитата Сообщение от max_sk Посмотреть сообщение
параметр GET_BLOCK_SIZE ( я так понял, что это размер erase block, задал 2048 ).
Объём стираемого за раз минимального блока, задан количеством секторов, а не байтами.

Доки: http://elm-chan.org/fsw/ff/doc/dioctl.html
1
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
10.04.2019, 23:49  [ТС]
Блин, после f_mkfs не хочет монтироваться...

Кстати, а что это за опция "allocate unit size" на Windows 10 ? Это размер сектора или кластера ?
0
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
15.04.2019, 21:17  [ТС]
Я задал следующие значения в функции USER_ioctl() для своей флешки 2Гб :

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#if _USE_IOCTL == 1
DRESULT USER_ioctl (
    BYTE pdrv,      /* Physical drive nmuber (0..) */
    BYTE cmd,       /* Control code */
    void *buff      /* Buffer to send/receive control data */
)
{
  /* USER CODE BEGIN IOCTL */
    DRESULT res;
    
    HAL_UART_Transmit(&huart2,(uint8_t*)"USER_ioctl\r\n",12,0x1000); 
    sprintf(str1,"cmd: %d\r\n",cmd); 
    HAL_UART_Transmit(&huart2,(uint8_t*)str1,strlen(str1),0x1000); 
    
    if (pdrv) return RES_PARERR; 
    if (Stat & STA_NOINIT) return RES_NOTRDY; 
    res = RES_ERROR; 
    switch (cmd){ 
        case GET_SECTOR_SIZE : /* Get sectors on the disk (WORD) */ 
            *(WORD*)buff = 512; 
            res = RES_OK; 
        break;
        case GET_SECTOR_COUNT :
            *(DWORD*)buff = 4194304;
            res = RES_OK;
        break;
        case GET_BLOCK_SIZE :
            *(DWORD*)buff = 1;
            res = RES_OK;
        break;
        case CTRL_SYNC:
            SS_SD_SELECT(); 
            if (SPI_wait_ready() == 0xFF) 
                res = RES_OK; 
        break;
        default: 
            res = RES_PARERR; 
    } 
    SPI_Release(); 
    
    return res;
  /* USER CODE END IOCTL */
}
#endif /* _USE_IOCTL == 1 */
У меня получилось, что для флешки 2Гб нужно более 4-х миллионов секторов по 512 байт каждый. При этом, во время выполнения функции f_mkfs() у меня форматируется чуть больше 32-х тысяч секторов. Что я делаю неправильно ?
0
Эксперт .NET
 Аватар для Rius
13398 / 7852 / 1700
Регистрация: 25.05.2015
Сообщений: 23,869
Записей в блоге: 14
15.04.2019, 21:23
Цитата Сообщение от max_sk Посмотреть сообщение
При этом, во время выполнения функции f_mkfs() у меня форматируется чуть больше 32-х тысяч секторов.
Возможно, для работы вовсе и не нужно форматировать её всю. Достаточно только разметить таблицы файловой системы.

Добавлено через 1 минуту
Вы можете эту FatFS и на десктопе отлаживать/изучать, с хорошим отладчиком - Visual Studio.
1
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
15.04.2019, 22:08  [ТС]
Так насколько я понял сейчас из кода, 32 кило секторов - это выделение под FAT. Остальное не форматируется. Проблема в том, что функция f_mount() не распознает затем, что f_mkfs() наформатировала...
0
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
17.04.2019, 21:42  [ТС]
Что такое SFD и что такое FDISK в опциях команды f_mkfs() ? И какую опцию следует выбрать для флешки 2Гб ?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
17.04.2019, 22:17
max_sk, изучай http://microsin.net/programmin... ormat.html
1
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
17.04.2019, 22:52  [ТС]
ValeryS, вот за эту ссылку огромное спасибо ! Оказывается, перед f_mkfs () надо сделать f_fdisk (). И еще куча инфы только с одной страницы по моим вопросам, которую я не мог найти !
0
Эксперт .NET
 Аватар для Rius
13398 / 7852 / 1700
Регистрация: 25.05.2015
Сообщений: 23,869
Записей в блоге: 14
18.04.2019, 06:03
max_sk, это перевод устаревшей версии официальной документации. Если "не могли найти", значит не искали.
1
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
20.04.2019, 00:03  [ТС]
Доброй ночи ! В своем коде файла user_diskio.c я пока не нашел ошибок. Поэтому разбираюсь с последовательностью форматирования. Правильна ли такая последовательность ? Выдает ошибку на команде f_mount(). Вот мой код :

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
DWORD plist[] = {100, 0, 0, 0};
PARTITION VolToPart[]={
    {0,1}
};
BYTE work[_MAX_SS];
 
int main(void)
{
  /* USER CODE BEGIN 1 */
  //uint16_t i; 
  //FRESULT res; //rezultat wypolneniya 
  uint8_t wtext1[]="Hello from STM32 !!! Writing and into time reading file works perfectly, but is not read from Windows 10";
  //FILINFO fileInfo; 
  //char *fn; 
  //DIR dir; 
  //DWORD fre_clust, fre_sect, tot_sect; 
  /* USER CODE END 1 */
 
  /* MCU Configuration----------------------------------------------------------*/
 
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
 
  /* USER CODE BEGIN Init */
 
  /* USER CODE END Init */
 
  /* Configure the system clock */
  SystemClock_Config();
 
  /* USER CODE BEGIN SysInit */
 
  /* USER CODE END SysInit */
 
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();
  MX_TIM2_Init();
  MX_FATFS_Init();
  MX_SPI2_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT(&htim2); 
  //SD_PowerOn(); 
  //sd_ini();
  //SD_Write_Block((uint8_t*)buffer1,0x0400); //zapishem block w bufer
  //SD_Read_Block(sect,0x0400); //schitaem block iz bufera
  //for(i=0;i<512;i++) HAL_UART_Transmit(&huart2,sect+i,1,0x1000);
  //HAL_UART_Transmit(&huart2,(uint8_t*)"\r\n",2,0x1000); 
  disk_initialize(SDFatFs.drv);
  
    //format
    if(f_fdisk(0, plist, work)!=FR_OK){
        Error();
    }else{
        if( f_mount(&SDFatFs, "0:", 1)!=FR_OK){
            Error();
        }else{
            if( f_mkfs(USER_Path, 0, 512) != FR_OK) {
                 Error();
            }
        }
    }
 
    /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
 
  /* USER CODE END WHILE */
 
  /* USER CODE BEGIN 3 */
     
  }
  /* USER CODE END 3 */
 
}
Добавлено через 5 минут
Там еще есть переменные :

C
1
2
char USER_Path[4]={0}; /* logical drive path */ 
FATFS SDFatFs;
0
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
20.04.2019, 16:52  [ТС]
Короче, не там бился головой об стену и набивал шишки. У меня в функции USER_write () при повторном вызове не отправляется CMD24...
0
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
21.04.2019, 14:03  [ТС]
Урррра, получилось !!!

Короче говоря, у моей microSD 2Gb карты была побайтная адресация. А не поблочная. Надо было каждый адрес умножать на величину блока, то есть на 512. Теперь текстовые файлы пишутся и читаются с флешки. И распознаются на Windows 10. Урра !!!

Теперь буду переходить к следующему этапу - запись .wav-файла и его проигрывание через динамик. Нужны ваши советы, как это лучше сделать. Проигрывать его через PWM или через DAC ? И какой лучше динамик приобрести ?
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
21.04.2019, 14:36
Через ШИМ порнография получится. Если есть ЦАП, то конечно через ЦАП.
1
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
21.04.2019, 21:04  [ТС]
А как правильно выбрать динамик ? Для моего проекта ?

Добавлено через 27 минут
Подскажите пожалуйста, какие параметры должны быть у динамика, чтобы озвучивать голос на уровне нормальной слышимости ?

Добавлено через 5 часов 43 минуты
И еще. Посоветуйте, пожалуйста, бесплатный аудио-рекордер, с помощью которого можно записать .wav- файлы длительностью пару десятков секунд ( буквально произнести час или минуты ) и без голосовых вставок рекламы.
0
Эксперт .NET
 Аватар для Rius
13398 / 7852 / 1700
Регистрация: 25.05.2015
Сообщений: 23,869
Записей в блоге: 14
21.04.2019, 21:06
Audacity должен уметь.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.04.2019, 21:06

Создать будильник или "завести" системный будильник
Вопрос заключается в следущем: мне нужно &quot;завести&quot; или сделать будильник на unity, подходит ли для этого unity?

"Говорящий Яндекс-Словари"
Теперь не обязательно врубаться в транскрипцию произношения иностранного слова, которое находится через Словари. Яндекс научился их...

Англоязычный форум. Живой и говорящий!
Привет, форумчанам. Сейчас у меня такая проблема: чтобы поддерживать уровень английского в актуальном состоянии, т.к. книги книгам, а...

Как сделать говорящий блокнот
Можете привести пример говорящего блокнота.Он отключает клаву и мышь.И пишит ерунду в блокноте.После того как он всё напишит клава и мышь...

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


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru