Урок 4 - Подключаем потенциометр к Arduino. Пишем код в Ardiono IDE

.Урок 4 - Подключаем потенциометр к Arduino. Пишем код в Ardiono IDE

Подключить потенциометр не составит труда. Тем более в интернете очень много примеров. Написать подходящий код для проекта это уже сложнее.

Выводим значения с потенциометра в Serial port.

const int analogInPin = A0;  // потенциометр
int sensorValue = 0;        // считанное значение
void setup() {
  Serial.begin(9600); 
}
void loop() {
  sensorValue = analogRead(analogInPin);            
  Serial.print("sensor = " );                       
  Serial.println(sensorValue);      
  delay(50);                     
}

Мы получим значения от 0 до 1024. Это потому что у ардуино 10 bit АЦП. Данный вывод можно сгладить

#define analogInPin A0           // потенциометр
const byte averageFactor = 5;   // коэффициент сглаживания показаний (0 = не сглаживать)
                                // чем выше, тем больше "инерционность"
int sensorValue = 0;            // считанное значение
void setup() 
{
  Serial.begin(9600); 
}
void loop() 
{
  int newSensorValue = analogRead(analogInPin);
  if (averageFactor > 0)        // усреднение показаний для устранения "скачков"
  {      
    sensorValue = (sensorValue * (averageFactor - 1) + newSensorValue) / averageFactor;  
    // <новое среднее> = (<старое среднее>*4 + <текущее значение>) / 5 
  } else {
    sensorValue=newSensorValue; // не делаем усреднений, что прочитали то и считаем выводом
  }
  Serial.print("sensor = " );
  Serial.println(sensorValue);
  delay(50);                     
}

Чем больше коэффициент сглаживания тем меньше верхний придел. Это видно по формуле. При коэффициенте = 2 максимальное значение будет 1022 при 5 максимум на выходе будет 1019.

sensor = 982
sensor = 990
sensor = 996
sensor = 1001
sensor = 1005
sensor = 1008
sensor = 1011
sensor = 1013
sensor = 1015
sensor = 1016
sensor = 1017
sensor = 1018
sensor = 1019
sensor = 1019
sensor = 1019

Это нужно учитывать при разработке программы. Можете конечно и не использовать сглаживание. Это ваш выбор.

Выводы Arduino 8bit. Как же нам быть? С потенциометра получаем от 0 до 1024 а на вывод можем подать от 0 до 255. Для решение данной задачи нам поможет функция map(value, fromLow, fromHigh, toLow, toHigh)

#define analogInPin A0           // потенциометр
const byte averageFactor = 5;   // коэффициент сглаживания показаний (0 = не сглаживать)
                                // чем выше, тем больше "инерционность"
int sensorValue = 0;            // считанное значение
void setup() 
{
  Serial.begin(9600); 
}
void loop() 
{
  int newSensorValue = analogRead(analogInPin);
  if (averageFactor > 0)        // усреднение показаний для устранения "скачков"
  {      
    sensorValue = (sensorValue * (averageFactor - 1) + newSensorValue) / averageFactor;  
    // <новое среднее> = (<старое среднее>*4 + <текущее значение>) / 5 
  } else {
    sensorValue=newSensorValue; // не делаем усреднений, что прочитали то и считаем выводом
  }
  int  val = map(sensorValue, 0, 1023, 0, 255);
  Serial.print("sensor = " );
  Serial.println(val);
  delay(50);                     
}

С помощью функции map() можно вывести инвертированные значения

 int  val = map(sensorValue, 0, 1023, 255, 0);

Если у вас есть предложения по реализации подключения потенциометра к Arduino или у вас возник вопрос. Пишите в коментарии.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

Вернуться в раздел: Уроки Arduino: Подключение датчиков и модулей к Arduino Дата публикации 20 декабря , 2017

Яндекс.Метрика

Portal-PK (Портал ПК) © 2015 - 2018 MiniYiiCMS Заказать сайт: f-studio.biz
Обратная связь
Подписаться на новости
RSS