# 4X4矩阵薄膜压力传感器控制器教程 ## 薄膜压力传感器16路模块和控制器教程 [购买链接:https://item.taobao.com/item.htm?id=644721142151](https://item.taobao.com/item.htm?id=644721142151) ![image-20220211154430289](media/202202111628980.png) ## 汇总资料下载地址 [https://pan.baidu.com/s/1Ap3CaOiAVWNXnm30NLBMuw](https://pan.baidu.com/s/1Ap3CaOiAVWNXnm30NLBMuw ) 提取码:3333 【如果百度云盘下载地址无效,请联系[本店铺](https://ilovemcu.taobao.com)客服更改】 ## 4*4多通道扩展模块 大部分单片机都没有16个单独ADC,因此本店设计了一款,可以扩展ADC通道加运放于一体的板子,降低对单片机的要求, 模块功能是可以把一路ADC,扩展成16路,通过4个数字IO去选择通道,加EN开关,配合单片机的一路ADC,实现采集16个点的数据。 ![image-20220211154357352](media/202202111628982.png) 引脚说明: | 引脚名称 | 功能 | | ------------------- | ---------------------------------------------- | | VCC | 供电3.3-5v,常用5v,如果是3.3v单片机可以供电3.3v | | GND | 地线 | | AO | 接单片机的ADC通道 | | EN | 使能模块引脚 | | S0-S3 | 选通0-15总共16组传感器 | | 0-15 16组传感器接口 | 接4*4薄膜压力传感器的对应接口,对插 | ### arduino例程接线方式 ``` AD扩展模块 ARDUINO VCC 5V GND GND AO A0 EN 2 S0 3 S1 4 S2 5 S3 6 ``` 接好arduino和模块之间的线,模块接4*4薄膜压力传感器后,可以从arduino的串口读取数据,如下图 ![image-20220211162122848](media/202202111628983.png) ## 源码 ```c++ /************************************************************************************ 店铺:ILOVEMCU.TAOBAO.COM 作者:神秘藏宝室 接线方式: AD扩展模块 ARDUINO VCC 5V GND GND AO A0 EN 2 S0 3 S1 4 S2 5 S3 6 程序功能:读取0-16总共16个通道的AD值,从ARDUINO的一个A0模拟引脚读取,然后换算压力输出 *************************************************************************************/ //下面4项内容需要根据实际型号和量程修正 //最小量程 根据具体型号对应手册获取,单位是g,这里以IMM00092A-10KG型号为例,最小量程是500g #define PRESS_MIN 500 //最大量程 根据具体型号对应手册获取,单位是g,这里以IMM00092A-10KG型号为例,最大量程是20kg #define PRESS_MAX 20000 #define VOLTAGE_MIN 150 #define VOLTAGE_MAX 3300 #define DEBUG_Serial Serial #define MUL_EN 2 #define MUL_S0 3 #define MUL_S1 4 #define MUL_S2 5 #define MUL_S3 6 #define MUL_AO A0 //传感器通道号 unsigned char sensor[]= { 0,4,11,15, 1,5,10,14, 2,6,9,13, 3,7,8,12, }; int buffer = 0; void setup() { DEBUG_Serial.begin(9600); //设置通讯的波特率为9600 DEBUG_Serial.println("Welcome to use!"); //发送的内容 DEBUG_Serial.println("made by waaax!"); //发送的内容 DEBUG_Serial.println("https://ilovemcu.taobao.com"); //发送的内容 pinMode(MUL_S0, OUTPUT); pinMode(MUL_S1, OUTPUT); pinMode(MUL_S2, OUTPUT); pinMode(MUL_S3, OUTPUT); pinMode(MUL_EN, OUTPUT); digitalWrite(MUL_EN, HIGH); digitalWrite(MUL_S0, LOW); digitalWrite(MUL_S1, LOW); digitalWrite(MUL_S2, LOW); digitalWrite(MUL_S3, LOW); } void loop() { DEBUG_Serial.print("*****************************\r\n"); for(int i = 0 ; i < 16 ; i++) { DEBUG_Serial.print(getPressValue(sensor[i])); DEBUG_Serial.print(",\t"); if((i+1)%4==0) DEBUG_Serial.print("\r\n"); } DEBUG_Serial.print("*****************************\r\n"); delay(200); } int readChannel(int ch) { int buf = 0; buf = ch&0x01; for(int i = 0 ; i < 4 ;i++) { buf = ch&0x01; switch(i) { case 0:digitalWrite(MUL_S0, buf);break; case 1:digitalWrite(MUL_S1, buf);break; case 2:digitalWrite(MUL_S2, buf);break; case 3:digitalWrite(MUL_S3, buf);break; } ch >>= 1; } digitalWrite(MUL_EN, LOW); //低电平有效,使能模块 delay(1); buf = analogRead(MUL_AO); digitalWrite(MUL_EN, HIGH); //关闭模块 return buf; } long getPressValue(int ch) { long PRESS_AO = 0; int VOLTAGE_AO = 0; int value = readChannel(ch); VOLTAGE_AO = map(value, 0, 1023, 0, 5000); if(VOLTAGE_AO < VOLTAGE_MIN) { PRESS_AO = 0; } else if(VOLTAGE_AO > VOLTAGE_MAX) { PRESS_AO = PRESS_MAX; } else { PRESS_AO = map(VOLTAGE_AO, VOLTAGE_MIN, VOLTAGE_MAX, PRESS_MIN, PRESS_MAX); } return PRESS_AO; } ``` ## 16路控制器功能 读取16路模块+4*4薄膜压力传感器的数据后,串口实时输出,并且TFT液晶显示,压力越大点颜色越深 ![image-20220211154214098](media/202202111628984.png) ![image-20220211162417809](media/202202111628985.png) ## 串口数据格式: 每组数据以中括号开始和结束 4个数据一行,相当于后面有c语言的“\r\n” 数据是ASCII码显示的,直接可以看 ![image-20220211162122848](media/202202111628983-1677052197211.png)