Speaker 2 Click with Clicker 4 for STM32F4

Published 5月 07, 2025

点击板

Speaker 2 Click
POT 4 Click

开发板

Clicker 4 for STM32F4

编译器

NECTO Studio

微控制器单元

STM32F407VGT6

Speak Numbers with Potentiometer Solution

基于电位器位置播报对应数字的模拟转语音接口,实现直观的音频交互体验

你将学到和构建的内容

简介

Speak Numbers with Potentiometer 解决方案通过结合  与 Speaker 2 Click,将简单的模拟输入转化为完整的交互式语音体验。用户旋转电位器时,系统持续跟踪其电压变化并转换为百分比值,然后将该值映射为六个语音数字中的一个。一旦切换至新的数字,对应的语音提示将被播放,提供直观、即时的听觉反馈。此外,当用户按下 POT 4 Click 上的按钮时,系统会播放快速“哔”声,增加额外的交互维度。该方案特别适用于无障碍应用、用户培训、或具备触觉特性的界面开发,提供了一种简单但高效的模拟量到音频控制的实现方式。

mikroBUS 1

Speaker 2 Click

Speaker 2 Click 是一款紧凑型附加板,适用于高品质音频播放和语音提示应用。该板采用 Nuvoton 的 ISD2360 三通道数字 ChipCorder® 芯片,集成了非易失性闪存用于音频存储与回放。ISD2360 支持最长达 64 秒的语音存储,具备数字解压、独立多通道播放功能,并内建 Class D 扬声器驱动器,可直接驱动板载的 AS01508AO-SC-R 扬声器。该模块通过标准 SPI 接口与主控 MCU 通信,具备可配置的 I/O 引脚和内建程序验证机制,在外部组件极少的情况下确保系统运行可靠。板上还提供可切换的逻辑电压选择(3.3V 或 5V)以及用于独立数字供电的跳线设置。Speaker 2 Click 非常适合嵌入式系统中需要清晰语音提示、音效或预录消息的场景,如自动化系统、消费类电子产品和工业控制设备。

Speaker 2 Click front-background image

mikroBUS 2

POT 4 Click

POT 4 Click 是一款紧凑型扩展板,具备精确可选的参考电压输出功能。该板配备 Bourns 出品的 PRS11R-425F-S103B1 高质量 11mm 旋转电位器,电阻值为 10kΩ。PRS11R-425F-S103B1 具有小巧的外形尺寸,带有按压式瞬时开关、平头轴结构,并支持宽工作温度范围。该板还集成了高分辨率的 12 位模数转换器(ADC),能够检测到最微小的旋转位移并对位置进行数字化处理,配合轨到轨缓冲运算放大器,确保输入和输出阻抗稳定。用户可选择以模拟或数字形式处理输出信号。此 Click board™ 广泛应用于音频与照明控制、实验室设备、工业自动化控制等对电位器可靠性有较高要求的场景。

POT 4 Click front-background image

功能概述

开发板

Clicker 4 for STM32F4 是一款紧凑型开发板,专为快速构建自定义设备而设计。它配备 STM32F407VGT6 MCU、四个 mikroBUS™ 插座(用于 Click board™ 连接)、电源管理等功能,使其成为快速应用开发的理想选择。核心采用 STM32F407VGT6 MCU,该芯片基于 Arm® Cortex®-M4 32 位处理器,运行频率高达 168 MHz,提供充足的计算能力以满足高负载任务需求。除了两个 1x20 排针接口外,四个 mikroBUS™ 插座可支持庞大且不断增长的 Click boards™ 生态系统。开发板上清晰标记的功能区域提供直观、易用的界面,加快开发进程。Clicker 4 不仅能加速原型设计,还可直接集成到项目中,无需额外的硬件修改。四个 4.2mm(0.165”)的安装孔位于角落,便于使用螺丝固定,实现简便安装。

Clicker 4 for STM32F4 front image

微控制器概述 

MCU卡片 / MCU

default

建筑

ARM Cortex-M4

MCU 内存 (KB)

10

硅供应商

STMicroelectronics

引脚数

100

RAM (字节)

100

一步一步来

项目组装

Clicker 4 for STM32F4 front image hardware assembly

首先,选择您的开发板 - Clicker 4 for STM32F4

Clicker 4 for STM32F4 front image hardware assembly
LTE IoT 5 Click front-background image hardware assembly
Calypso Click front-background image hardware assembly
Board mapper by product7 hardware assembly
Necto image step 2 hardware assembly
Necto image step 3 hardware assembly
Necto image step 4 hardware assembly
Necto image step 5 hardware assembly
NECTO Output Selection Step Image hardware assembly
Necto image step 6 hardware assembly
Clicker 4 for STM32F4 HA MCU Step hardware assembly
Necto image step 8 hardware assembly
Necto image step 9 hardware assembly
Necto image step 10 hardware assembly
Necto PreFlash Image hardware assembly

实时跟踪您的结果

应用程序输出

1. 应用程序输出 - 在调试模式下,“应用程序输出”窗口支持实时数据监控,直接提供执行结果的可视化。请按照提供的教程正确配置环境,以确保数据正确显示。

2. UART 终端 - 使用UART Terminal通过USB to UART converter监视数据传输,实现Click board™与开发系统之间的直接通信。请根据项目需求配置波特率和其他串行设置,以确保正常运行。有关分步设置说明,请参考提供的教程

3. Plot 输出 - Plot功能提供了一种强大的方式来可视化实时传感器数据,使趋势分析、调试和多个数据点的对比变得更加直观。要正确设置,请按照提供的教程,其中包含使用Plot功能显示Click board™读数的分步示例。在代码中使用Plot功能时,请使用以下函数:plot(insert_graph_name, variable_name);。这是一个通用格式,用户需要将“insert_graph_name”替换为实际图表名称,并将“variable_name”替换为要显示的参数。

软件支持

库描述

Speak Numbers with Potentiometer Solution 使用 NECTO Studio 开发,确保兼容 mikroSDK 的开源库和工具。该解决方案采用即插即用的设计,支持快速实施和测试,并与所有配备 mikroBUS™ 插座的开发板、入门套件和 mikromedia 板完全兼容。

示例描述
Speak Numbers with Potentiometer 应用提供一个纯音频界面,通过电位器的位置决定当前播放的数字语音。系统持续采样 POT 4 Click 输出的模拟电压,并将其转换为百分比,再映射为六个数字之一。当旋钮位置变化导致选中的数字改变时,Speaker 2 Click 会播放对应的语音提示,实现清晰准确的听觉反馈。此外,若用户按下 POT 4 Click 上的开关按钮,系统将播放一个快速“哔”声作为辅助反馈。该方案展示了一种简单却高效的模拟转语音交互方式,非常适合用于嵌入式界面、用户输入反馈系统及无障碍应用。

关键功能:

  • pot4_read_voltage - 从 POT 4 Click 读取当前模拟电压(单位:伏特)。

  • pot4_convert_voltage_to_percents - 将读取的电压转换为百分比值(0–100%)。

  • pot4_get_switch_pin - 读取 POT 4 Click 板载按钮的数字输入状态。

  • speaker2_play_voice - 通过 Speaker 2 Click 播放指定语音(数字或提示音)。

  • log_printf - 向 UART 终端输出状态消息,用于调试与反馈。

应用初始化
在 application_init 中,首先配置 UART 日志输出功能。随后初始化 Speaker 2 Click 并设置为默认音频参数。接着初始化 POT 4 Click,用于读取模拟电压和监控按钮输入。两个外设准备就绪后,系统会输出状态消息,并进入主交互循环。

应用任务
在 application_task 主循环中,系统持续监测电位器的模拟值,将其转换为百分比并映射为 0 到 5 的索引值,每个索引对应数字 1 到 6。若新计算出的数字与之前存储的数字不同,系统将通过 Speaker 2 Click 播放新的语音数字,确保用户听到的数字与旋钮位置一致。如果检测到用户按下了 POT 4 Click 上的按钮,则立即播放一个快速“哔”声提示。所有读取结果与播放事件均通过 UART 输出,便于调试和状态追踪。

开源

代码示例

完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio 应用程序代码也可以在MIKROE的GitHub账户中找到。

/*
 * Solution Name: Speak Numbers With Potentiometer
 *
 * Description:
 * This embedded solution provides an interactive audio experience by linking
 * analog input from a potentiometer to voice prompts played through a speaker.
 * The position of the potentiometer on the **POT 4 Click** is read and mapped
 * to one of six pre-recorded digits (1 to 6), which are then played through
 * the **Speaker 2 Click**.
 *
 * A press of the onboard button on the POT 4 Click triggers a distinct **FAST BEEP**
 * as an auditory feedback event. The system continuously monitors analog voltage
 * levels, converts them to percentages, and logs all activity through the UART
 * terminal for transparency and debugging.
 *
 * The system utilizes the following Click boards:
 *   - **Speaker 2 Click**: Plays pre-recorded audio via SPI interface.
 *   - **POT 4 Click**: Measures analog voltage from a potentiometer and provides
 *     digital input via a button pin.
 *
 * The `application_init` function initializes both Click boards and configures
 * the SPI and ADC communication channels. It prepares the audio system for
 * voice playback and the potentiometer for analog-to-percentage conversion.
 *
 * The `application_task` function continuously reads the potentiometer voltage,
 * converts it to a percentage, and maps it to a digit index. When the value
 * changes, the matching voice prompt is played. Additionally, if the button is
 * pressed, a FAST BEEP tone is played. All actions are logged via UART.
 *
 * Hardware Setup:
 *   - **MIKROBUS_1**: Speaker 2 Click (SPI audio playback)
 *   - **MIKROBUS_2**: POT 4 Click (Analog voltage input + button pin)
 *
 * Key Features:
 *   - Audio-based digit representation via potentiometer position.
 *   - Voice output changes only when the knob is rotated into a new range.
 *   - Button-triggered beep functionality.
 *   - UART terminal logging for diagnostics and playback tracking.
 *
 * Development Environment:
 *   - **NECTO Studio** ([link](https://www.mikroe.com/necto))
 *   - **mikroSDK v2.0** ([link](https://www.mikroe.com/mikrosdk))
 *   - MIKROE **Click boards** ([link](https://www.mikroe.com/click-boards))
 *
 * Author: Branko Jaksic
 * Date: April, 2025
 */

// ------------------------------------------------------------------- INCLUDES
#include "log.h"
#include "pot4.h"
#include "board.h"
#include "speaker2.h"

// ------------------------------------------------------------------ VARIABLES
// --- Driver Instances ---
static pot4_t pot4;                     // POT 4 Click driver object
static log_t logger;                    // Logger instance
static speaker2_t speaker2;             // Speaker 2 Click driver instance

// --- Speaker 2 Click Voice Map ---
const uint8_t voices[6] = {             // Voice prompt mappings (1-6)
    SPEAKER2_VP9_ONE,
    SPEAKER2_VP10_TWO,
    SPEAKER2_VP11_THREE,
    SPEAKER2_VP12_FOUR,
    SPEAKER2_VP13_FIVE,
    SPEAKER2_VP14_SIX
};

// ------------------------------------------------------ APPLICATION FUNCTIONS
void application_init ( void )
{
    log_cfg_t log_cfg;  /**< Logger config object. */
    pot4_cfg_t pot4_cfg;  /**< Click config object. */
    speaker2_cfg_t speaker2_cfg;  /**< Click config object. */

    /**
     * Logger initialization.
     * Default baud rate: 115200
     * Default log level: LOG_LEVEL_DEBUG
     * @note If USB_UART_RX and USB_UART_TX
     * are defined as HAL_PIN_NC, you will
     * need to define them manually for log to work.
     * See @b LOG_MAP_USB_UART macro definition for detailed explanation.
     */
    LOG_MAP_USB_UART( log_cfg );
    log_init( &logger, &log_cfg );
    log_info( &logger, " Application Init " );

    // Speaker 2 Click initialization.
    speaker2_cfg_setup( &speaker2_cfg );
    SPEAKER2_MAP_MIKROBUS( speaker2_cfg, MIKROBUS_1 );
    if ( SPI_MASTER_ERROR == speaker2_init( &speaker2, &speaker2_cfg ) )
    {
        log_error( &logger, " Communication init." );
        for ( ; ; );
    }

    if ( SPEAKER2_ERROR == speaker2_default_cfg ( &speaker2 ) )
    {
        log_error( &logger, " Default configuration." );
        for ( ; ; );
    }

    // POT 4 Click initialization.
    pot4_cfg_setup( &pot4_cfg );
    POT4_MAP_MIKROBUS( pot4_cfg, MIKROBUS_2 );
    err_t init_flag = pot4_init( &pot4, &pot4_cfg );
    if ( ( ADC_ERROR == init_flag ) || ( I2C_MASTER_ERROR == init_flag ) )
    {
        log_error( &logger, " Communication init." );
        for ( ; ; );
    }

    log_info( &logger, " Application Task " );
}

void application_task ( void )
{
    float voltage = 0;
    uint8_t pot_percent = 0;

    // Switch I2C communication to POT 4 Click
    i2c_master_set_slave_address(&pot4.i2c, pot4.slave_address);

    // Play a beep if POT had been pressed
    if ( !pot4_get_switch_pin ( &pot4 ) )
    {
        err_t beep_status = speaker2_play_voice( &speaker2,
                                                SPEAKER2_VP15_FAST_BEEP );
        log_printf( &logger, " Playing FAST BEEP: %s\r\n\n",
                    ( beep_status == SPEAKER2_OK ) ? "DONE" : "ERROR" );
    }

    // Read analog voltage from POT 4
    if ( POT4_OK == pot4_read_voltage( &pot4, &voltage ) )
    {
        pot_percent = ( uint8_t ) pot4_convert_voltage_to_percents( &pot4, voltage );
        log_printf( &logger, " Potentiometer : %u %%\r\n", pot_percent );

        // Map percentage [0-100] into 6 levels (0-5)
        uint8_t index = ( pot_percent * 6 ) / 101;  // Ensure max 5

        // Play voice for the digit
        err_t status = speaker2_play_voice( &speaker2, voices[ index ] );
        log_printf( &logger, " Playing voice %d: %s\r\n\n",
                    index + 1, ( status == SPEAKER2_OK ) ? "DONE" : "ERROR" );
    }
}

int main ( void )
{
    /* Do not remove this line or clock might not be set correctly. */
    #ifdef PREINIT_SUPPORTED
    preinit();
    #endif

    application_init( );

    for ( ; ; )
    {
        application_task( );
    }

    return 0;
}

// ------------------------------------------------------------------------ END

额外支持

资源

喜欢这个项目吗?

'购买此套件' 按钮会直接带您进入购物车,您可以在购物车中轻松添加或移除产品。