Попробуем поработать с аналоговым вводом — для этого используем , подключённый к аналоговому входу.
Крайние выводы переменного резистора подключаются к земле и +5V, а со среднего снимаем напряжение, зависящее от положения отводного контакта.
Т.е. если отводной контакт упирается в нижнее положение – то получаем 0V, а если в верхнее – то +5V.
В качестве примера можно воспользоваться стандартным скетчем AnalogInput (Sketchbook — Examples — Analog – AnalogInput)
принципиальная схема:
Код скетча:
/*
* AnalogInput
* by DojoDave <http://www.0j0.org>
*
* включает и выключает светодиод, подключённый к digital
* pin 13. Время задержки между включением и выключением
* светодиода зависит от величины, полученной от функции
* analogRead().
* В самом простом случае – получить аналоговое значение можно
* считывая напряжение с потенциометра, подключённого к
* to analog pin 2.
*
* http://www.arduino.cc/en/Tutorial/AnalogInput
*/
int potPin = 2; // потенциометр подключается к 2-му порту
int ledPin = 13; // светодиод подключается к digital pin 13
int val = 0; // переменная для хранения значения входного напряжения
void setup() {
pinMode(ledPin, OUTPUT); // настраиваем ledPin как выход
}
void loop() {
val = analogRead(potPin); // считываем значение с потенциометра
digitalWrite(ledPin, HIGH); // зажигаем светодиод
delay(val); // задержка, зависит от значения
digitalWrite(ledPin, LOW); // гасим светодиод
delay(val); // опять задержка
}
— как видно – это опять же несколько изменённый Blink, время задержки между включением/выключением светодиода зависит от уровня напряжения на входе analog input 2, к которому подключён средний вывод переменного резистора, включенного между землёй и +5V
Более наглядное представление можно получить используя не цифровой вывод -а, а аналоговый -а.
Для этого нужно изменить схему, подключив светодиод на один из -выводов – например, digital pin 9:
И соответствующим образом изменить скетч.
Однако, тут нужно учесть, что значение, получаемой от функции представляет собой целое число от 0 до 1023, а функция оперирует значениями между 0 и 255. Следовательно, нужно привести значение, полученное от analogRead к соответствующему уровню, например, просто разделив на 4.
/*
* Dimmer_pot
*/
int potPin = 2; // потенциометр подключается к 2-му порту
int ledPin = 9; // светодиод подключается к digital pin 9
int val = 0; // переменная для хранения значения входного напряжения
void setup()
{
}
void loop()
{
val = analogRead(potPin); // считываем значение с потенциометра
val = val/4; // конвертируем из 0-1023 к 0-255
analogWrite(ledPin,val); // устанавливаем значение
}
Ну во-первых — это просто пример ввода аналого сигнала — светодиод чисто для идикации того что считали;) во-вторых — с 50к потенциометра будет, мягко говоря, неравномерная хр-ка «угол поворота/яркость», а тут можно программно масштабировать=)
Подскажите, почему при моделировании схемы аналогового ввода с Ардуины (мега328) в Протеусе я получаю на выходе функции analogRead(0) число, равное 1023, которое я вижу виртуальным терминалом? То есть не происходит, собственно говоря, ацепирование входа.
Как говорится «Ви путете смияца»
Но, скорей всего вы не запитали АЦП=)
Подключите 20-ю ногу (AVCC) к терминалу POWER (ну или к тому выводу потенциометра, куда подаёте +5В)
PS: Порлогаю, вы используете анимированный резистор, если нет — рекомендую. Называется POT-HG и его можно «крутить» во время симуляци — очень удобно.
Удачи=)
Добрый день. Подключаю потенциометр — крайние ноги к +5 и GND, среднюю на аналоговый пин 0. Делаю val=analogRead(0) и Serial.println(val,DEC); в итоге в крайнем правом положении в консоль выводятся числа от 200 до 300, а в крайнем правом — от 500 до 600. Разброс в пределах сотни и постоянно меняется число. Про 0 и 1023 даже не слышно. Что я делаю не так?)
Хммм…
1. Скетч целиком в студию.
2. Проверяем контакты, правильность подключения,(дважды=))
проверяем исправность потенциометра тестером.
3. Сопротивление потенциометра какое?
4. Марка потенциометра (что на нём написано?) может какойто хитровымучанный…
5. Попробуйте подключить другой.
6. Попробуйте вообще его отключить и посмотреть на шум эфира — наводки на вход.
только что проверил. Модифицировал скетч из заметки:
int potPin = 0; // потенциометр подключается к 0-му порту
int ledPin = 13; // светодиод подключается к digital pin 13
int val = 0; // переменная для хранения значения входного напряжения
void setup()
{
pinMode(ledPin, OUTPUT); // настраиваем ledPin как выход
Serial.begin(9600); // инициализация работы с COM-портом
}
void loop()
{
val = analogRead(potPin); // считываем значение с потенциометра
Serial.println(val, DEC); // выводим значение
digitalWrite(ledPin, HIGH); // зажигаем светодиод
delay(val); // задержка, зависит от значения
digitalWrite(ledPin, LOW); // гасим светодиод
delay(val); // опять задержка
}
результат:
0
1
2
3
5
6
11
12
....
541
962
1023
Т.о. всё работает, вот только шаг изменения сильно зависит от самого потенциометра.
Спасибо. Вроде бы всё заработало как надо. Просто упростил скетч, выбросив из него индикацию на светодиодах.
И еще одна странность, то, что я описал выше наблюдалось при заливке скетча под виндой. При перезаливке в убунте всё показывало 1023 при любых параметрах. Грешу на общую со светодиодами землю. Теперь буду пробовать в комплексе всё запускать.
Комментарии (12)
RSS свернуть / развернутьOboroten
Zoltberg
matlaber
Zoltberg
matlaber
Но, скорей всего вы не запитали АЦП=)
Подключите 20-ю ногу (AVCC) к терминалу POWER (ну или к тому выводу потенциометра, куда подаёте +5В)
PS: Порлогаю, вы используете анимированный резистор, если нет — рекомендую. Называется POT-HG и его можно «крутить» во время симуляци — очень удобно.
Удачи=)
Zoltberg
Mr_Floppy
Nauro
1. Скетч целиком в студию.
2. Проверяем контакты, правильность подключения,(дважды=))
проверяем исправность потенциометра тестером.
3. Сопротивление потенциометра какое?
4. Марка потенциометра (что на нём написано?) может какойто хитровымучанный…
5. Попробуйте подключить другой.
6. Попробуйте вообще его отключить и посмотреть на шум эфира — наводки на вход.
Zoltberg
результат:
Т.о. всё работает, вот только шаг изменения сильно зависит от самого потенциометра.
admin
И еще одна странность, то, что я описал выше наблюдалось при заливке скетча под виндой. При перезаливке в убунте всё показывало 1023 при любых параметрах. Грешу на общую со светодиодами землю. Теперь буду пробовать в комплексе всё запускать.
Nauro
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.