CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Резисторный делитель

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

К выводу верхнего резистора (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);  // с задержкой                    
}

Он видит свет!


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

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.