آموزش آردوینوپروژه های آردوینو

آموزش اتصال سنسور TDS به آردوینو (سنجش ذرات حل شده در آب)

در این آموزش نحوه استفاده از یک ماژول TDS متر همراه با برد آردوینو توضیح داده شده است. TDS متر کل مواد جامد محلول مانند نمک ها، مواد معدنی و فلزات موجود در یک محلول را اندازه گیری میکند. از این پارامتر برای ارائه کیفیت آب و مقایسه آب از منابع مختلف استفاده میشود. یکی از کاربرد های مرسوم استفاده از TDS متر در آکواریوم ها است.

ماژول TDS متر

یک ماژول TDS تعداد کل مواد جامد محلول مانند نمک ها، مواد معدنی و فلزات را در آب اندازه گیری می کند. با افزایش تعداد مواد جامد محلول در آب، رسانایی آب افزایش می یابد و این به ما امکان می دهد کل جامدات محلول را بر حسب ppm (mg/L) محاسبه کنیم.

ماژول TDS متر

اگرچه این شاخص خوبی برای نظارت بر کیفیت آب است، اما توجه داشته باشید که آلاینده های موجود در آب را اندازه گیری نمی کند. بنابراین، نمی توانید برای تعیین اینکه آیا آب برای مصرف مناسب است یا خیر، تنها به این شاخص تکیه کنید.

یک متر TDS می تواند برای نظارت بر کیفیت آب در بسیاری از کاربردها مانند استخر، آکواریوم، مخازن ماهی، هیدروپونیک، تصفیه آب و غیره مفید باشد.

در این آموزش، ما از متر TDS از keystudio استفاده خواهیم کرد که دارای یک ماژول رابط و یک پروب الکترود است (تصویر بالا را ببینید).

ویژگی ها و مشخصات

این آموزش به TDS Meter V1.0 از keystudio اشاره دارد. در اینجا پارامترهای سنسور آمده است:

TDS متر:

  • ولتاژ ورودی: DC 3.3 ~ 5.5 ولت
  • ولتاژ خروجی: 0 ~ 2.3 ولت
  • جریان کاری: 3 ~ 6 میلی آمپر
  • محدوده اندازه گیری TDS: 0 ~ 1000ppm
  • دقت اندازه گیری TDS: ± 10% F.S. (25 ℃)
  • رابط ماژول: XH2.54-3P
  • رابط الکترود: XH2.54-2P

پروب TDS:

  • تعداد سوزن: 2 عدد
  • طول کل: 60 سانتی متر
  • رابط اتصال: XH2.54-2P
  • رنگ: سفید
  • پروب ضد آب

راه اندازی سنسور TDS با آردوینو

سنسور TDS یک سیگنال آنالوگ را خروجی می دهد که با استفاده از پین های آنالوگ آردوینو (A0 تا A5) قابل اندازه گیری است.

سنسور را مانند جدول زیر به برد آردوینو متصل کنید:

ماژول TDS آردوینو
GND GND
VCC 3.3V
Data A0 (یا پین آنالوگ دیگری)

اندازه گیری کیفیت آب با برد آردوینو

همانطور که قبلا ذکر شد، سنسور یک سیگنال آنالوگ را خروجی می دهد که می تواند به TDS در ppm تبدیل شود.

کد کامل در انتهای صفحه برای دانلود قرار داده شده است. در اینجا قسمت های مختلف کد را توضیح میدهیم.

متغیر TdsSensorPin شماره پینی که میخواهید در آن مقادیر را دریافت کنید ذخیره می‌کند

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
#define TdsSensorPin A0

سپس مرجع ولتاژ آنالوگ را برای ADC وارد کنید. برای آردوینو 5 ولت است.

#define VREF 5.0            // ولتاژ رفرنس برد
قبل از به دست آوردن یک مقدار اندازه گیری، یک الگوریتم فیلتر میانه را اعمال می کنیم تا مقدار پایدارتری بدست آوریم. متغیر SCOUNT به تعداد نمونه هایی که قبل از بدست آوردن مقدار واقعی فیلتر می کنیم اشاره دارد.
#define SCOUNT  30            // تعداد نمونه ها

سپس، ما به چند آرایه برای ذخیره خوانش ها و همچنین برخی از متغیرهای شاخص نیاز داریم.

int analogBuffer[SCOUNT]; // ذخیره مقادیر در آرایه
int analogBufferTemp[SCOUNT]; 
int analogBufferIndex = 0; 
int copyIndex = 0;

متغیر averageVoltage و tsdValue را به عنوان متغیرهای Float مقداردهی اولیه کنید.

float averageVoltage = 0; 
float tdsValue = 0;

متغیر دما مقدار دمای فعلی را ذخیره می کند. دما بر خوانش ها تأثیر می گذارد، بنابراین الگوریتمی وجود دارد که نوسانات دما را جبران می کند. در این مثال، دمای مرجع 25 درجه سانتیگراد است، اما می توانید بسته به محیط خود آن را تغییر دهید. برای نتایج دقیق تر، می توانید یک سنسور دما اضافه کنید و دمای واقعی را در زمان خواندن سنسور بدست آورید.

float temperature = 25;       // دمای فعلی

تابع زیر برای بدست آوردن یک مقدار TDS پایدار از آرایه ای از قرائت ها استفاده می شود.

int getMedianNum(int bArray[], int iFilterLen){ int bTab[iFilterLen];
 for (byte i = 0; i<iFilterLen; i++) bTab[i] = bArray[i];
int i, j, bTemp;
for (j = 0; j < iFilterLen - 1; j++) { 
for (i = 0; i < iFilterLen - j - 1; i++) {
if (bTab[i] > bTab[i + 1]) { 
bTemp = bTab[i]; 
bTab[i] = bTab[i + 1]; 
bTab[i + 1] = bTemp; 
} 
} 
} 
if ((iFilterLen & 1) > 0){ 
bTemp = bTab[(iFilterLen - 1) / 2]; 
} else { 
bTemp = (bTab[iFilterLen / 2] + bTab[iFilterLen / 2 - 1]) / 2;
 } 
return bTemp; 
}

در setup()، مانیتور سریال را با نرخ باود 115200 مقداردهی کنید.

Serial.begin(115200);

پایه سنسور TDS را به عنوان ورودی تنظیم کنید.

pinMode(TdsSensorPin,INPUT);

در loop()، هر 40 میلی ثانیه یک بار مقدار TDS جدید دریافت میکند و آنها را در بافر ذخیره میکند:

static unsigned long analogSampleTimepoint = millis();
if(millis()-analogSampleTimepoint > 40U){ //هر 40 میلی ثانیه، مقدار آنالوگ را از ADC بخوانید
analogSampleTimepoint = millis();
analogBuffer[analogBufferIndex] = analogRead(TdsSensorPin); //مقدار آنالوگ را بخوانید و در بافر ذخیره کنید
analogBufferIndex++;
if(analogBufferIndex == SCOUNT){
analogBufferIndex = 0;
}
}

سپس، هر 800 میلی ثانیه، آخرین قرائت ها را دریافت می کند و ولتاژ متوسط ​​را با استفاده از الگوریتم فیلتری که قبلا ایجاد شده بود، دریافت می کند:

static unsigned long printTimepoint = millis();
if(millis()-printTimepoint > 800U){
printTimepoint = millis();
for(copyIndex=0; copyIndex<SCOUNT; copyIndex++){
analogBufferTemp[copyIndex] = analogBuffer[copyIndex];

// مقدار آنالوگ را با الگوریتم فیلتر میانی پایدارتر بخوانید و به مقدار ولتاژ تبدیل کنید
میانگین ولتاژ = getMedianNum(analogBufferTemp,SCOUNT) * (float)VREF / 1024.0;

سپس یک ضریب جبران دما را محاسبه می کند و مقدار TDS را با در نظر گرفتن آن مقدار محاسبه می کند:

فرمول جبران دما:

FinalResult(25^C) = fFinalResult(current)/(1.0+0.02*(fTP-25.0));

float compensationCoefficient = 1.0+0.02*(temperature-25.0);
float compensationVoltage=averageVoltage/compensationCoefficient;
tdsValue=(133.42*compensationVoltage*compensationVoltage*compensationVoltage- 255.86*compensationVoltage*compensationVoltage + 857.39*compensationVoltage)*0.5;

در نهایت، مقدار TDS را در واحد ppm در سریال مانیتور چاپ می کند:

Serial.print("TDS Value:");
Serial.print(tdsValue,0);
Serial.println("ppm");

نتیجه کد اندازه گیری ذرات محلول در آب

پس از کپی کردن کد در Arduino IDE، کد را در برد خود آپلود کنید. فراموش نکنید که برد مناسب را در Tools > Board و پورت COM مناسب را در Tools > Port انتخاب کنید.

پس از آپلود، مانیتور سریال را با نرخ باود 115200 باز کنید.

اگر پراب زیر آب نباشد، مقدار تقریباً 0 را نشان می دهد. پروب را روی محلول قرار دهید تا TDS آن را بررسی کنید. می توانید با آب لوله کشی امتحان کنید و مقداری نمک به آن اضافه کنید تا مقادیر افزایش یافته را مشاهده کنید.

نتیجه کد اندازه گیری ذرات محلول در آب

من مقدار TDS را برای آب لوله کشی در خانه خود اندازه گرفتم و مقداری در حدود 100ppm بدست آوردم که مقدار خوبی برای آب آشامیدنی است.

من چای را هم تست کردم و مقدار TDS به حدود 230ppm افزایش یافت که مقدار معقولی به نظر می رسد. در نهایت، من مقدار TDS آب بطری را نیز اندازه گرفتم و مقداری در حدود 25ppm بدست آوردم.

مقدار PPM آب در سریال مانیتور آردوینو

یک TDS متر می تواند کل مواد جامد محلول را در یک محلول اندازه گیری کند. می توان از آن به عنوان شاخص کیفیت آب استفاده کرد و به شما امکان می دهد میزان ذرات محلول در آب را مشخص کنید. TDS متر مقدار را بر حسب ppm (قسمت در میلیون-mg/L) برمی گرداند. مقدار TDS کاربردهای زیادی دارد اما به تنهایی نمی توان از آن برای تعیین اینکه آیا آب قابل شرب است یا خیر استفاده کرد.

یکی از کاربردهای عالی این نوع سنسورها، مانیتور کیفیت آب آکواریوم است. می توانید از این سنسور در کنار سنسور دمای ضد آب DS18B20 با آردوینو برای نظارت بر مخزن ماهی خود استفاده کنید.

موارد موجود در فایل : سورس کامل

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *