Ардуино тестер качества воды: делаем своими руками

Общие сведения

Датчик кислотности жидкости (pH-метр) — это датчик, позволяющий определить pH (potentia Hydrogenii) уровень жидкостей.

У чистой воды (H2O) при температуре 25 °C нейтральный уровень pH = 7. Чем выше кислотность жидкости, тем ниже её уровень pH, а в щелочных растворах уровень pH выше.

Принято считать, что уровень pH определён диапазоном от 0 до 14, но в действительности у сильно агрессивных сред он может выходить за указанный диапазон.

Принцип работы

В состав pH-датчика входит измерительный щуп и плата управления.

Щуп сенсора выполнен в пластиковом герметичном цилиндре с двумя электродами на конце. При погружении в измеряемый раствор или воду между электродами возникает разность потенциалов, которое фиксирует и обрабатывает плата управления. А теперь немного подробнее.

Плата управления считывает разность потенциалов между электродами. При погружении в жидкость, между электродами возникает сопротивления, которое пропорционально электропроводности раствора. Далее сигнал стабилизируется и усиливается с помощью операционных усилителей. На выходе сигнал проходит фильтрацию и поступает на выходной сигнал платы.

Датчик измеряет водородный показатель рН (лат. _potentia Hydrogenii_) — мера кислотности, которая отражает концентрацию ионов водорода в жидкости. Различают три степени кислотности водных растворов:

  • pH<7 — кислотная среда;
  • pH=7 — нейтральная среда;
  • pH>7 — щелочная среда.

Технические характеристики

Характеристики измерителя кислотности
Диапазон измерения 0 ~ 14 pH
Температура измеряемых растворов 0 ~ 80 °C
Время отклика < 5 с
Время измерения < 60 с
Разъем BNC
Рабочий ток 5 ~ 10 мА
Общие характеристики
Рабочая температура -10 ~ 50°C
Рабочая влажность 95%
Вес ~ 140 г
Комплектация pH электрод с кабелем BNC – 1 шт

pH уровень (водородный показатель) является отрицательным десятичным логарифмом концентрации ионов водорода в жидкости: pH = – lg[H+]. В воде помимо молекул H2O имеются ионы водорода [H+] и гидроксид-ионы [OH]. Если их количество равно (нейтральная среда), то концентрация ионов водорода [H+] составляет 10−7 моль/л, следовательно pH = -lg[10-7] = 7.

  • Если в воду добавить кислоту, то концентрация ионов водорода [H+] увеличится, а гидроксид-ионов [OH−] упадет, следовательно уменьшится pH. Например при увеличении концентрации ионов водорода [H+] до 10−6 моль/л (степень отрицательная), pH упадёт до -lg[10-6] = 6.
  • Если в воду добавить щелочь, то концентрация водорода [H+] упадёт, а гидроксид-ионов [OH−] увеличится, следовательно увеличится pH. Например при уменьшении концентрации ионов водорода [H+] до 10−9 моль/л (степень отрицательная), pH увеличится до -lg[10-9] = 9.

В основу работы pH-метра заложен ионометрический метод определения pH. Этот метод заключается в измерении ЭДС гальванической цепи включающей специальный стеклянный электрод, потенциал которого зависит от концентрации ионов водорода [H+] в окружающем растворе, см таблицу в разделе «примечание».

Калибровка и измерения

При первом включении pH-метра (и в дальнейшем примерно раз в пол года) его нужно откалибровать. Опустите сенсор pH-метра в нейтральный раствор (раствор хлорида калия KCL, его pH = 7.0), который находится в колпачке pH-метра и поворотом многооборотного потенциометра на плате добейтесь напряжения на выходе модуля в 2 В.

Изменение уровня pH исследуемого раствора на 1 pH приводит к изменению напряжения на выходе модуля на 2/7 В. Значит после калибровки напряжение на выходе модуля 2 В соответствует pH = 7, напряжение 0 В соответствует pH = 0, а напряжение 4 В соответствует pH = 14, см. таблицу в разделе «Примечание». Значит для преобразования считанного с модуля уровня напряжения в уровень pH исследуемой жидкости, достаточно разделить это напряжение на 2/7 или умножить на 3,5: U/(2/7) = U*7/2 = U*3,5.

Для измерения pH исследуемого раствора опустите в него сенсор pH-метра и слегка помешайте, подождите стабилизации показаний в течении 30-60 секунд.

Не опускайте сенсор pH-метра в калибровочную жидкость (раствор хлорид калия KCL в колпачке датчика) после проведения измерений щелочных и кислых сред, так как остатки этих жидкостей на сенсоре pH-метра могут изменить pH калибровочной жидкости. Сначала промойте сенсор в проточной воде и стряхните её остатки, после чего оденьте колпачок с калибровочной жидкостью на датчик pH-метра.

Дополнительно

Зависимость напряжений от уровня pH исследуемой жидкости:

pH 1 2 3 4 5 6 7 8 9 10 11 12 13 14
В 0,29 0,57 0,86 1,14 1,43 1,71 2 2,29 2,57 2,86 3,14 3,43 3,71 4
мВ 414,12 354,96 295,8 236,64 177,48 118,32 59,16 -59,16 -118,32 -177,48 -236,64 -295,8 -354,96 -414,12

В вольтах указано напряжение на выходе модуля (после калибровки) которое подаётся на вход Arduino. В милливольтах указано напряжение на выходе датчика (разъема BNC) который подключается к разъему BNC модуля.

Читайте также  Сетевой насос для котельной: расчёт, подбираем правильно

Вывод в монитор порта значения pH.

#define SensorPin A0 // pH meter Analog output to Arduino Analog Input 0 #define Offset -0.00 // Компенсация смещения #define LED 13 // Номер вывода светодиода, который является индикатором нормальной работы скетча #define samplingInterval 20 // Интервал в мс между измерениями #define printInterval 800 // Интервал в мс между выводами показаний #define ArrayLenth 40 // Количество выборок int pHArray[ArrayLenth]; // Массив для определения среднего показания напряжения считанного с датчика int pHArrayIndex=0; // Индекс элемента массива pHArray значения которого требуется изменить // void setup(void){ // pinMode(LED,OUTPUT); // Конфигурируем вывод светодиода как выход Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бит/с Serial.println("pH meter experiment!"); // Выводим надпись "pH meter experiment!" } // void loop(void){ // static unsigned long samplingTime = millis(); // Определяем переменную samplingTime для хранения времени прошедшего с момента старта (переменная создаётся при первом проходе цикла loop и не теряется по его завершении) static unsigned long printTime = millis(); // Определяем переменную printTime для хранения времени прошедшего с момента старта (переменная создаётся при первом проходе цикла loop и не теряется по его завершении) static float pHValue, voltage; // Объявляем переменные для хранения значений напряжения и pH // Проводим измерения: // if(millis() - samplingTime > samplingInterval){ // Выполняем код в теле оператора if через каждые samplingInterval мс pHArray[pHArrayIndex++] = analogRead(SensorPin); // Читаем данные в очередной элемент массива pHArray if(pHArrayIndex==ArrayLenth) pHArrayIndex=0; // Если достигли последнего элемента массива pHArray, то сбрасываем номер текущего элемента этого массива в 0 voltage = averagearray(pHArray, ArrayLenth) * 5.0 / 1023; // Получаем среднее напряжение в мВ из массива напряжений pHArray pHValue = 3.5 * voltage + Offset; // Преобразуем мВ в pH samplingTime = millis(); // Обновляем время для переменной samplingTime } // // Выводим показания в монитор: // if(millis() - printTime > printInterval){ // Выполняем код в теле оператора if через каждые printInterval мс Serial.print("Voltage:"); // Выводим надпись "Voltage:" Serial.print(voltage,2); // Выводим среднее напряжение Serial.print(" pH value: "); // Выводим надпись " pH value: " Serial.println(pHValue,2); // Выводим значение pH digitalWrite(LED,digitalRead(LED)^1); // Меняем состояние светодиода printTime = millis(); // Обновляем время для переменной printTime } // } // // // Функция определения среднего значения напряжения // Эта функция возвращает среднее арифметическое значение данных массива arr без учёта одного максимального и одного минимального значения массива. double averagearray(int* arr, int number){ // int i,max,min; // Объявляем переменные для цикла и экстремумов double avg; // Объявляем переменную для вывода среднего значения long amount=0; // Определяем переменную для подсчёта среднего значения if(number<=0){ Serial.println("Error number for the array to avraging!/n"); return 0;} // В массиве arr не может быть 0 и менее элементов if(number< 5){ for(i=0; i<number; i++){amount+=arr[i];} avg = amount/number; return avg; // Если в массиве arr менее 5 элементов, то среднее значение является средним арифметическим значением }else{ // Если в массиве arr более 5 элементов, то среднее значение считаем иначе ... if(arr[0]<arr[1]){ min = arr[0]; max=arr[1];} // Определяем минимальное и максимальное число из первых двух элементов массива else { min = arr[1]; max=arr[0];} // Определяем минимальное и максимальное число из первых двух элементов массива for(i=2; i<number; i++){ // Проходим по остальным элементам массива if(arr[i]<min){ amount+=min; min=arr[i]; } // Если значение очередного элемента меньше минимального, то добавляем к значению amount предыдущее минимальное значение и обновляем значение min else if(arr[i]>max){ amount+=max; max=arr[i]; } // Если значение очередного элемента больше максимального, то добавляем к значению amount предыдущее максимальное значение и обновляем значение max else { amount+=arr[i]; } // Если значение очередного элемента находится в пределах между min и max, то добавляем значение этого элемента к amount } // avg = (double) amount/(number-2); // Получаем среднее арифметическое значение (без учета значений первых двух элементов массива arr, т.к. они не добавлялись к amount) } // return avg; // Возвращаем полученное среднее значение } // 

Пример работы для Arduino и XOD

В качестве мозга для считывания показаний с датчика рассмотрим платформу из серии Arduino, например, Arduino Uno

Код для Arduino IDE

Прошейте платформу Arduino скетчем, приведённым ниже.

troyka-ph-sensor-example-arduino-read-data.ino
// Определяем ядро платы Arduino // для установки рабочего напряжения и // коэффициента для вычисления pH #if defined(__AVR__) #define OPERATING_VOLTAGE 5.0 #define CALIBRATION_FACTOR 3.5 #else #define OPERATING_VOLTAGE 3.3 #define CALIBRATION_FACTOR 5.3 #endif // Назначаем пин для подключения датчика constexpr auto pinSensor = A0 void setup() { // Открываем Serial-порт Serial.begin(9600) } void loop() { // Считываем аналоговое значение с датчика кислотности жидкости int adcSensor = analogRead(pinSensor) // Переводим данные сенсора в напряжение float voltageSensor = adcSensor * OPERATING_VOLTAGE / 1023 // Конвертируем напряжение в концентрацию pH float pHSensor = CALIBRATION_FACTOR * voltageSensor // Выводим данные в Serial-порт Serial.print("Voltage: ") Serial.print(voltageSensor) Serial.print(" V") Serial.print("t") Serial.print("Value: ") Serial.print(pHSensor) Serial.println(" pH") delay(1000) }

После загрузки скетча, в Serial-порт будут выводиться текущие показания кислотности жидкости.

Читайте также  Система обратного осмоса Барьер Профи Осмо - 100Л, 5 ступеней

Шаг 1: Комплектующие, датчики, сенсоры

Нам понадобится довольно много разных датчиков и комплектующих для создания тестера воды.

  1. DS1820 водонепроницаемый датчик температуры
  2. Arduino GSM-модуль SIM800L
  3. Датчик PH
  4. Датчик мутности
  5. Arduino Mega или UNO (мы использовали мега из-за большого количества датчиков, которые будут добавлены)
  6. Провода
  7. SIM-карта
  8. Макетная плата

С этими доступными деталями вы можете сделать себе систему мониторинга/теста воды, которая проверит качество воды и предупредит вас через SMS результатами.

Шаг 2: Процессор

Более подробная информация о модуле процессора памяти Arduino может помочь вам лучше понять, что вы делаете. Для новичков – вы можете просто взглянуть на это и дальше перейти к более интересной части.

Шаг 3: Схема

Создайте свою схему, как показано на рисунке. Датчики будут готовы выполнять свои команды.

Шаг 4: Собираем устройство

После подключения схема должна выглядеть примерно так как на рисунках выше. Проверьте, мигает ли модуль GSM при вставке SIM-карты. Когда все датчики готовы можно загрузить код в Arduino, используя программное обеспечение Arduino IDE, которое вы должны установить на вашем компьютере (вы можете загрузить онлайн и бесплатно). Более подробно как это сделать вы можете найти в подробном уроке по Arduino Nano по ссылке.

Шаг 5: Загрузка кода

Как сказано выше – нужно загрузить код в Ардуино:

#include <OneWire.h> #include <DallasTemperature.h> #include <SoftwareSerial.h> #define SensorPin A2 //pH meter Analog output to Arduino Analog Input 0 #define Offset 0.00 //deviation compensate unsigned long int avgValue; //Store the average value of the sensor feedback // Data wire is plugged into pin 2 on the Arduino #define ONE_WIRE_BUS 6 SoftwareSerial mySerial(7, 8); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); int sensorPin = A0; float phValue; float temperatureC; long duration, cm; void setup(void) { // start serial port Serial.begin(9600); // Start up the library sensors.begin(); // IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement } void loop() { sensors.requestTemperatures(); // Send the command to get temperature Serial.println(sensors.getTempCByIndex(0)); int reading = analogRead(sensorPin); // converting that reading to voltage, float voltage = reading * 5.0; voltage /= 1024.0; // now print out the temperature float temperatureC = (voltage - 0.5) * 100 ; PH(); temperature (); turbidity(); send_sms(); delay(4000); send_sms1(); delay(8000); } //////////////////////////////////////////////////////////// FUNCTIONS //////////////////////////////////////////////////////////////////// void PH(){ Serial.println(" "); Serial.println("Taking Readings from PH Sensor"); int buf[10]; //buffer for read analog for(int i=0;i<10;i++) //Get 10 sample value from the sensor for smooth the value { buf[i]=analogRead(SensorPin); delay(10); } for(int i=0;i<9;i++) //sort the analog from small to large { for(int j=i+1;j<10;j++) { if(buf[i]>buf[j]) { int temp=buf[i]; buf[i]=buf[j]; buf[j]=temp; } } } avgValue=0; for(int i=2;i<8;i++) //take the average value of 6 center sample avgValue+=buf[i]; float phValue=(float)avgValue*3.8/1030/6; //convert the analog into millivolt phValue=3.3*phValue+Offset; //convert the millivolt into pH value Serial.print("pH:"); Serial.print(phValue,2); Serial.println(" "); if(phValue >= 7.30){ Serial.print("PH VALUE: "); Serial.println(phValue); Serial.println("Water Alkalinity high"); delay(3000); } if(phValue >= 6.90 && phValue <= 7.19){ Serial.print("PH VALUE: "); Serial.println(phValue); Serial.println("Water Is neutral (safe)"); } if(phValue < 6.89){ Serial.print("PH VALUE: "); Serial.println(phValue); Serial.println("Water Acidity High"); delay(3000); } delay(8000); } void temperature (){ Serial.println(" "); Serial.println("Taking Readings from Temperature Sensor"); temp_check_surr(); delay(4000); temp_check_water(); } void temp_check_surr(){ int reading = analogRead(sensorPin); // converting that reading to voltage, float voltage = reading * 5.0; voltage /= 1024.0; // now print out the temperature float temperatureC = (voltage - 0.5) * 100 ; //converting from 10 mv per degree wit 500 mV offset //to degrees ((voltage - 500mV) times 100) Serial.print("Surrounding Temperature: "); Serial.println(temperatureC); if(temperatureC > 50){ Serial.print("Surrounding Temperature: "); Serial.print(temperatureC); Serial.println(" degree C"); Serial.println("Surrounding Temperature high"); delay(3000); } if(temperatureC >= 10 && temperatureC <= 50){ Serial.print("Surrounding Temperature: "); Serial.print(temperatureC); Serial.println(" degree C"); Serial.println("Surrounding Temperature normal"); } if(temperatureC < 10){ Serial.print("Surrounding Temperature: "); Serial.print(temperatureC); Serial.println(" degree C"); Serial.println("Surrounding Temperature low"); delay(3000); } delay(8000); } void temp_check_water(){ sensors.requestTemperatures(); // Send the command to get temperature Serial.print("Water Temperature: "); Serial.println(sensors.getTempCByIndex(0)); if(sensors.getTempCByIndex(0) > 40){ Serial.print("Water Temperature: "); Serial.print(sensors.getTempCByIndex(0)); Serial.println(" degree C"); Serial.println("Water Temperature high"); delay(3000); } if(sensors.getTempCByIndex(0) >= 15 && sensors.getTempCByIndex(0) <= 40){ Serial.print("Water Temperature: "); Serial.print(sensors.getTempCByIndex(0)); Serial.println(" degree C"); Serial.println("Water Temperature normal"); } if(sensors.getTempCByIndex(0) < 15){ Serial.print("Water Temperature: "); Serial.print(sensors.getTempCByIndex(0)); Serial.println(" degree C"); Serial.println("Water Temperature low"); delay(3000); } delay(8000); } void turbidity() { Serial.println(" "); Serial.println("Taking Readings from turbidity Sensor"); int turbidityValue = analogRead(A1); float turbidityV = turbidityValue/100; Serial.print("Turbidity level: "); Serial.println(turbidityV); if( turbidityV > 9){ Serial.print("Turbidity Level: "); Serial.print(turbidityV); Serial.println("NTU"); Serial.println("Water Very Clean "); delay(3000); } if( turbidityV >= 6 && turbidityValue/100 <= 9 ){ Serial.print("Turbidity Level: "); Serial.print(turbidityV); Serial.println("NTU"); Serial.println("Water Clean "); } if( turbidityV < 6){ Serial.print("Turbidity Level: "); Serial.print(turbidityV); Serial.println("NTU"); Serial.println("Water Very Dirty "); delay(3000); } delay (8000); } //////////////////////////////////////////////////////// SMS FUNCTION ///////////////////////////////////////////////////////////////////// void send_sms(){ String temp; String phm; String turb; int turbidityValue = analogRead(A1); float turbidityV = turbidityValue/100; int buf[10]; //buffer for read analog for(int i=0;i<10;i++) //Get 10 sample value from the sensor for smooth the value { buf[i]=analogRead(SensorPin); delay(10); } for(int i=0;i<9;i++) //sort the analog from small to large { for(int j=i+1;j<10;j++) { if(buf[i]>buf[j]) { int temp=buf[i]; buf[i]=buf[j]; buf[j]=temp; } } } avgValue=0; for(int i=2;i<8;i++) //take the average value of 6 center sample avgValue+=buf[i]; float phValue=(float)avgValue*3.8/1030/6; //convert the analog into millivolt phValue=3.3*phValue+Offset; if(sensors.getTempCByIndex(0) > 40){ temp = String("HIGH"); } if(sensors.getTempCByIndex(0) >= 10 && sensors.getTempCByIndex(0) <= 40){ temp = String("NORMAL"); } if(sensors.getTempCByIndex(0) < 10){ temp = String("LOW"); } if(phValue >= 7.30){ phm = String("ALKALINE"); } if(phValue >= 6.90 && phValue <= 7.19){ phm = String("NORMAL"); } if(phValue < 6.89){ phm = String("ACIDIC"); } if(turbidityV >= 6 && turbidityValue/100 <= 9){ turb = String("CLEAN"); } if(turbidityV < 6){ turb = String("DIRTY"); } mySerial.begin(19200); //Default serial port setting for the GPRS modem is 19200bps 8-N-1 mySerial.print("r"); delay(1000); //wait for a second while the modem sends an "OK" mySerial.print("AT+CMGF=1r"); //Because we want to send the SMS in text mode delay(1000); mySerial.print("AT+CMGS="+447450867345"r"); //Start accepting the text for the message delay(1000); mySerial.print(temp); mySerial.print(" r"); mySerial.print("WATER TEMPERATURE= r"); //The text for the message mySerial.print(sensors.getTempCByIndex(0)); mySerial.print("*Cr"); mySerial.println("r"); mySerial.print(" r"); mySerial.print(phm); mySerial.print(" r"); mySerial.print("WATER PH VALUE= r"); //The text for the message mySerial.print(phValue); mySerial.println("r"); mySerial.print(turb); mySerial.print(" r"); mySerial.print("WATER TURBIDITY= r"); //The text for the message mySerial.print(turbidityV); mySerial.print("NBTr"); delay(3000); mySerial.write(0x1A); //Equivalent to sending Ctrl+Z } void send_sms1(){ String temp; String phm; String turb; int turbidityValue = analogRead(A1); float turbidityV = turbidityValue/100; int buf[10]; //buffer for read analog for(int i=0;i<10;i++) //Get 10 sample value from the sensor for smooth the value { buf[i]=analogRead(SensorPin); delay(10); } for(int i=0;i<9;i++) //sort the analog from small to large { for(int j=i+1;j<10;j++) { if(buf[i]>buf[j]) { int temp=buf[i]; buf[i]=buf[j]; buf[j]=temp; } } } avgValue=0; for(int i=2;i<8;i++) //take the average value of 6 center sample avgValue+=buf[i]; float phValue=(float)avgValue*3.8/1030/6; //convert the analog into millivolt phValue=3.3*phValue+Offset; if(sensors.getTempCByIndex(0) > 40){ temp = String("HIGH"); } if(sensors.getTempCByIndex(0) >= 10 && sensors.getTempCByIndex(0) <= 40){ temp = String("NORMAL"); } if(sensors.getTempCByIndex(0) < 10){ temp = String("LOW"); } if(phValue >= 7.30){ phm = String("ALKALINE"); } if(phValue >= 6.90 && phValue <= 7.19){ phm = String("NORMAL"); } if(phValue < 6.89){ phm = String("ACIDIC"); } if(turbidityV >= 6 && turbidityValue/100 <= 9){ turb = String("CLEAN"); } if(turbidityV < 6){ turb = String("DIRTY"); } mySerial.begin(19200); //Default serial port setting for the GPRS modem is 19200bps 8-N-1 mySerial.print("r"); delay(1000); //wait for a second while the modem sends an "OK" mySerial.print("AT+CMGF=1r"); //Because we want to send the SMS in text mode delay(1000); mySerial.print("AT+CMGS="+233265188849"r"); //Start accepting the text for the message delay(1000); mySerial.print(temp); mySerial.print(" r"); mySerial.print("WATER TEMPERATURE= r"); //The text for the message mySerial.print(sensors.getTempCByIndex(0)); mySerial.print("*Cr"); mySerial.println("r"); mySerial.print(" r"); mySerial.print(phm); mySerial.print(" r"); mySerial.print("WATER PH VALUE= r"); //The text for the message mySerial.print(phValue); mySerial.println("r"); mySerial.print(turb); mySerial.print(" r"); mySerial.print("WATER TURBIDITY= r"); //The text for the message mySerial.print(turbidityV); mySerial.print("NBTr"); delay(3000); mySerial.write(0x1A); //Equivalent to sending Ctrl+Z }

Не забывайте подключать дополнительные библиотеки.

Читайте также  Водородный генератор своими руками – схема, конструкция установки, чертежи

Шаг 6: Тест и его результаты

Теперь, когда код загружен, попробуйте проверить датчики, например, в чашке воды. Попробуйте апельсиновый сок и другие жидкости, чтобы убедиться, что все датчики работают точно, поскольку для этого требуется калибровка кода. Если всё работает – откройте Serial Monitor в среде Arduino для просмотра того, что делают датчики в настоящее время в режиме реального времени.

Дождитесь текстового сообщения после того, как датчик завершил тест. В коде указано для сообщений – каждые 20 секунд, но вы можете изменить это и обновить код в зависимости от того, что вы хотите.

Комплектация

  • 1x Датчик с кабелем, колпачком и контрольным раствором;
  • 1x Модуль с разъемом BNC;
  • 1x Трёхпроводной шлейф для подключения к Arduino;

Измерительные электроды

Для контакта с жидкостью на щупе сенсора расположены два электрода, которые необходимо опустить в измеряемую жидкость для считывания концентрации кислотности.

Разъём подключения pH-щупа

Измерительный щуп подключается к плате управления через BNC-разъём Female и Male соответственно.

ОУ для обработки сигнала

На плате расположена схема, которая усиливает электрохимическую разность потенциалов, создаваемую на щупе тестируемым электролитом. Ключевыми элементами схемы являются два операционных усилителя:

  • CA3140AMZ включен по схеме интегрирующего усилителя, для фиксирования сигнала на некотором интервале времени.
  • TL081BCD усиливает выходной сигнал для последующего считывания внешними контроллерами.

Регулятор напряжения

В схеме используется двухполярное питание с двумя плечами и общей точкой GND:

  • положительное плечо Vcc: поступает от внешнего источника питания через контакт V. Диапазон рабочего напряжения от 3,3 до 5 вольт.
  • отрицательное плечо -Vcc (Vss): поступает с выхода инвертирующего регулятора TPS60403. Входное напряжение на регулятор подаётся с положительного плеча Vcc и инвертируется преобразователем в -Vcc (Vss) с максимальным выходным током 60 мА.

Troyka-контакты

Датчик подключается к управляющей электронике через три провода.

  • Сигнальный (S) — выходной сигнал сенсора. Подключите к аналоговому пину микроконтроллера. Напряжение на выходе датчика прямо пропорционально уровню pH. Диапазон выходного напряжения: 0–4 В при питании 5 В и 0–2,6 В при питании 3,3 В.
  • Питание (V) — соедините с рабочим напряжением микроконтроллера.
  • Земля (G) — соедините с землёй микроконтроллера.
Источники
  • https://iarduino.ru/shop/Sensory-Datchiki/datchik-kislotnosti-zhidkosti-rn-metr.html
  • http://wiki.amperka.ru/products:troyka-ph-sensor
  • https://supereyes.ru/catalog/Datchiki_arduino/ph_meter/
  • http://arduino.ru/forum/apparatnye-voprosy/izmerenie-urovnya-ph-temperatury-o2-i-khlora
  • https://ArduinoPlus.ru/tester-kachestva-vody-arduino/
[свернуть]

Опубликовано: 18.08.2017

Поделиться:
Нет комментариев

Добавить комментарий

Войти с помощью: 
×
Рекомендуем посмотреть
WordPress Themes
9e3377222f69609b