Считывание показаний датчиков с помощью Arduino
Легкость, с которой Arduino может получить значения с датчиков, является одной из особенностей, которая делает эти платы такими полезными.
Датчики – это устройства, которые преобразуют физические величины, например, яркость света или температуру, в электрическую величину. Например, термопара выдает напряжение, пропорциональное её температуре. Существует множество различных датчиков:
- датчик освещенности;
- датчик движения;
- датчик температуры;
- датчик магнитного поля;
- датчик силы тяжести;
- датчик влажности;
- датчик вибрации;
- датчик давления;
- датчик электрических полей;
- звуковой датчик;
- датчик положения.
Эти датчики используются в тысячах различных применений, включая промышленность, машины, космонавтику, автомобили, медицину и робототехнику.
Эксперимент 1: датчик расстояния
В этом эксперименте мы будем использовать датчик расстояния Sharp GP2Y0A21YK для управления яркостью светодиода.
Необходимые комплектующие
- 1 x Arduino Mega2560;
- 1 x макетная плата;
- 1 x светодиод;
- 5 x перемычка;
- 1 x резистор 470 Ом;
- 1 X датчик расстояния Sharp GP2Y0A21YK.
Схема соединений
Датчик расстояния Sharp может обнаруживать объекты на расстояниях от 10 до 80 см. Он излучает импульс инфракрасного света, а затем определяет угол, на котором отражается этот свет. Чем дальше объект, тем ниже выходное напряжение. Если датчик не принимает отраженный свет, то напряжение на его выходе составит 0 В. Если объект находится на расстоянии 10 см или ближе, выходное напряжение будет равно 5 В (в этом эксперименте мы подаем на датчик напряжение питания 5 В).
Выход датчика подключается к аналоговому входу Arduino. Аналого-цифровой преобразователь (ADC) Arduino затем преобразует это напряжение в значение от 0 до 1023. Затем это значение преобразуется в значение от 0 до 255, и это число используется для установки коэффициента заполнения сигнала на широтно-модулированном (ШИМ) выходе, который управляет яркостью светодиода. В результате, чем ближе объект к датчику расстояния, тем ярче светит светодиод.
Код
const int pwm = 2 ; // определение вывода для ШИМ
const int adc = A0 ; // определение вывода для АЦП
void setup()
{
pinMode(pwm,OUTPUT) ; // настроить вывод, подключенный к светодиоду, на выход
}
void loop()
{
int sensor_val = analogRead(adc);
/*
----------- функция map ------------
Данная функция масштабирует выходное значение АЦП, который
является 10-битным и выдает значения от 0 до 1023,
в значения от 0 до 255 для функции analogWrite,
которая принимает значения только в диапазоне от 0 до 255.
*/
sensor_val = map(sensor_val, 0, 1023, 0, 255);
analogWrite(pwm, sensor_val); // установить значение датчика в ШИМ
}
Видео
Эксперимент 2: датчик температуры
В этом эксперименте Arduino будет измерять температуру с помощью микросхемы датчика LM35. LM35 – это низковольтная микросхема, которая требует питания постоянным напряжением от +4 до +20 вольт. Это идеально, потому что мы можем подключить датчик к выводу +5V на плате Arduino. LM35 имеет всего 3 вывода: два для питания и один для аналогового выхода. Выходной вывод представляет собой аналоговый выход, напряжение на котором линейно пропорционально температуре в градусах Цельсия. Выходной сигнал находится в диапазоне от 0 до 1,5 вольта. Выходное напряжение 9 В соответствует температуре 0°C, и при каждом повышении температуры на один градус оно увеличивается на 10 мВ. Чтобы преобразовать выходное напряжение в температуру, вам необходимо просто разделить выходное напряжение в мВ на 10. Например, если выходное напряжение равно 315 мВ (0,315 В), температура равна 31,5°C.
Назначение выводов микросхемы LM35
Необходимые комплектующие
- 1 x датчик температуры LM35;
- 2 x светодиод;
- 1 x коробок спичек;
- 2 X резистор 470 Ом;
- 1 x Arduino Mega2560;
- 1 x макетная плата;
- 10 x перемычка.
Схема соединений
Код
Выходной вывод LM35 (вывод 2) подключен к выводу A0 Arduino. Код использует функцию analogRead()
для преобразования выходного напряжения в число между 0 и 1023. Умножение этого числа на 0.48828125 преобразует его в градусы Цельсия, которые и отображаются в мониторе последовательного порта.
const int adc = 0; // назначение вывода 0 для работы с АЦП
const int high = 8; // для включения и выключения желтого светодиода
const int low = 9; // для включения и выключения зеленого светодиода
void setup()
{
Serial.begin(9600); // запуск последовательного порта на скорости 9600
pinMode(high, OUTPUT); // установка выводов светодиодов в режим выхода
pinMode(low, OUTPUT);
}
void loop()
{
// чтение аналогового напряжения и сохранение его как целое число
int adc = analogRead(0);
// преобразование показаний датчика в градусы Цельсия
adc = adc * 0.48828125;
Serial.print("TEMPRATURE = "); // вывод в монитор последовательного порта
Serial.print(adc); // показания температуры
Serial.print("*C"); // TEMPRATURE = 27*C
Serial.println(); // закрыть строку
delay(1000); // задержка 1 секунда
/*
ЛОГИКА:
если (температура (adc) > 70°C)
зажечь желтый светодиод
погасить зеленый светодиод
иначе
погасить желтый светодиод
зажечь зеленый светодиод
*/
if(adc > 70)
{
digitalWrite(high, HIGH);
digitalWrite(low, LOW);
}
else
{
digitalWrite(high, LOW);
digitalWrite(low, HIGH);
}
}