Константа значения AnalogRead для изменяющегося напряжения (для изменения яркости светодиода)

Наличие контакта 11~ в режиме ВЫХОДА, который обеспечивает переменное напряжение (от 0 до 5: от 0 до 255).

и контакт A0 в режиме INPUT для считывания напряжения, я обнаружил, что значение, считанное A0, равно либо 0, либо 1016, а не постепенно принимает несколько значений между ними. в чем подвох?

Схема и код, который я использую:

https://i.ibb.co/dDMJJCg/Cir.png

int volt = 0; 
int sign = 1; //значения: (1, -1), увеличивает или уменьшает «вольт» на 5.
float potential;

void setup() {

  pinMode(11, OUTPUT);
  pinMode(A0, INPUT);
  Serial.begin(9600);


}

void loop() {



if (volt == 0){sign = 1;}
if (volt == 255){sign = -1}


volt = volt + sign * 5; //повышает яркость до 255 с 0, затем до 0 с 255.
analogWrite(11, volt);





potential = analogRead(A0);

Serial.println(potential);

delay(30);
/*
*/

}

, 👍1

Обсуждение

даже после фильтрации вы не увидите значения между Vf светодиода и 5 В, имейте это в виду., @dandavis


2 ответа


3

Выходной контакт ШИМ не меняет напряжение — он выдает только 0 или 5 В. Время, в течение которого напряжение 5 В включено, от 1/255 периода примерно 2 мс до 255/255 того же периода, определяет, насколько ярким будет восприниматься светодиод.

Вам действительно нужен резистор ограничения тока последовательно со светодиодом, чтобы не допустить перегорания выходного контакта uC или светодиода.

,

Спасибо, если ВЫХОДНОЕ напряжение практически не меняется, как меняется яркость светодиода? https://streamable.com/vc106, @Huskarnov

@Huskarnov Он мерцает слишком быстро, чтобы ваш глаз мог его уловить, чем больше он горит, тем ярче он кажется., @ratchet freak

Время включения воспринимается глазом как более тусклое или более яркое. Так работает наш мозг., @CrossRoads

@Huskarnov [этот GIF](https://i.gifer.com/I0Yv.gif) может помочь визуализировать это., @Gerben


5

Как говорит CrossRoads, на Arduino действительно не существует аналогового выхода. (Любой Arduino, если только он не имеет встроенного ЦАП.) Он использует широтно-импульсную модуляцию для изменения «рабочего цикла» выхода от 100% до 0%, что имитирует аналоговое напряжение.

Если вы управляете светодиодом с ШИМ (и необходимым токоограничивающим резистором), ваши глаза не будут видеть вспышки и будут усреднять яркость на основе рабочего цикла сигнала ШИМ.

Если вам нужно реальное аналоговое напряжение от ШИМ, вам нужно будет добавить конденсатор фильтра, чтобы усреднить напряжение с течением времени. При использовании простого фильтра с одним конденсатором у вас все равно будет флаттер на выходе, но он будет уже ближе. Если вам нужно чистое постоянное напряжение, вам понадобится более сложный фильтр.

,

@Gerben, ты отредактировал мой ответ, чтобы поговорить конкретно об Arduino Uno. Мой ответ применим ко **всем** Arduinos. (Ардуини?), @Duncan C

И Arduino Zero, и Arduino Due имеют встроенные ЦАП (цифро-аналоговый преобразователь). А еще есть множество Arduino-совместимых устройств от Sparkfun, Adafruit и других производителей, которые используют чипы с ЦАП. Например, платы на базе ESP32 или популярный SAMD21. Так что определенно **не** все Ардуини (Ардуино?)., @Gerben

Тогда я исправлюсь. Я дал свой ответ не конкретно для UNO, а для всех Arduino, у которых нет ЦАП., @Duncan C