本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于物联网的水质传感器

发布时间:2021-04-16
分享到:

基于物联网的水质传感器

发布时间:2021-04-16
分享到:

该系统是基于物联网的水质监测系统,通过测量水的电阻,从而得到水的TDS值。

TDS代表总溶解固体,它表示溶解在一定量的水中的固体数量,以ppm(百万分之一)为单位。TDS是根据电导率[S / m]计算的,电导率越高,TDS值越高。

以下是不同类型的水的TDS值的列表:

  • 纯净水:80-150
  • 自来水:250-350
  • 地下水:500-1000
  • 海水:约30000

原理图:

Arduino

  • 将Arduino的正极连接到面包板的一个电源轨
  • 将Arduino的负极连接到面包板的另一个电源导轨
  • 将1k欧姆电阻的一端连接到地面,另一端连接到面包板。将Arduino上的模拟引脚A0连接到电阻器。最后,将一根线连接到电阻器,将另一根线连接到5V。将这些电线的自由端连接到鳄鱼夹。

液晶显示

  • 将VSS引脚连接到负极
  • 将VDD引脚连接到5V正极
  • 将V0连接到电位计的中心引脚
  • 将电位计的两端连接到5V并接地
  • 将RS引脚连接到Arduino引脚7
  • 将R / W引脚连接到Arduino引脚8
  • 将D4连接到Arduino引脚10
  • 将D5连接到Arduino引脚11
  • 将D6连接到Arduino引脚12
  • 将D7连接到Arduino引脚13

HC-05蓝牙模块

  • 将VCC引脚连接到5V正极
  • 将GND引脚接地
  • 将TX引脚连接到Arduino引脚3(用作RX)
  • 将RX引脚连接到Arduino引脚2(用作TX)

RGB LED

  • 将公共阴极(最长的引脚)接地
  • 通过330欧姆电阻将红色引脚(阴极引脚的右侧)连接到Arduino的PWM引脚9
  • 通过330欧姆电阻将绿色引脚(阴极引脚的左侧)连接到Arduino上的PWM引脚6
  • 通过330欧姆电阻将蓝色引脚(最左侧)连接到Arduino上的PWM引脚5

代码: 

//包含库
#include  <SoftwareSerial.h>
#include  <LiquidCrystal.h>

//对于蓝牙-创建一个名为BTserial的对象,其中RX引脚位于3位置,TX引脚位于2位置
SoftwareSerial  BTserial (3 ,2 );  // RX | 得克萨斯州

//清除所有变量

浮动 读取;
INT 引脚 =  A0 ;

浮点 vOut  =  0  ; //两点之间的电压降
浮点数 vIn  =  5 ;
浮点 R1  =  1000 ;
浮点 R2  =  0 ;
浮点 缓冲区 =  0 ;
浮动 TDS ;

浮点 R  =  0 ; //两根线之间的电阻
浮点数 r  =  0 ; //电阻率
浮点数 L  =  0.06 ; //电线之间的距离,以m为单位
双 A  =  0.000154 ; //以m ^ 2为单位的导线横截面积

浮点 C  =  0 ; //电导率(单位:S / m)
浮点 Cm  =  0 ; //电导率,mS / cm

int  rPin  =  9 ;
int  bPin  =  5 ;
int  gPin  =  6 ;
int  rVal  =  255 ;
int  bVal  =  255 ;
int  gVal  =  255 ;

//使用欧姆定律后,我们将使用此公式获得电阻率-> R = r L / A => r = RA / L

//从液晶库创建液晶对象
LiquidCrystal  LCD (8 ,7 ,10 ,11 ,12 ,13 );

void setup() {
  //initialise BT serial and   serial monitor
  Serial.begin(9600);
  BTserial.begin(9600);

  //initialise lcd
  lcd.begin(16, 2);

  //set rgb led pins (all to be pwm pins on Arduino) as output
  pinMode(rPin,OUTPUT);
  pinMode(bPin,OUTPUT);
  pinMode(gPin,OUTPUT);
  pinMode(pin,INPUT);
  //Print stagnant message to LCD
  lcd.print("Conductivity: ");
}

void loop() {
    reads = analogRead(A0);
  
  vOut = reads*5/1023;
  Serial.println(reads);
//  Serial.println(vOut);
  buffer = (vIn/vOut)-1;
  R2 = R1*buffer;
  Serial.println(R2);
  delay(500);
    //convert voltage to resistance
    //Apply formula mentioned above
      r = R2*A/L;//R=rL/A
    //convert resistivity to condictivity
    C = 1/r;
    Cm = C*10;
    //convert conductivity in mS/cm to TDS
    TDS = Cm *700;
    //Set cursor of LCD to next row
    lcd.setCursor(0,1);
    lcd.println(C);

    //display corresponding colours on rgb led according to the analog read
     if( reads < 600 )
  {
      if (reads <= 300){
        setColor( 255, 0, 255 ) ;
      }
      if (reads > 200){
        setColor( 200, 0, 255 ) ;
      }
  }
  else{
    if( reads <= 900 )
    {
      setColor( 0, 0, 255 ) ;
    }
    if( reads > 700 )
  {
    setColor( 0, 255, 255 ) ;
  }
    }

//send data to Ardutooth app on mobile phone through bluetooth
BTserial.print(C);
BTserial.print(",");
BTserial.print(TDS);
BTserial.print(";");
delay(500);
}


void setColor(int red, int green, int blue)
{
  analogWrite( rPin, 255 - red ) ;
  analogWrite ( GPIN , 255  - 绿 ) ;
  analogWrite ( BPIN , 255  - 蓝 ) ;  
}

外壳:

使用了旧试管,在管子的两端戳孔,并从任一端插入电线。

项目演示:

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论