MicroPython动手做(18)——掌控板之声光传感器

eagler8, eagler8
帖子创建于2020年04月24日 基础使用 743 次浏览


麦克风、光线传感器

掌控板板载麦克风,可以用其感知周边环境的声音变化。

掌控板板载光线传感器,可以用其感知周边环境的光线变化。

侦测范围的值是0-4095。

36 条评论

eagler8

2020年04月24日

1、麦克风

学名为传声器,由英语microphone(送话器)翻译而来,也称话筒,微音器。麦克风是将声音信号转换为电信号的能量转换器件。分类有动圈式、电容式、驻极体和最近新兴的硅微传声器,此外还有液体传声器和激光传声器。大多数麦克风都是驻极体电容器麦克风,其的工作原理是利用具有永久电荷隔离的聚合材料振动膜 。

大多数麦克风都是驻极体电容器麦克风(ECM),这种技术已经有几十年的历史。ECM 的工作原理是利用具有永久电荷隔离的聚合材料振动膜。与ECM的聚合材料振动膜相比,MEMS麦克风在不同温度下的性能都十分稳定,不会受温度、振动、湿度和时间的影响。由于耐热性强,MEMS麦克风可承受260℃的高温回流焊,而性能不会有任何变化。由于组装前后敏感性变化很小,这甚至可以节省制造过程中的音频调试成本。目前,集成电路工艺正越来越广泛地被应用在传感器及传感器接口集成电路的制造中。这种微制造工艺具有精确、设计灵活、尺寸微型化、可与信号处理电路集成、低成本、大批量生产的优点。早期微型麦克风是基于压阻效应的,有研究报道称,制作了以(1×1)cm2、2μm厚的多晶硅膜为敏感膜的麦克风。但是,在敏感膜内不存在应力的情况下,这样大并且很薄的多晶硅膜的一阶谐振频率将低于300Hz。一阶谐振频率在这样低的频段范围内将导致麦克风在听觉频率范围内的频率响应极不均匀(灵敏度的变化量大于40dB),这对于麦克风应用是不可接受的。当敏感膜内存在张应力时,其谐振频率将增大,却以牺牲灵敏度为代价。当然,可以通过调整敏感膜的尺寸来获得更高的一阶谐振频率,但是这仍将减小灵敏度。由此可见,压阻式方案并不适于微型麦克风的制造 。

一种可行的解决方案就是采用电容式方案,来制造微型麦克风。这一方法的优点就是:在集成电路制造工艺中使用的所有材料都可用于传感器的制造。但是采用单芯片工艺制造微麦克风有相当难度,因为在两个电容极板之间的空气介质只能有很小的间隔。而且,由于尺寸的限制,在一些应用场合偏置电压很难满足。基于上述问题,对于电容式麦克风的研究一直没有间断过。


eagler8

2020年04月24日

2、光电传感器

是将光信号转换为电信号的一种器件。其工作原理基于光电效应。光电效应是指光照射在某些物质上时,物质的电子吸收光子的能量而发生了相应的电效应现象。根据光电效应现象的不同将光电效应分为三类:外光电效应、内光电效应及光生伏特效应。光电器件有光电管、光电倍增管、光敏电阻、光敏二极管、光敏三极管、光电池等。分析了光电器件的性能、特性曲线。

光电传感器一般由处理通路和处理元件2 部分组成。其基本原理是以光电效应为基础,把被测量的变化转换成光信号的变化,然后借助光电元件进一步将非电信号转换成电信号。光电效应是指用光照射某一物体,可以看作是一连串带有一定能量为的光子轰击在这个物体上,此时光子能量就传递给电子,并且是一个光子的全部能量一次性地被一个电子所吸收,电子得到光子传递的能量后其状态就会发生变化,从而使受光照射的物体产生相应的电效应。通常把光电效应分为3 类:(1 )在光线作用下能使电子逸出物体表面的现象称为外光电效应,如光电管、光电倍增管等;(2 )在光线作用下能使物体的电阻率改变的现象称为内光电效应,如光敏电阻、光敏晶体管等;(3 )在光线作用下,物体产生一定方向电动势的现象称为光生伏特效应,如光电池等。

光电检测方法具有精度高、反应快、非接触等优点,而且可测参数多,传感器的结构简单,形式灵活多样,因此,光电式传感器在检测和控制中应用非常广泛。


eagler8

2020年04月24日

3、OLED显示光线与声音数值

#MicroPython动手做(18)——掌控板之声光传感器
#OLED显示光线与声音数值

from mpython import *

import time
while True:
oled.fill(0)
oled.DispChar('声音值为', 40, 11, 1)
oled.DispChar((str(sound.read())), 55, 22, 1)
oled.DispChar('光线值为', 40, 33, 1)
oled.DispChar((str(light.read())), 53, 44, 1)
oled.show()
time.sleep(1)

使用前,导入mpython模块

from mpython import *

我们用 sound.read() 获取麦克风的数据。

sound.read()

注解

麦克风使用 read() 函数来读取数据。返回的值为12bit的ADC采样数据,即最大值为十进制4095。

使用 light 对象来获取光线传感器数据:

light.read()

注解

光线传感器使用 read() 函数来读取数据。返回的值为12bit的ADC采样数据,即最大值为十进制4095。

eagler8

2020年04月24日

mPython 图形编程


eagler8

2020年04月24日

OLED显示光线与声音数值


eagler8

2020年04月24日

4、光控开关(光线值小于300红灯亮)

#MicroPython动手做(18)——掌控板之声光传感器
#光控开关(光线值小于300红灯亮)

from mpython import *

import time
while True:
oled.fill(0)
oled.DispChar('光线值', 46, 22, 1)
oled.DispChar((str(light.read())), 55, 33, 1)
oled.show()
time.sleep_ms(100)
if light.read() < 300:
rgb.fill( (int(120), int(0), int(0)) )
rgb.write()
time.sleep_ms(1)
time.sleep_ms(100)
else:
rgb.fill( (int(0), int(100), int(0)) )
rgb.write()
time.sleep_ms(1)
time.sleep_ms(100)

eagler8

2020年04月24日

mPython 图形编程


eagler8

2020年04月24日

光控开关


eagler8

2020年04月25日

5、简易光强度测量仪

#MicroPython动手做(18)——掌控板之声光传感器
#简易光强度测量仪

from mpython import *

myUI = UI(oled)
while True:
oled.fill(0)
i = ((100 - 0) / (4095 - 0)) * (light.read() - 0) + 0
oled.DispChar('光强度', 25, 10, 1)
oled.DispChar((str(light.read())), 73, 10, 1)
myUI.stripBar(10, 32, 105, 10, i, 1, 1)
oled.show()

eagler8

2020年04月25日

mPython 图形编程


eagler8

2020年04月25日

光强度测量仪


eagler8

2020年04月26日

6、噪音报警器

噪音

是一类引起人烦躁、或音量过强而危害人体健康的声音 。从环境保护的角度讲:凡是妨碍人们正常休息、学习和工作的声音,以及对人们要听的声音产生干扰的声音,都属于噪音 。从物理学的角度讲:噪音是发声体做无规则振动时发出的声音 。


音量等级(类比)

190分贝 导致死亡 ;

150分贝 火箭、导弹发射的声音 ;

140分贝 欧盟界定的导致听力完全损害的最高临界点 ;

140分贝 喷气式飞机起飞的声音 ;

139分贝 世界杯球迷的呐喊声 ;

130分贝 螺旋浆飞机起飞的声音、摇滚音乐会的声音 ;

120分贝 在这种环境下呆超过一分钟即会产生暂时性耳聋 ;

120分贝 球磨机工作的声音 ;

110分贝 电锯工作的声音 ;

105分贝 永久损害听觉 ;

100分贝 气压钻机声音、压缩铁锤捶打重物的声音 ;

100分贝 拖拉机开动的声音 ;

90分贝 嘈杂酒吧环境声音、电动锯锯木头的声音 ;

90分贝 嘈杂的办公室、高速公路上的声音 ;

85分贝及以下 不会破坏耳蜗内的毛细胞 ;

80分贝 街道环境的声音、一般车辆行驶的声音 ;

75分贝 人体耳朵舒适度上限 ;

70分贝 大声说话的声音 ;

60分贝 正常交谈的声音 ;

50分贝 办公室的声音 ;

40分贝 图书馆阅览室的声音 ;

30分贝 卧室的声音 ;

20分贝 窃窃私语的声音 ;

10分贝 风吹落叶的沙沙声 ;

0分贝 刚刚引起听觉的声音 。

eagler8

2020年04月26日

#MicroPython动手做(18)——掌控板之声光传感器
#噪音报警器

from mpython import *

import time

myUI = UI(oled)
while True:
oled.fill(0)
i = ((100 - 0) / (2000 - 0)) * (sound.read() - 0) + 0
oled.DispChar('麦克风', 30, 10, 1)
oled.DispChar((str(sound.read())), 73, 10, 1)
myUI.ProgressBar(10, 30, 105, 10, i)
oled.show()
if i > 20:
if i >= 20:
rgb[0] = (int(255), int(0), int(0))
rgb.write()
time.sleep_ms(1)
if i >= 50:
rgb[0] = (int(255), int(0), int(0))
rgb.write()
time.sleep_ms(1)
rgb[1] = (int(255), int(0), int(0))
rgb.write()
time.sleep_ms(1)
if i >= 80:
rgb.fill((int(255), int(0), int(0)))
rgb.write()
time.sleep_ms(1)
else:
rgb.fill( (0, 0, 0) )
rgb.write()
time.sleep_ms(1)

eagler8

2020年04月26日

mPython 图形编程


eagler8

2020年04月26日

噪音报警器


eagler8

2020年04月26日

7、声光控制楼道灯

楼道灯的运作原理;当周围环境的光线值变暗,楼道灯附带的光线传感器探测到的光线值也随之降低,在此时如果有人经过发出声音,楼道灯上的声音传感器所探测到的值就会增大(光线值小于设定的值的同时,声音值大于设定的值,便会点亮灯泡,并持续一段时间),照亮楼梯供行人通过后,随之关闭。

这里设置光线值小于180和声音值大于500,为楼道灯开关的阕值。

#MicroPython动手做(18)——掌控板之声光传感器
#声光控制楼道灯

from mpython import *

import time
while True:
if light.read() < 180 and sound.read() > 500:
rgb.fill((int(255), int(255), int(0)))
rgb.write()
time.sleep_ms(1)
oled.fill(0)
oled.DispChar('楼道灯 开', 36, 25, 1)
oled.show()
time.sleep(10)
else:
rgb.fill( (0, 0, 0) )
rgb.write()
time.sleep_ms(1)
oled.fill(0)
oled.DispChar('光线——', 26, 10, 1)
oled.DispChar((str(light.read())), 73, 10, 1)
oled.DispChar('声音——', 26, 26, 1)
oled.DispChar((str(sound.read())), 73, 26, 1)
oled.show()

eagler8

2020年04月26日

mPython 图形编程


eagler8

2020年04月26日

声光控制楼道灯


eagler8

2020年04月27日

8、实时测量声光强度(垂直柱状条)

#MicroPython动手做(18)——掌控板之声光传感器
#实时测量声光强度(垂直柱状条)

from mpython import *

import math

myUI = UI(oled)
while True:
s = ((100 - 0) / (2500 - 0)) * (sound.read() - 0) + 0
g = ((100 - 0) / (4059 - 0)) * (light.read() - 0) + 0
oled.fill(0)
oled.DispChar('声', 16, 1, 1)
oled.DispChar('强', 16, 16, 1)
oled.DispChar('度', 16, 32, 1)
oled.DispChar((str(math.floor(((100 - 0) / (2500 - 0)) * (sound.read() - 0) + 0))), 16, 48, 1)
myUI.stripBar(36, 4, 12, 56, s, 0, 1)
oled.DispChar('光', 80, 1, 1)
oled.DispChar('强', 80, 16, 1)
oled.DispChar('度', 80, 32, 1)
oled.DispChar((str(math.floor(((100 - 0) / (4059 - 0)) * (light.read() - 0) + 0))), 80, 48, 1)
myUI.stripBar(100, 4, 12, 56, g, 0, 1)
oled.show()

eagler8

2020年04月27日

mPython 图形编程


eagler8

2020年04月27日

实时测量声光强度(垂直柱状条)


eagler8

2020年04月29日

9、A键声音波形,B键光线波形

#MicroPython动手做(18)——掌控板之声光传感器
#A键声音波形,B键光线波形

import time

from mpython import *
time.sleep_ms(50);print(('__TITLE', '声光波形'));time.sleep_ms(50)
while True:
if button_a.value() == 0:
print((sound.read(),))
if button_b.value() == 0:
print((light.read(),))
oled.fill(0)
oled.DispChar('声音', 35, 16, 1)
oled.DispChar((str(sound.read())), 65, 16, 1)
oled.DispChar('光线', 35, 32, 1)
oled.DispChar((str(light.read())), 65, 32, 1)
oled.show()

eagler8

2020年04月29日

A键声音波形


eagler8

2020年04月29日

B键光线波形


eagler8

2020年04月29日

mPython 图形编程


eagler8

2020年04月29日

A键声音波形,B键光线波形


eagler8

2020年04月30日

10、同时测量声光环境的实时波形

#MicroPython动手做(18)——掌控板之声光传感器
#同时测量声光环境的实时波形

from mpython import *

import time
oled.fill(0)
oled.DispChar(' 声光值数据采集', 0, 16, 1)
oled.DispChar(' 按A开始 按B结束', 0, 32, 1)
oled.show()
time.sleep_ms(50);print(('__TITLE', '声音值', '光线值'));time.sleep_ms(50)
while True:
while button_a.value() == 0:
while not button_b.value() == 0:
print((sound.read(), light.read()))
time.sleep_ms(100)

eagler8

2020年04月30日

同时测量声光环境的实时波形



eagler8

2020年04月30日

mPython 图形编程


eagler8

2020年04月30日

同时测量声光环境的实时波形


eagler8

2020年05月05日

11、声控RGB灯环

通过声音传感器检测到音乐声音的大小,并将其转换为亮灯的数量。

#MicroPython动手做(18)——掌控板之声光传感器

#声控RGB灯环

#MicroPython动手做(18)——掌控板之声光传感器
#声控RGB灯环

from mpython import *
import neopixel

my_rgb = neopixel.NeoPixel(Pin(Pin.P8), n=24, bpp=3, timing=1)

def upRange(start, stop, step):
while start <= stop:
yield start
start += abs(step)

def downRange(start, stop, step):
while start >= stop:
yield start
start -= abs(step)


while True:
oled.fill(0)
oled.DispChar("声音大小", 0, 0, 1)
oled.DispChar((str(sound.read())), 0, 16, 1)
oled.show()
sheng = sound.read() // 140
if sheng == 0:
my_rgb.fill( (0, 0, 0) )
my_rgb.write()
else:
for i in (0 <= int(sheng)) and upRange(0, int(sheng), 1) or downRange(0, int(sheng), 1):
my_rgb[i] = (0, 50, 0)
my_rgb.write()

eagler8

2020年05月05日

mPython X 图形编程


eagler8

2020年05月05日

声控RGB灯环


eagler8

2020年05月05日

12、十段音量柱状图形显示

//MicroPython动手做(18)——掌控板之声光传感器

//十段音量柱状图形显示

//MicroPython动手做(18)——掌控板之声光传感器
//十段音量柱状图形显示

#include <MPython.h>

// 动态变量
volatile float mind_n_HengZuoBiao;


// 主程序开始
void setup() {
mPython.begin();
display.lineWidth(5);
}
void loop() {
mind_n_HengZuoBiao = 16;
for (int index = 0; index < 10; index++) {
display.line(mind_n_HengZuoBiao, 55, mind_n_HengZuoBiao, (map((sound.read()), 0, 4095, 50, 0)));
delay(100);
mind_n_HengZuoBiao += 10;
yield();
}
display.fillScreen(0);
}
有 2 条回复

eagler8

2020年05月05日

Mind+ 图形编程


eagler8

2020年05月05日

十段音量柱