
一、适用场景
适用场景:倾斜/翻转检测(防倾覆报警、落地检测、门窗/盒盖开合检测、姿态/方向简单判断、低成本震动/角度触发)、实验室教学示例(机械开关读入、去抖策略)、低功耗唤醒(作为外部唤醒源)。
二、器材清单
水银开关或滚珠倾斜开关 ×1(注意:含汞器件有安全与法规限制)
stm32f103(或其它 STM32)开发板 ×1
若干杜邦线(母对母/公对母)×1组
三、工作原理(要点)
机械触点:水银开关内部一个小玻璃管,倾斜时内部汞液流动接通两个电极,形成闭合(或开路,视常开/常闭型号)。因此输出为开关量(高/低),没有模拟量信息。
特性:响应快、接触电阻低;但属机械触点会有抖动(接点抖动)与寿命问题。
安全/环保注意:水银(汞)有毒,商业与长期项目应优先选择无汞替代(如滚珠倾斜开关、霍尔角度传感器、加速度计/IMU)。在使用水银开关时避免破碎、妥善封装与回收。
四、接线示意
VCC → +5V
GND → GND
标准库
PA0→IO
HAL库
PA0→S
五、示例代码
标准库

HAL库

cpp
int main(void)
{
/* USER CODE BEGIN 1 */
/* 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_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == 1)
HAL_UART_Transmit(&huart1,"无接触\r\n", strlen("无接触\r\n"), HAL_MAX_DELAY);
else
HAL_UART_Transmit(&huart1,"有接触\r\n", strlen("有接触\r\n"), HAL_MAX_DELAY);
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
六、讲解视频