## i want to map analog pins on 5volt between 0 to 1023 (10 bit resolution)

rankit0092
Posts: 16
Joined: Tue Jan 23, 2018 5:31 am

### i want to map analog pins on 5volt between 0 to 1023 (10 bit resolution)

I want to use my esp32 to measure a water quality parameters like pH, ORP etc. by ANALOG PINS
I have codes written for ARDUINO BOARD. so those codes give me output in a 10-bit resolution which is mapped between 0 to 5 volt.
but in an ESP32-WROOM board by default, it gives 12-bit resolution(0 to 4095) and which is mapped between 0 to 3.3 volt.

by using analogReadResolution(10) I'm able to change resolution but it gives me improper readings as the analog pins are mapped on 0 to 3.3 volt.
so how can I get readings like an Arduino analog pin???

when i give 5 volts, I want 1023 ADC reading on pin36 and 0 when I give 0-volt
insert how can I map ADC pins between 0 to 5 volt??

kolban
Posts: 1683
Joined: Mon Nov 16, 2015 4:43 pm
Location: Texas, USA

### Re: i want to map analog pins on 5volt between 0 to 1023 (10 bit resolution)

A voltage divider is a simple circuit for linearly dividing an input voltage to an output voltage. For example, if you have an input voltage of between 0 and 5V and you want an output voltage of between 0 and 3.3V then you want to divide your input voltage by 5/3.3 or approx 1.515..

for example:

5 / 1.515 = 3.3

If you google on the phrase "voltage divider" you will find a ton of hits. When we say the voltage divider is a circuit ... well ... technically it is ... but it consists of only two resistors. See the following:

https://learn.sparkfun.com/tutorials/voltage-dividers

In fact the example shown at that page is for conversion of 5V to 3.3V.
Free book on ESP32 available here: https://leanpub.com/kolban-ESP32

rankit0092
Posts: 16
Joined: Tue Jan 23, 2018 5:31 am

### Re: i want to map analog pins on 5volt between 0 to 1023 (10 bit resolution)

Hello, sir kolban,
sorry, sir, I cannot explain my problem properly.

in Arduino, if we read analog pin it gives output between 0 to 1023
means when I'm reading an analog pin and connect this pin to 5 volts I will receive 1023 on the serial monitor, (i'm connecting the analog pin to supply voltage for checking purpose, not with the sensor.)
when i connect this pin to 3.3 volt it gives 660 on serial monitor.
when i connect this pin to 0 volt it give 0 on serial..
I have codes they are designed only for Arduino.

but i want to use this code for esp32. and want same result.

now in ESP 32 I'm using pin 33. this pin is on 10 bit resolution. for esp32 when I'm connecting this pin to 3.3 it gives 1023 perfect but I want same reading as Arduino

so I must have to change this pins reference voltage to 5v same as Arduino. but don't know how to do this.
and I don't want to change those codes.
so I just want that if I'm giving external 5 volts to analog pin then I want 1023, for 3.3 I want 660 something, and for 0 volt 0
so is there any option to achieve this???
or guide me to any other option

rankit0092
Posts: 16
Joined: Tue Jan 23, 2018 5:31 am

### Re: i want to map analog pins on 5volt between 0 to 1023 (10 bit resolution)

kolban wrote:A voltage divider is a simple circuit for linearly dividing an input voltage to an output voltage. For example, if you have an input voltage of between 0 and 5V and you want an output voltage of between 0 and 3.3V then you want to divide your input voltage by 5/3.3 or approx 1.515..

for example:

5 / 1.515 = 3.3

If you google on the phrase "voltage divider" you will find a ton of hits. When we say the voltage divider is a circuit ... well ... technically it is ... but it consists of only two resistors. See the following:

https://learn.sparkfun.com/tutorials/voltage-dividers

In fact the example shown at that page is for conversion of 5V to 3.3V.

Hello, sir kolban,
sorry, sir, I cannot explain my problem properly.

in Arduino, if we read analog pin it gives output between 0 to 1023
means when I'm reading an analog pin and connect this pin to 5 volts I will receive 1023 on the serial monitor, (i'm connecting the analog pin to supply voltage for checking purpose, not with the sensor.)
when i connect this pin to 3.3 volt it gives 660 on serial monitor.
when i connect this pin to 0 volt it give 0 on serial..
I have codes they are designed only for Arduino.

but i want to use this code for esp32. and want same result.

now in ESP 32 I'm using pin 33. this pin is on 10 bit resolution. for esp32 when I'm connecting this pin to 3.3 it gives 1023 perfect but I want same reading as Arduino

so I must have to change this pins reference voltage to 5v same as Arduino. but don't know how to do this.
and I don't want to change those codes.
so I just want that if I'm giving external 5 volts to analog pin then I want 1023, for 3.3 I want 660 something, and for 0 volt 0
so is there any option to achieve this???
or guide me to any other option

Nespressif
Posts: 39
Joined: Tue Sep 12, 2017 11:25 am

### Re: i want to map analog pins on 5volt between 0 to 1023 (10 bit resolution)

Hi, I think the simplest way to do it is with a function that makes the rule of three....
For 5v then 1024
Xv then?????

(Xv*1024)/5

Greetings

mikemoy
Posts: 488
Joined: Fri Jan 12, 2018 9:10 pm

### Re: i want to map analog pins on 5volt between 0 to 1023 (10 bit resolution)

What your after is called "Aref" pin. This pin allows the A/D converter to work at different voltage ranges.
The issue here is that the "ARDUINO BOARD" has this pin but the ESP32 (from what I am reading here) does not, and is fixed at +3.3v
So your going to have to accomplish this in hardware via say a resistor divider.
https://www.espressif.com/sites/default ... ual_en.pdf

Archibald
Posts: 107
Joined: Mon Mar 05, 2018 12:44 am

### Re: i want to map analog pins on 5volt between 0 to 1023 (10 bit resolution)

The ESP32 works on 3.3V so you will have to use a voltage divider. Applying up to 5 volts to your ESP32 is quite likely to destroy your ESP32.

The circuit diagram below shows a voltage divider R1 and R2. Espressif documentation on the ADC (here) suggests using a 0.1μF capacitor to reduce noise. A higher value of capacitor would further reduce any noise picked up but would slow down measurement of fast changes of input voltage. divider1.png (7.33 KiB) Viewed 5068 times
The ESP32 ADC does not work right down to zero volts input, as shown by illustrative calibration graph in the same documentation. If you need to be able to measure small voltages, you could add an extra resistor R3 which would be a relatively high value.

You will need to calibrate the ADC as described in the documentation (with the voltage divider circuit in place). With R3 in place, applying zero volts to the circuit input should not give a digital value of zero. Applying 5V to the circuit input should not give maximum 12-bit binary value (4095). You will then need to use these two calibration digital values in your code to convert to a range of 0 to 1023. If you do not use R3, you will need to calibrate with a small voltage that gives a digital reading that is not zero.

rankit0092
Posts: 16
Joined: Tue Jan 23, 2018 5:31 am

### Re: i want to map analog pins on 5volt between 0 to 1023 (10 bit resolution)

I have 8 analog sensors for water quality measurement. They all have metering circuit to measure electrode readings.
For example [url]https://www.dfrobot.com/wiki/index ... U:SEN0165)

these sensors and metering circuits are design for an ARDUINO for 5volt and for 10 bit resolution.( 5v AREF that gives 0-1023 range) all the codes are design for Arduino.
So they all are giving me proper output.

But I want send those 8 sensors data over WiFi..and ESP32 has more analog pins..

Using some functions I'm able to change the resolution to 10 bit...
But the problem is, this gives me 10 bit resolution for 3.3 volt(for 0 it goves 0 and for 3.3 it gives 1023) all the codes and output depends on ADC counts
And ESP32 gives 1023 on 3.3v so i will never get proper output for voltage greater then 3.3.

So how can I achieve same result as Arduino..
I want same 5v 10 bit resolution as Arduino.. because changing all the code is time consuming and may be I will not getting proper results..

So how can I achieve this..
Obviously In ESP32 for above 3.3v I get 1023.
So is there anything to change AREF of ESP32 !?
Or
Is there any coding logic to map 5volt 10 bit resolution to 3.3v using map function for ADC count?

Any suggestions are appreciated.

mikemoy
Posts: 488
Joined: Fri Jan 12, 2018 9:10 pm

### Re: i want to map analog pins on 5volt between 0 to 1023 (10 bit resolution)

Archibald, explained what you need to do. You need to add a voltage divider to each of your A/D input pins. There is no software way around this.

ESP_krzychb
Posts: 307
Joined: Sat Oct 01, 2016 9:05 am
Contact:

### Re: i want to map analog pins on 5volt between 0 to 1023 (10 bit resolution)

mikemoy wrote:Archibald, explained what you need to do. You need to add a voltage divider to each of your A/D input pins. There is no software way around this.
BTW: I can listen to Afrotechmods all day log. Like to EEVblog 