树莓派实验中关于配置水位传感器的初步应用

项目场景:

通过树莓派连接AD转换器(PCF8591)和水位传感器,每隔0.1s进行一次检测
 


代码见下:

//液位传感器模块: VCC -> 5V; GND -> GND; DO -> DOPIN 0;AO ->A0; 
#include <stdio.h>
#include <wiringPi.h>
#include <pcf8591.h>
#include <math.h>

#define PCF 120     //PCF8591的基地址 
#define DOpin 0		 
#define power 5000 //PCF8591电压值为5000mv 
#define have_water_v 1500 //水位检测1500mv 


unsigned char  Tx[5]; //发送电压字符串 
int conersion_water(int mode);

/*
水位检测驱动
MODE==1 采用模拟检测
MODE==2 采用数字检测 
有水 1
无水 10 
*/
 int conersion_water(int mode) 
 {
 	if (1==mode){
 		int value;
		float adc_v;	
		// Setup pcf8591 on base pin 120, and address 0x48
 		pcf8591Setup (PCF, 0x48) ;
 		
		value=analogRead(PCF+0);   //A0采样 
		adc_v=value *power/255;    //8通道 5v供电 单位毫伏 
		//生成TX 用于发送至手机端 
		Tx[0]=(int)(adc_v_1*1000)/1000+'0';
 		Tx[1]='.'; 
 		Tx[2]=(int)(adc_v_1*1000)%1000/100+'0';
 		Tx[3]=(int)(adc_v_1*1000)%100/10+'0';
 		Tx[4]=(int)(adc_v_1*1000)%10+'0';  
		  
		if (adc_v <have_water_v){
        	return 1;              				 //本次检测有水, 需要连续检测10次,同样结果可以认可 
  		} 
		if (adc_v >=have_water_v ) {
			return 10;    
		}                       				 //本次检测无水 ,需要连续检测10次,同样结果可以认可  
		delay(100);  //0.1s采样一次 
  		//注释:等于号给谁需要讨论 
	}
	
	if (2==mode){
		if(digitalRead(DOpin)== 0) {          //液位传感器用引脚为低电平
     	delay_ms(10);                        //延时防抖动
     		if(digitalRead(DOpin)== 0) {          //液位传感器用引脚为低电平
      		return 1;                    			//有水 
     		}
     		else{
        	return 10;              				 //无水 
  		} 
   		}
   		delay(90);  //0.1s采样一次 
	}
 }
 
 
 int main(void)
 {
 	int i;
	int A_text;
	A_text=0 // A_TEXT=10*10 or 10*1
	int D_text;
	D_text=0 // D_TEXT=10 or 1
	
	 if (wiringPiSetup()==-1){
	  printf("setup wiringpi filed!");
	  return 1;
	 }
	 
	//数字检测法 
	/*
	while(1){
		pinMode(DOpin, INPUT);
		D_text=conersion_water(2);
		if (1==D_text){
			printf("water!");
		}
		if (10==D_text){
			printf("no water!");
		}
		D_text=0; 
	}
	*/
	
	//模拟检测法 
	/*
	while(1){ 
		for (i=0;i<10;i++){
			A_text=A_text+conersion_water(1);
		}
		if (100 == A_text) {
			printf("no water!");
		}
		if (10 == A_text) {
			printf("water!");
		}
		A_text=0; 
	} 
	*/
 	return 0;
}
 
 


问题:

不太清楚电压和其值的关系;

产品说明采用模拟和数字,我们不确定哪一种更好。


解决方案:

通过实验给出了基本的线性规律。

猜你喜欢

转载自blog.csdn.net/xrk00/article/details/122486352
今日推荐