Подключение потенциометра к Arduino.

      Потенциометром называют переменный (подстроечный) резистор включенный как делитель напряжения:



      Сопротивление переменного резистора между выводами 1 и 2 - постоянно, так как длина резистивного вещества между выводами 1 и 2 постоянна, примем его равным R. А вот сопротивление между выводами 1 и 3, а также между 2 и 3 зависит от угла поворота ручки, так как длина резистивного вещества между движком, который подключен к выводу 3 и выводами 1 и 2 зависит от угла поворота ручки. Причем, при повороте из крайнего левого положения по часовой стрелке в крайнее правое, сопротивление между выводом 1 и выводом 3 увеличивается, а между выводом 3 и выводом два уменьшается. При вращении ручки против часовой стрелки наоборот, сопротивление между выводом 1 и 3 уменьшается, а между выводом 3 и 2 увеличивается.



      Если подключить резистор к источнику напряжения так, как показано на схеме, то напряжение между выводом 2 и выводом 3 будет зависеть от угла поворота ручки. Рассмотрим эквивалентную схему. Общее сопротивление двух резисторов равно R и оно постоянно, а сопротивление нижнего по схеме резистора r меняется от 0 до R, соответственно сопротивление верхнего по схеме резистора меняется от R до 0. Так как величина Up/R постоянная, то напряжение Ur прямопропорционально сопротивлению r, которое в свою очередь пропорционально углу поворота ручки переменного резистора. Таким образом, подключенный таким образом переменный резистор представляет собой не просто делитель напряжения, а делитель, коэффициент деления которого можно плавно изменять, получая напряжение от 0 до Up.

Проверим это утверждение на практике. Для этого соберем следующую схему:



      Используем программу вольтметра с предыдущего урока:

void setup() {
  Serial.begin (9600); 
  pinMode(14, INPUT); 
}

void loop() {
  float x;                             // вводим переменную x, типа float (переменная с плавающей точкой)
  x = float (analogRead(14))/(1023/5); // делим считанное значение на (1023/5), и преобразуем в тип float

   Serial.print(x);                    // выводим измеренное напряжение в монитор порта
   Serial.println("V");                // выводим букву V, чтобы было понятно, что это напряжение
   delay(1000);                        // просто подождем секундочку :)
}
Запустив программу, в мониторе порта можно наблюдать измеренное напряжение и убедиться, что напряжение зависит от угла повороту ручки переменного резистора.



Если подключить к плате Arduino светодиод, например к выводу 9, то немного изменив программу, можно регулировать яркость светодиода.



void setup() {
  pinMode(9, OUTPUT);       // пин 9 программируем как выход
  pinMode(14, INPUT);       // пин А0 программируем как вход
}

  void loop() {
  int x = analogRead(14)/4; // Так как считываемое функцией analogRead значение может иметь
                            // значение от 0 до 1023, а для формирования сигнала ШИМ
                            // необходимо значение от 0 до 255, поэтому считанное
                            // значение нужно разделить на 4.
  analogWrite(9, x);        // выводим новое значение x на вывод 9.
}


Кстати, преобразовать значение можно и с помощью функции map(), например так:
void setup() {
  pinMode(9, OUTPUT); 
  pinMode(14, INPUT); 
}

void loop() {
  int x = analogRead(14);
  x = map(x, 0, 1023, 0, 255); // переносим значение x пропорционально из диапазона
                               // от 0 до 1023 в новый диапазон от 0 до 255
  analogWrite(9,x);
}
Чем же удобнее применение функции map()? Ну например тем, что можно "перевернуть" диапазон. В примере выше, при повороте ручки резистора по часовой стрелке яркость светодиода будет уменьшаться, но если функцию map() переписать так:
void setup() {
  pinMode(9, OUTPUT); 
  pinMode(14, INPUT); 
}

void loop() {
  int x = analogRead(14);
  x = map(x, 0, 1023, 255, 0); // переносим значение x пропорционально из диапазона
                               // от 0 до 1023 в новый диапазон от 255 до 0
  analogWrite(9,x);
}
То при повороте ручки резистора по часовой стрелке - яркость светодиода будет увеличиваться.

Тригонометрические функция sin(), cos(), tan()

     





Далее...


Copyright © R9AL 2020 Все права защищены

Рейтинг@Mail.ru Яндекс цитирования