Skip to content

From ADC value to voltage and measurement

Which voltage and temperature does my ADC value correspond to?

Answer: Når du bygger en prototype med en mikrocontroller, læser den en analog sensor som et heltal: på en Arduino Uno fra 0 til 1023 (10 bit). Beregneren omregner tallet til spænding ud fra referencespændingen og opløsningen, og videre til den fysiske størrelse for en lineær sensor: størrelse = (U − offset) ÷ følsomhed. Standardtallene er temperatursensoren TMP36 fra databladet. Har du en anden sensor, taster du dens offset og følsomhed fra dens datablad.

Formula

U = ADC-værdi ÷ (2^bits − 1) × U_ref

Størrelse = (U − offset) ÷ følsomhed (lineær sensor fra databladet)

TMP36: offset 0,5 V og følsomhed 0,01 V/°C, så 0,75 V = 25 °C

Opløsning = U_ref ÷ (2^bits − 1). Mindste ændring = opløsning ÷ følsomhed

Symbols and units in the formula
SymbolMeaningUnit
adcRead ADC value (e.g. from analogRead)—
bitsADC resolution—
urefReference voltageV
offsetSensor voltage at 0 (offset)V
foelsomhedSensor sensitivityV pr. enhed
=Measured size (e.g. °C)—
=Input voltageV
=Resolution per stepmV
=Minimum change the sensor can detect—

Validity and source

Source
Arduino analogRead()-reference (10 bit, 0-1023) and TMP36 datasheet (Analog Devices: 10 mV/°C, 500 mV at 0°C)

Does not apply when

  • Arduino's own documentation converts using 1023 (2^bits − 1). Some books divide by 1024; the difference is less than 0.1% and only matters at full scale. The reference voltage from USB is rarely exactly 5.00 V: measure it with a multimetre if your measurements need to be accurate.

Worked example

The calculator's own default values inserted. The figures are calculated with exactly the formula the tool uses.

Substituted

  • Read ADC value (e.g. from analogRead)154
  • ADC resolution10
  • Reference voltage5 V
  • Sensor voltage at 0 (offset)0.50 V
  • Sensor sensitivity0.01 V pr. enhed

Giver

  • Measured size (e.g. °C)25.3
  • Input voltage0.753 V
  • Resolution per step4.89 mV
  • Minimum change the sensor can detect0.49

The calculator itself is locked

Create a free user account to unlock all articles, calculators, templates and range — and get access to quizzes and classes. It takes less than a minute: name, email and a password. No payment card.

Want to try something first? See what you can use without an account — the junior zone, the encyclopedia, the videos and more.

Sådan bruger du den

Når du bygger en prototype i teknologi eller programmering med en mikrocontroller og en analog sensor, og tallet fra analogRead() skal blive til en spænding og en temperatur eller et tryk. Beregneren viser også, hvor fint din opstilling kan måle.

Step by step

  1. Læs ADC-værdien i Serial Monitor.
  2. Vælg ADC'ens opløsning: Arduino Uno er 10 bit, ESP32 er 12 bit.
  3. Skriv referencespændingen. Mål den med multimeteret, hvis du vil være præcis.
  4. Skriv sensorens offset og følsomhed fra databladet.
  5. Aflæs spændingen, den målte størrelse og den mindste ændring, du kan se.

Typical errors

  • At regne med 5 V, når boardet faktisk får 4,8 V fra USB. Det giver flere graders fejl.
  • At glemme offset på TMP36. Uden den bliver 25 °C til 75 °C.
  • At regne med 10 bit på et board med 12 bit, eller omvendt.
  • At stole på én måling. Tag gennemsnittet af 10-20 aflæsninger i koden.

Examples from everyday life

TMP36 på en Arduino Uno

Din temperaturlogger læser 154 på A0. Arduinoen kører på USB med 5 V reference, og TMP36 har 0,5 V offset og 10 mV/°C.

Read ADC value (e.g. from analogRead)
154
ADC resolution
10 bit (0-1023, fx Arduino Uno)
Reference voltage
5 V
Sensor voltage at 0 (offset)
0.5 V
Sensor sensitivity
0.01 V pr. enhed

It means: Indgangen får 0.753 V, og det svarer til 25.3 °C. Hvert trin er 4.89 mV, så du kan kun se ændringer på ca. 0.49 °C.

Samme sensor på en ESP32

Du flytter loggeren til en ESP32 med 12 bit og 3,3 V reference. Loggeren står i jeres drivhusprojekt en varm dag og læser 1.100.

Read ADC value (e.g. from analogRead)
1,100
ADC resolution
12 bit (0-4095, fx ESP32, Arduino Due)
Reference voltage
3.3 V
Sensor voltage at 0 (offset)
0.5 V
Sensor sensitivity
0.01 V pr. enhed

It means: Det giver 0.886 V og 38.6 °C. Opløsningen er nu 0.81 mV pr. trin, ca. 0.08 °C. ESP32'ens ADC er dog ikke lineær nær 0 V og 3,3 V, så kalibrér mod et termometer.

Trykføler 0-5 V

En trykføler giver ifølge databladet 0 V ved 0 kPa og 0,05 V pr. kPa. Arduinoen læser 512.

Read ADC value (e.g. from analogRead)
512
ADC resolution
10 bit (0-1023, fx Arduino Uno)
Reference voltage
5 V
Sensor voltage at 0 (offset)
0 V
Sensor sensitivity
0.05 V pr. enhed

It means: Spændingen er 2.502 V, og trykket er 50 kPa. Du kan skelne ændringer på ca. 0.1 kPa.

Rule of thumb

Arduino Uno: 1 trin ≈ 4,9 mV. TMP36: 1 °C = 10 mV ≈ 2 trin.

How to check the answer

Mål spændingen på sensorens udgang med multimeteret. Den skal passe med beregnerens spænding inden for et par trin.