суббота, 31 октября 2009 г.

Переменный резистор

Переменный резистор (потенциометр) - позволяет изменять собственное сопротивление. Подключив его к arduino получаем хороший инструмент контроля/настройки чего либо :)

У потенциометра три ноги - крайние подключаем к земле и +5В, а со средней снимаем выходное напряжение - подключим, например, к аналоговому входу 0. В крайнем правом положении на ней будет 0В, а в крайнем левом +5В.

Код программы, загружаемой в Arduino:

#define ANALOG_IN  0 // Порт, к которому подключен переменный резистор


int avalue = 0 // Здесь мы храним данные со второго порта


void setup() {
    Serial.begin(9600); 
}


void loop() {
   avalue = analogRead(ANALOG_IN); // считываем значение с нулевого аналогового порта.
   Serial.println(avalue);  // отправляем данные на COM порт.
}

Вот и все, теперь нажав на кнопку "Serial monitor" в Arduino IDE мы увидим бегущие цифры, а вращая "крутилку" :))) потенциометра - будем наблюдать за их изменением :)
Это можно использовать, например, для ручного изменения яркости светодиода. Есть два варианта:
1) Подключить анод (плюс, длинная нога) светодиода к средней ноге потенциометра, а катод (минус, короткая нога), через резистор (рассчитывается из характеристик светодиода, но обычно 1кОм хватает ) к земле.

2) Либо не меняя первоначальной схемы, подключить анод к цифровому выходу с ШИМ (PWM) (Широтно-импульсная модуляция) Arduino, а дальше как обычно, через резистор, к земле. ШИМ позволяет получить аналоговый сигнал средствами цифровых портов. На выход будет подаваться напряжение в 5В с определенной частотой. Так, например, для получения напряжения 2,5В надо подавать 5В в два раза реже. Необходимо изменить вышеприведенную программу:




#define ANALOG_IN  0 // Порт, к которому подключен переменный резистор
#define ledPin 11 // Порт, к которому подключен светодиод. (11 порт с PWM )

int avalue = 0; // Здесь мы храним данные с нулевого порта

void setup() {
}

void loop() {
   avalue = analogRead(ANALOG_IN); // считываем значение с нулевого порта.
   analogWrite(ledPin, avalue/4); // Т.к. указать надо значение 0..255, а приходит 0..1023 - делим на 4.
}

1 коммент.:

Анонимный комментирует...

в #define ";" не ставить!)

Добавить закладку!

clix - ñîöèàëüíûå çàêëàäêè