«

»

Распечатать Запись

Калибровка аналогового датчика для Arduino

Схема

Аналоговый датчик (например, потенциометр, датчик света) подключается к аналоговому входу 2. Светодиод на цифровой выход 9.

2

Соедините светодиодный цифровой вывод 9 с резистором 220 Ом для ограничения тока. Подключите фотоэлемент к выводу 5, а затем к аналоговому выводу 0 с резистором 10 кОм в качестве подтягивающего на землю.

Электрическая схема

1
Программа

До установки, необходимо задать начальные значения минимального и максимального уровня,вот так:

int sensorMin = 1023; // минимальное значение
int sensorMax = 0; // максимальное значение

Они могут показаться обратными. Первоначально, вы устанавливаете высокий уровень и читаете значение ниже, сохраняя его как новый минимум. Кроме того, вы установите максимально низкий и будете считывать что-нибудь выше, новый максимум, вот так:

// калибровка на протяжении 5с
while (millis () < 5000) {
sensorValue = analogRead (sensorPin);

// установим максимальное значение
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}

// установим минимальное значение
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
}

Таким образом, любые дальнейшие показания могут быть сопоставлены в диапазоне между этим минимальным и максимальным:

// применим калибровку
sensorValue = map (sensorValue, sensorMin, sensorMax, 0, 255);

Вот целая программа:

/ *
Калибровка

Демонстрируется одна методика калибровки датчика.

Схема:
* аналоговый датчик (потенциометр например): аналоговый вход 0
* светодиод: цифровой пин 9 и к земле

http://arduino.cc/en/Tutorial/Calibration

*/

// Эти константы не будут изменятся:
const int sensorPin = A0; // вывод к которому подключен датчик
const int ledPin = 9; // вывод к которому подключен светодиод

// переменные:
int sensorValue = 0; // значение датчика
int sensorMin = 1023; // минимальное значение датчика
int sensorMax = 0; // максимальное значение датчика

void setup () {
// подключаем светодиод как индикатор начала работы:
pinMode (13, OUTPUT);
digitalWrite (13, HIGH);

// калибровка на протяжении 5 с
while (millis () < 5000) {
sensorValue = analogRead (sensorPin);

// установим максимальное значение
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}

// установим минимальное значение
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
}

// выключим светодиод вконце
digitalWrite (13, LOW);
}

void loop () {
// считываем информацию с датчика:
sensorValue = analogRead (sensorPin);

// применяем калибровку
sensorValue = map (sensorValue, sensorMin, sensorMax, 0, 255);

// если значение сенсора вышло за пределы калибровки
sensorValue = constrain (sensorValue, 0, 255);

// включить светодиод по калибровочному значению:
analogWrite (ledPin, sensorValue);
}

Постоянная ссылка на это сообщение: http://meandr.org/archives/11816

Добавить комментарий