如果你想要实现这样一个功能:当窗外开始下雨,窗户自动关闭
如果你想知道解决方案,可以直接跳到最后一部分。
我们仅看前半部分,那么你需要:检测窗外是否有雨水,并把这个信息传递给窗户控制器
这个过程中,你需要:
- 传感器:检测窗外是否有雨水/或者获取网络上的天气信息
- 单片机主控板:可以接收传感器的数据,并收发网络请求
- 执行器:窗户控制器,可以接收单片机的指令,控制窗户的开关
- 供电:保证传感器和主控板的正常工作
这个过程你需要知道以下内容:单片机如何烧录程序、传感器如何连接、如何获取传感器数据、如何发送网络数据、如何制作外壳(例如 3D 打印)。
传感器基础知识
- 负极表示符号: - / G / Gnd / 黑色
- 正极表示符号:+ / V / Vcc / 红色
- 信号管脚: S 可以表示信号,根据传感器的不同,参数范围是 0-1023 或 0 1
- 模拟量信号管脚表示符号: A 参数范围在 0-1023
- 数字量信号管脚表示符号:D 参数为 0 或 1
如果标识与颜色发生冲突,一般以标识为准:例如接口上写着 V,但连接线颜色为黑,一般当作正极处理。
当单片机通电时,所有的引脚都带电,但是只有信号管脚的电压会随着传感器的变化而变化。
因此传感器的正负极理论上
可以任意连接,只需保证信号管脚连接指定的即可。
A 口的功能比 D 口更加强大,因为 A 口可以接收模拟信号,而 D 口只能接收数字信号。因此部分传感器 D 接 A 也可以正常读数。
两管脚
常见的有扬声器、电机(俗称马达)。
这类设备因为较为特殊,一般有专门的接口,或者占用 2 个信号端口,通过信号的变化来工作。
马达往往需要更大的工作电压,如果没有专门的连接口,有可能需要在板上使用跳针切换工作电压。
三管脚
这类传感器数量最多,往往由 GVA 或者 GVD 组成。
使用时,正负极与单片机正负极连接,信号线与板上标注的 A 或 D 进行连接。
四管脚
四管脚传感器分为很多类
特殊接口的,譬如:人体温度传感器
正负极与信号口一般都专门对应的位置供连接。
双信号接口的,譬如:超声波
一般有四个接口:GVTE,其中 GV 正常连接,T 和 E 都接在信号管脚上。
同时接收 AD 的,譬如:烟雾传感器
一般有四个接口:GVAD,其中 GV 正常连接,D 表示有没有烟雾,A 表示烟雾浓度。分别接在对应的信号管脚即可。
五管脚
譬如:摇杆传感器
一般五个接口为:GVXYB,其中 GV 正常连接,X 表示 X 轴(是模拟量接 A)、Y 表示 Y 轴(是模拟量接 A)、B 表示按钮(是数字量接 D)
其他特殊类
其他特殊的传感器一般有特殊接口,譬如:摄像头、屏幕等。
根据说明接入即可。
传感器一般原理
传感器是一种信息转换装置,大部分传感器的工作原理是将非电量(力、速、声、光、热、磁等)通过敏感原件(光敏材料、热敏材料)感受,再通过转换原件转换为电参量(例如电压)。最后通过转换电路把电参量通过放大、过滤等方式转化为线性可读的电量。
传感器的应用例子:
山地车在出发前需要检查轮胎气压,需要车手用手按在轮胎上感受气压,需要一定的经验。使用传感器来检测轮胎气压,无需经验,即可获得更加客观的结果。
桥梁上需要很多螺丝,且使用一段时间后螺丝会松动,需要加固。传统方式是人为设定一个固定的检查间隔时间,逐一检查螺丝是否拧紧。变色螺栓就是一种传感器,当螺丝压力较小(拧的不紧)时,螺栓颜色较浅,当螺丝压力较大(拧的较紧)时,螺栓颜色较深。极大的提高了检查效率。
- 敏感材料是传感器的灵魂,主要是材料学的范畴。
- 转换原件和转换电路需要一定的电路设计能力和算法能力。主要是嵌入式开发的范畴。
不是所有的传感器的都是这样的组成结构,譬如:中国的称。使用结构来测量质量。
不过随着我们需要测定的量要求越来越精准:例如精确到0.1g,传统的结构称就难以胜任了。
通过找到某种压敏材料,可以在不同压力下呈现不同的电阻,我们可以测定其电阻来反推出质量。
这种方式可以使我们测量精度提高的同时,量程也更大(测量的范围)。
不过有的压敏材料在极端高温和低温下电阻也会发生较大变化,不同的传感器有不同的工作环境
总的发展趋势是找到某个的敏感材料或者多个敏感材料组合然后测定。
发展趋势
阶段 | 特点 | 代表性传感器 |
---|---|---|
结构传感器 | 通过机械结构与基本常识,经久耐用,基本上都是转换式传感器(不需要额外电源) | 液压称、中国称 |
物性传感器 | 通过结合光敏材料、热敏材料等敏感元件的物理性质测量,基本上都是有源式(需要先供电才能工作) | 光敏传感器、热敏传感器 |
集成芯片传感器 | 在前一代的基础上集成迷你芯片,进行滤波、增强等基本功能 | RGB数码相机光敏传感器 |
智能传感器 | 在前一代基础上集成了软件算法,让传感器在亮度、色彩上表现更好 | RGBW数码相机光敏传感器 |
传感器的分类
按照工作原理分类
生物传感器:利用生物酶、抗体、组织、细胞、微生物、生物等。譬如云南洱海的海菜花对水质要求极高,如果死亡则说明水质较差,可用于辅助测量水质。
化学传感器:利用各种化学吸附、化学反应的方式获取信息的,例如某些溶液测酸碱性。
物理传感器:数量最多,细分为结构性、物性型,光敏、声敏、热敏等等,不计其数。
按照工作特性分类
能量控制型传感器:需要通过外部供能的传感器,例如电子称需要有电源才能工作。
能量转换型传感器:由被测物体供能,例如:水银式人体温度计,通过将人的体温转换为水银的膨胀读数,无需供能。
同个目的可能会有多种传感器:例如测距离有红外传感器、毫米波、超声波。
同个传感器也可能有不同目的:例如二氧化碳气体传感器也可以用于测量空气质量PM2.5。(因为其工作原理是检测空气中吸收红外的物质的量,二氧化碳和PM都吸收红外)
传感器的特性
静态特性指标 | 说明 |
---|---|
灵敏度 | 传感器输出与输入的比值,值越大,越灵敏 |
线性度 | 传感器输出与输入的线性程度 |
迟滞性 | 传感器在正反向输入时,输出不一致的程度 |
重复性 | 传感器在相同输入时,输出不一致的程度 |
分辨率 | 传感器能够分辨的最小输入变化量 |
稳定性 | 传感器在长时间工作时,输出不一致的程度 |
漂移 | 传感器数值整体偏移的程度 |
动态特性指标 | 说明 |
---|---|
响应度 | 传感器对被测数据能否紧密跟随。 |
传感器的误差
没有人在实验室环境下使用传感器,专业的传感器厂商会在不同温度、湿度、光照等环境下进行测试,并给出误差范围,不同的环境误差有大有小,被称为总误差带。
不确定传感器是否准确时,则需要校准,以温度传感器为例,需要在实验室构建三相点并保持:液态水、固态冰、气态水蒸气。此时温度为 0.01℃,此时读数为 0.01℃,则认为传感器准确。
但是这样的方式费时费力,因为在实验室中校准的传感器作为“标准传感器”,将待检测的传感器与标准传感器进行对比,以此评判待检测传感器的准确性。通常会测量:零点、满量程、中间点。
定期校准是保证传感器准确性的重要手段,也能避免重大事故的发生。
与单片机通信
单片机(Microcontroller Unit,简称 MCU)是指一个微型计算机集成在一个单独的微型芯片中,它包括处理器(CPU)、内存(通常包括 RAM 和 ROM)、以及各种输入/输出(I/O)接口等在内的完整计算设备。
单片机设计用于嵌入式应用,通常在硬件设备中执行特定任务。例如,你的电视遥控器可能就是由一个单片机控制的,它可以接收你的输入,然后发送相应的信号到电视上。其他常见的单片机应用包括玩具、家用电器、医疗设备、汽车等。
有的单片机可以使用完整的 Python,譬如华硕的 thinker edge R、部分树莓派,有的 Arduino 板子、ESP32 等只能使用简化的 MicroPython。
当我们希望通过 windows 计算机的 USB 接口和单片机设备进行串口通信时,需要将 USB 接口转换为标准的串行接口,这个过程需要一个介于 USB 和串口之间的翻译,我下面的驱动就是这个翻译。
信号线的损坏的表现除了信号中断无法传输,也可能导致信号到达时间提前或滞后。
并非所有接口一样的数据线都具有相同功能:有的线仅能慢速充电,有的线可以快速充电,有的线只能充电不能传输数据。确保专线专用。
在搜索引擎中搜 CH341SER 驱动
过程中所有弹窗有下一步点下一步,有确认点确认
在编程软件中识别单片机
常用的编程软件有:Scratch、Mixly、Mixly2、MaixPy 等。
有的支持图形化编程与代码编程,有的需要仅支持代码编程。
下载对应的编程软件后,打开软件。
选择主控这个环节,不同软件的选择方式不同。
-
Vegeta 这样基于 Scratch 的编程软件,需要从左下角选择添加对应的主控型号。
-
Mixly 从右下角,串口旁的下拉菜单选择对应的主控型号。
-
Mixly2 从登录菜单中主控型号后,进入代码编辑页,右上角选择串口旁可以选择更加详细的主控型号。
-
MaixPy 从上方的工具页面中选择开发板型号。
通过连接线连接电脑 与单片机。此时可能会有多种情况:
- 会提示:有串口连接,并弹出且仅弹出 1 个串口。
- 识别计算机上的所有串口,需要自己选择(可以通过反复插拔确认新增的端口号)。
- 不弹出任何串口,需要主控通电启动后才识别串口。
- 也有的串口时有时无,此时可以考虑:连接线接触不良(更换连接线),或者是主控/USB 电压不稳定——常见于学校机房(主控或电脑独立供电)
- 还有的默认的波特率需要调整,否则无法识别传输信号。
连接成功后记得初始化固件,使其恢复到软件对应的固件版本。类似 Android 手机的刷机/恢复出厂设置。
单片机编程
这里的传感器特指狭义的通过半导体检测物理量的传感器,如温度传感器、湿度传感器、光敏传感器等。这些传感器的特点是:输出信号是数字/模拟信号。
数字量传感器的输出信号是数字信号,他的特点是只 返回/发出 两种状态:高电平和低电平。对应在代码中是 1 和 0 。
-
如声音传感器如果是数字量传感器,当检测到声音时输出高电平,否则输出低电平。
-
如小灯,输出高电平表示亮,输出低电平表示灭。
模拟量传感器的输出信号是模拟信号,他的特点是输出的电压值是连续变化的。对应在代码中是 0-1023(通常如此,并非绝对) 。
-
还是以声音传感器为例,如果是模拟量传感器,当检测到声音时输出的电压值会随着声音的大小而变化。
-
还是以小灯为例,输出最大值表示最亮,输出最小值表示最暗,亮度会随输出 的电压值变化。
有的传感器同时支持数字量和模拟量输出,有的不是。
因此,对于不确认
的传感器,我们一般先假设传感器是模拟量传感器,如果不是,再当作数据量处理。
单片机的运行内存往往很小,当创建一个非常复杂的代码时,有可能会导致内存问题,对应各种报错都有可能。
模拟量传感器读取
下面以 32 接口为例
import machine
adc32 = machine.ADC(machine.Pin(32))
while True:
print(adc32.read_u16())