Creating a library for DF Robot - Water Level Transmitter
-
Hi there,
I am Master's Student currently working on remote monitoring with IoT.I bought an Industrial water level sensor - DF robot Throw-in Type Water Level Transmitter coupled with an Analog Current to Voltage Converter.
Find the Product Wiki below:
-
Throw-in Type Water Level Transmitter - https://wiki.dfrobot.com/Throw-in_Type_Liquid_Level_Transmitter_SKU_KIT0139
-
Analog Current to Voltage Converter - https://wiki.dfrobot.com/Gravity__Analog_Current_to_Voltage_Converter_for_4~20mA_Application__SKU_SEN0262
Let me start off with saying I am very new to this field and to micropython. I have scoured the internet for a library for this sensor but I can't seem to find one.
I understand that this sensor would use both the ADC and I2C functions on my pycom board but I am struggling to integrate these two function in order to develop a new library for this sensor. I am also aware that developing an entire library for this sensor is far above where my level of python coding is at in this moment. I was hoping that someone could help me with this as I have somewhat hit a brick wall. Any example code I could use as a guide or any pointer on how to begin writing the library would help so much.
Below is sample code given in the product wiki but as you will see, this code is in C/C++ language.
/*********************************************************** DFRobot Gravity: Analog Current to Voltage Converter(For 4~20mA Application) SKU:SEN0262 GNU Lesser General Public License. See <http://www.gnu.org/licenses/> for details. All above must be included in any redistribution ****************************************************/ #define ANALOG_PIN A1 #define RANGE 5000 // Depth measuring range 5000mm (for water) #define CURRENT_INIT 4.00 // Current @ 0mm (uint: mA) #define DENSITY_WATER 1 // Pure water density normalized to 1 #define DENSITY_GASOLINE 0.74 // Gasoline density #define PRINT_INTERVAL 1000 int16_t dataVoltage; float dataCurrent, depth; //unit:mA unsigned long timepoint_measure; void setup() { Serial.begin(9600); pinMode(ANALOG_PIN, INPUT); timepoint_measure = millis(); } void loop() { if (millis() - timepoint_measure > PRINT_INTERVAL) { timepoint_measure = millis(); dataVoltage = analogRead(ANALOG_PIN); dataCurrent = dataVoltage / 120.0; //Sense Resistor:120ohm depth = (dataCurrent - CURRENT_INIT) * (RANGE/ DENSITY_WATER / 16.0); //Calculate depth from current readings if (depth < 0) depth = 0.0; //Serial print results Serial.print("depth:"); Serial.print(depth); Serial.println("mm"); } }```
Your help would be greatly appreciated.
Best wishes
Roberto
-
-
@Roberto-De-Oliveira said in Creating a library for DF Robot - Water Level Transmitter:
I understand that this sensor would use both the ADC and I2C
This sensor use only ADC.
Look into docs how to use ADC:
https://docs.pycom.io/firmwareapi/pycom/machine/adc/#appdo not have this sensor then you must test it self. Below code can contain errors but should be good for start:
import machine from time import sleep_ms ANALOG_PIN = 'P16' RANGE = 5000 # Depth measuring range 5000mm (for water) CURRENT_INIT=4.00 # Current @ 0mm (uint: mA) DENSITY_WATER=1 # Pure water density normalized to 1 DENSITY_GASOLINE = 0.74 # Gasoline density PRINT_INTERVAL = 1000 adc = machine.ADC() # create an ADC object apin = adc.channel(pin=ANALOG_PIN, attn=ADC.ATTN_11DB) # create an analog pin on P16 while True: dataVoltage = apin() dataCurrent = dataVoltage / 120.0 # Sense Resistor:120ohm depth = (dataCurrent - CURRENT_INIT) * (RANGE/ DENSITY_WATER / 16.0) #Calculate depth from current readings if (depth < 0): depth = 0.0; #Serial print results print('depth:', depth, 'mm') sleep_ms(PRINT_INTERVAL)
Above your sensor is connected to pin P16 - you can choose different one.
look also at attenuation - i choose ADC.ATTN_11DB but maybe different should be used.
Remember also that all pins work on 3V3. Excceeding it can damage the board.