Каков результат A0 - A5?

Я новичок в Arduino Uno. Когда я запускаю этот фрагмент кода, я получаю числа от 340 до 370.

Вот мой вопрос: почему он возвращает 340–370, что соответствует фактическому напряжению от 1,66 до 1,80? Поскольку к этим контактам не подключено никакого входного оборудования, он должен возвращать нулевое напряжение, если я прав. Другими словами, почему значения по умолчанию на этих контактах находятся в этом диапазоне чисел?

void loop() {
int val = analogRead(A0) ; //A1, A2 ...
Serial.println(val) ;

}

, 👍0


1 ответ


Лучший ответ:

2

Вы получите различные значения при каждом считывании. Говорят, что вход пина плавает, если ничего не подключено, что простыми словами можно объяснить тем, что он просто действует как антенна для любого электрического шума, присутствующего в вашей среде. Его состояние неизвестно и совершенно бессмысленно. Если вы поднесете вращающийся электродвигатель близко к пину, вы сможете увидеть, как значения растут и падают более отчетливо.

Используйте резистор с высоким номиналом (10 кОм или более) для частичного смягчения этого джиттера. Снижение приведет к снижению значения считывания примерно до 0, а повышение — к повышению примерно до 1023.

Кроме того, хорошей идеей будет всегда сглаживать analogRead (5-10 считываний с интервалом ~25-50 мс, усреднять значения), чтобы получить хорошие показания, если важна точность. Это особенно актуально, если вы используете более длинные провода, имеете неэкранированный корпус или используете импульсный источник питания. Скручивание проводов (GND и движок IIRC, в противном случае поправьте меня) с потенциометром помогает.

Редактировать: Вы можете использовать pinMode( A0, INPUT_PULLUP ); - это обеспечивает подтяжку 20-50 кОм, хотя я этому не доверяю и всегда использую резисторы 1/4 Вт. Это экономит место, и довольно удобно.

,

Спасибо за понятное объяснение. Однако, как я уже говорил, я новичок в электронике, и у меня есть другой вопрос: что происходит, когда я использую резисторы сопротивлением 1 МОм? В моём случае я хочу использовать датчик детонации и нашёл во всех руководствах, что для правильной работы нужно использовать резистор сопротивлением 1 МОм. Но я использую резистор сопротивлением 6 кОм, и он работает неправильно. Сигналы то поднимаются, то опускаются, а когда я подключаю резистор сопротивлением 6 кОм к земле и A0, напряжение падает до 0., @Shahin Ghasemi

@shahingh Купи резистор 1 МОм, @user2497

@shahingh ... или соединить 167 резисторов по 6 кОм последовательно:/, @user2497

Я думаю, что я понял: ), @Shahin Ghasemi

Обратите внимание, что INPUT_PULLDOWN недоступен на платах на базе AVR. INPUT_PULLUP работает как на платах AVR, так и на платах SAMD., @Edgar Bonet