4X4矩阵薄膜压力传感器控制器教程

薄膜压力传感器16路模块和控制器教程

购买链接:https://item.taobao.com/item.htm?id=644721142151

image-20220211154430289

汇总资料下载地址

https://pan.baidu.com/s/1Ap3CaOiAVWNXnm30NLBMuw 提取码:3333 【如果百度云盘下载地址无效,请联系本店铺客服更改】

4*4多通道扩展模块

大部分单片机都没有16个单独ADC,因此本店设计了一款,可以扩展ADC通道加运放于一体的板子,降低对单片机的要求,

模块功能是可以把一路ADC,扩展成16路,通过4个数字IO去选择通道,加EN开关,配合单片机的一路ADC,实现采集16个点的数据。

image-20220211154357352

引脚说明:

引脚名称 功能
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

源码

/************************************************************************************
店铺: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

image-20220211162417809

串口数据格式:

每组数据以中括号开始和结束

4个数据一行,相当于后面有c语言的“\r\n”

数据是ASCII码显示的,直接可以看

image-20220211162122848