Если вам нужно измерять с помощью ардуины напряжения превышающие напряжение питания или измерять сопротивление резистивного датчика — вам необходим резисторный делитель напряжения.
На деле это очень просто — два резистора и всё:

К выводу верхнего резистора (R1) подключаем измеряемое напряжение (Uвх) — со средней точки снимаем поделённое (Uвых).
Значение выходного напряжения зависит от соотношения сопротивлений (и входного напряжения естественно):

Обратите внимание — важно только соотношение сопротивлений, например, если сопротивления равны, то входное напряжение поделится на 2.
А что бы через делитель не шёл слишком большой ток (разряжая батарею и грея резисторы) стоит выбирать номиналы в еденицы-десятки килоом.
Что со всем этим можно сделать:
Измерение напряжения питания
Например, имеется тяговый 12В аккумулятор на роботе и надо знать его текущее состояние, что бы вовремя подъехать на зарядку. Подключим «плюс» батареи к верхнему резистору делителя, и объединим земли — «минус» батареи робота и GND ардуины.

Измерения будем просто выводить в сом-порт:
// аналоговый пин подключенный к средней точке делителя
const int batterySensorPin = A0;
int batterySensorValue = 0;
float batteryVoltage = 0;
// 5V/1024 значений = 0,004883 В/значение
const float voltPerUnit = 0.004883;
//"рассчёт делителя"
const float R1 = 2;
const float R2 = 1;
//коэффициент для расчёта напряжения на входе делителя
const float dividerRatio = (R1+R2)/R2;
//коэффициент перевода имерений в напряжение
const float voltRatio = voltPerUnit * dividerRatio;
void setup() {
Serial.begin(9600);
}
void loop() {
batterySensorValue = analogRead(batterySensorPin);
// рассчитаем в человеко-понятных вольтах
batteryVoltage = batterySensorValue * voltRatio;
//и выведем результаты в ком-порт:
Serial.print("batterySensorValue = " );
Serial.print(batterySensorValue);
Serial.print(" " );
Serial.print("batteryVoltage = " );
Serial.println(batteryVoltage);
delay(1000);
}
Получилось так:

для наглядности взял совершенно дохлую, не заряженную батарею и подключил нагрузку.
Датчик положения(угла поворота)
Потенциометр(или подстроечник) — это готовый регулируемый делитель. Крутитим ручку — бегунок ездит по резистивной дорожке и меняет соотношение сопротивлений плечей:

Тоесть можно воткнуть крайние ноги в землю и в питание(5В), а со средней снимать напряжение зависящее от угла поворота ручки.
В качестве примера можно взять стандартный скетч knob:
#include <Servo.h>
Servo myservo; // создаём обьект servo
int potpin = 0; // на A0 подключим среднюю ногу потенциометра
int val; // сюда будем считывать
void setup()
{
myservo.attach(9); // на 9 ноге у нас будет серва
}
void loop()
{
val = analogRead(potpin); // читаем значение с А0 ( получается от 0 до 1023)
val = map(val, 0, 1023, 0, 179); // преобразуем это в диапазон 0-180 для управления сервой
myservo.write(val); // и поворачиваемсерву на получившийся угол
delay(15); // задержка
}
схема для примера проста как угол дома:

поэтому работает:

Много резисторов и серв, и зачем такая связка может понадобиться можно увидеть здесь.
Резистивные датчики (фоторезистор, терморезистор)
Некоторые датчики меняют своё сопротивление в зависимости от изменений измеряемой величины — например фоторезистор или терморезистор. Чувствовать изменение сопротивления контроллер не может — зато воткнув наш датчик в одно из плечей делителя сможем измерить изменение напряжения:

«Х» на полке у нижнего резистора символизирует некую физическую величину к которой данный Х-резистор не равнодушен.
Тут, как и в примере с потенциометром, мы запитали делитель от стабильного известного напряжения — напряжения питания МК (5В), сопротивление верхнего резистора постоянно, так что напряжение со средней точки будет зависеть только от сопротивления датчика(нижнего резистора).
Узнаем освещённость во внешнем мире:

Скетч — подрезанный AnalogInOutSerial:
const int analogInPin = A0; //на A0 подключим среднюю ногу делителя
int sensorValue = 0; // тут будем хранить значения с фоторезистора
void setup() {
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(analogInPin); //считываем значение
Serial.print("sensor = " ); // и самым тупым образом выводим его в сиреал
Serial.println(sensorValue);
delay(500); // с задержкой
}
Он видит свет!

Ещё по теме:
Всё о резисторах
Потенциометр
фоторезистор
Терморезистор (там скорее термостабилитрон, но суть совершенно та же)
