How to interface with OCS-3F Sensor with Arduino
Untuk memantau kualitas oksigen yang dihasilkan, khususnya konsentrasi oksigen, tersedia berbagai jenis sensor yang dapat digunakan. Beberapa contoh sensor oksigen yang umum diaplikasikan pada sistem oxygen concentrator antara lain OCS 3F, GS KE-25, dan GS KE-50. Pemilihan jenis sensor disesuaikan dengan kebutuhan sistem, tingkat akurasi yang diinginkan, serta karakteristik operasional dari alat yang dikembangkan.
Sensor OCS-3F (lihat Gambar 1) merupakan sensor oksigen yang bekerja berdasarkan prinsip gelombang ultrasonik. Sensor ini mengukur konsentrasi oksigen secara tidak langsung dengan memanfaatkan perbedaan kecepatan rambat gelombang ultrasonik pada campuran gas. Kecepatan rambat gelombang ultrasonik dalam suatu medium gas dipengaruhi oleh komposisi gas, sehingga perubahan kadar oksigen akan menyebabkan perubahan waktu tempuh (time of flight) gelombang ultrasonik.
Gambar 1. Sensor Oxygen Ultrasonic OCS-3F
Dalam sensor OCS-3F, gelombang ultrasonik dipancarkan dan diterima oleh elemen transduser di dalam sensor. Selisih waktu rambat gelombang ultrasonik kemudian diproses untuk menentukan konsentrasi oksigen dalam campuran gas. Karena metode ini tidak melibatkan reaksi kimia, sensor ultrasonik seperti OCS-3F memiliki stabilitas jangka panjang yang baik, tidak mengalami konsumsi material sensor, serta tidak memerlukan pemanasan awal (warm-up) sebagaimana pada sensor elektrokimia.
Pada aplikasi oxygen concentrator, sensor OCS-3F umumnya dipasang pada jalur keluaran oksigen untuk memantau kemurnian oksigen yang dihasilkan oleh sistem Pressure Swing Adsorption (PSA). Sensor ini mampu mengukur konsentrasi oksigen pada rentang tinggi (umumnya di atas 80% O₂), sehingga sangat sesuai untuk memastikan bahwa oksigen yang dialirkan ke pasien memenuhi standar medis, yaitu sekitar 90–95% O₂.
Keunggulan utama sensor OCS-3F meliputi akurasi yang tinggi, respon cepat, ketahanan terhadap kelembapan, serta umur pakai yang panjang karena tidak terjadi degradasi elemen sensor akibat reaksi kimia. Oleh karena itu, sensor ini banyak digunakan pada peralatan medis modern yang membutuhkan pemantauan oksigen secara kontinu dan andal.
Pada artikel ini, sensor OCS-3F digunakan untuk melakukan pendeteksian konsentrasi oksigen pada udara bebas yang telah dimurnikan menggunakan oxygen concentrator. Sensor tersebut diintegrasikan dengan sistem berbasis Arduino (Lihat Gambar 2) untuk memperoleh data konsentrasi oksigen secara real-time.
Gambar 2. Schematic sensor OCS-3F dengan Arduino nano
Implementasi pemrograman Arduino yang digunakan dalam proses pengukuran dan pengolahan data sensor disajikan pada potongan kode berikut.
// www.gapmekatron.com
// https://catatanfisikawan.blogspot.com/
#include "Wire.h"
void setup() {
Serial.begin(9600);
}
void loop() {
typedef unsigned char u8;
typedef unsigned int u16;
int inByte;
u8 temp;
u8 i, j, o2[12];
u16 o2c, o2f, o2t; //Define oxygen concentration, flow rate and temperature
//When character arrive over the serial port ..
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// read all the available characters
while (Serial.available() > 0) {
inByte = Serial.read();
//---Receiving part---
if ((o2[0] == 0x16) && (o2[1] == 0x09) && (o2[2] == 0x01)) //Determine if the first two bytes are received correctly, I is the global variable
{
o2[i] = inByte;
i++;
}
else //If one of the first three bytes received is incorrect, the first two bytes will be judged
{
if ((o2[0] == 0x16) && (o2[1] == 0x09))
{
if ( inByte == 0x01)
{
o2[2] = inByte;
i++;
}
else
{
i = 0;
for (j = 0; j < 12; j++)
{
o2[j] = 0;
}
}
}
else
{
if (o2[0] == 0x16)
{
if ( inByte == 0x09)
{
o2[1] = inByte;
i++;
}
else
{
i = 0;
for (j = 0; j < 12; j++)
{
o2[j] = 0;
}
}
}
else
{
if ( inByte == 0x16)
{
o2[0] = inByte;
i++;
}
else
{
i = 0;
for (j = 0; j < 12; j++)
{
o2[j] = 0;
}
}
}
}
}
//---Receiving part---
if (i == 12) //Data received complete, start calibration
{
temp = 0;
for (j = 0; j < 12; j++)
{
temp += o2[j];
}
if (temp == 0) //Check passed, calculate oxygen concentration, flow, temperature value
{
o2c = o2[3] * 256 + o2[4]; //Oxygen concentration
o2f = o2[5] * 256 + o2[6]; //Oxygen flow value
o2t = o2[7] * 256 + o2[8]; //Oxygen temperature
}
i = 0;
for (j = 0; j < 12; j++) //Initialize array
{
o2[j] = 0;
}
}
}
}
//--O2
Serial.print("O2 : ");
Serial.print(o2c/100);
Serial.print(o2c/10%10);
Serial.print(".");
Serial.print(o2c%10);
Serial.println("%");
//--Flow
Serial.print("Flow : ");
Serial.print(o2f/10%10);
Serial.print(".");
Serial.print(o2f%10);
Serial.println("L/min");
//--Temperature
Serial.print("Temp : ");
Serial.print(o2t/100);
Serial.print(o2t/10%10);
Serial.print(".");
Serial.print(o2t%10);
Serial.println("Celcius");
delay(2000);
}
