HaaS506 - 简易声控灯

  • 简介
  • 准备
  • 硬件连接图
  • 功能实现
  • 1.继电器使用说明
  • 2.简易代码
  • 3.测试代码
  • 3.1测试log


简介

使用简单代码还原楼道声控灯,通过检测声音来开启电灯.


24行代码写一个声控灯,只有python能做到,其实还能精简,硬件源码都开放


准备

本案例需要的硬件

器材

数量

HaaS506 - M601/M320

1

声音检测模块

1

220v电灯泡

1

高电平触发继电器

1

杜邦线

若干

硬件连接图

5.26 综合案例2.0-简易声控灯_引脚

功能实现

1.继电器使用说明

  • GPIO18引脚低电平电压0V,拉高后电压为3.2V。继电器正极连接电压为3.3V。所以继电器设置为低电平或高电平触发均可。
  • SI引脚控制左边继电器通断,S2控制右边继电器。

2.简易代码

main.py

from driver import ADC
from driver import GPIO
import utime as time
import _thread

voice=ADC()
voice.open('ADC1')
def voice_thread():
    global value
    while True:
        value=voice.readVoltage()
        time.sleep_ms(1)

if __name__ == '__main__':
    p18=GPIO()
    p18.open('p18')
    p18.write(0)
    _thread.start_new_thread(voice_thread, ())
    while True:
        time.sleep_ms(1)
        if value > 720:
            p18.write(1)
            time.sleep(5)
            p18.write(0)

board.json

{
  "name": "haas506",
  "version": "2.0.0",
  "io": {
    "p18": {
      "type": "GPIO",
      "port": 18,
      "dir": "output",
      "pull": "pullup"
      },
    "ADC0": {
      "type": "ADC",
      "port": 0,
      "sampling": 12000000
    },
    "ADC1": {
      "type": "ADC",
      "port": 1,
      "sampling": 12000000
    }
  },
  "debugLevel": "ERROR",
  "repl": "enable",
  "replPort": 0
}

3.测试代码

增加记录最大值,及打印log功能。
main.py

from driver import ADC
from driver import GPIO
import utime as time
import _thread

voice=ADC()
voice.open('ADC1')
mx = 0
mx1 = 0
def voice_thread():
    global value,mx,mx1
    while True:
        value=voice.readVoltage()
        time.sleep_ms(1)
        #记录并打印最大值
        if value > mx:
            mx = value
        if mx !=mx1:
            print(value)
            mx1 = mx

if __name__ == '__main__':
    p18=GPIO()
    p18.open('p18')
    p18.write(0)
    _thread.start_new_thread(voice_thread, ())
    while True:
        time.sleep_ms(1)
        if value > 720:
            p18.write(1)
            time.sleep(5)
            p18.write(0)
            #重置最大值
            mx = 0

board.json

{
  "name": "haas506",
  "version": "2.0.0",
  "io": {
    "p18": {
      "type": "GPIO",
      "port": 18,
      "dir": "output",
      "pull": "pullup"
      },
    "ADC0": {
      "type": "ADC",
      "port": 0,
      "sampling": 12000000
    },
    "ADC1": {
      "type": "ADC",
      "port": 1,
      "sampling": 12000000
    }
  },
  "debugLevel": "ERROR",
  "repl": "enable",
  "replPort": 0
}

3.1测试log

记录当前最大音量,等量之后重置数值。便于设置临界音量值。

[14:20:50.534]收←◆\0
[14:20:54.337]收←◆POWERONREASON:0x000b,parse:,powerkey,pinReset,charge.

[14:20:55.354]收←◆714

[14:20:55.454]收←◆716

[14:20:55.954]收←◆717

[14:20:57.855]收←◆719

[14:20:59.575]收←◆720

[14:21:00.795]收←◆722

[14:21:05.795]收←◆709
714

[14:21:05.835]收←◆716

[14:21:06.035]收←◆717

[14:21:06.235]收←◆719

[14:21:09.135]收←◆720

[14:21:16.375]收←◆731

[14:21:21.375]收←◆709

[14:21:21.395]收←◆712
714

[14:21:21.455]收←◆716

[14:21:21.495]收←◆717

[14:21:23.835]收←◆719

[14:21:27.575]收←◆723

[14:21:27.655]收←◆728

[14:21:32.577]收←◆709
712

[14:21:32.625]收←◆716

[14:21:32.674]收←◆717

[14:21:33.214]收←◆719

[14:21:44.534]收←◆720

[14:22:30.255]收←◆722

[14:22:35.255]收←◆711
716

[14:22:35.334]收←◆717

[14:22:35.574]收←◆719

[14:24:16.854]收←◆720