Аналоговый ввод Arduino: почему странные колебания?

Я использую Arduino Uno. analogRead(A0) (или любой другой канал, который я использую) возвращает 0, когда он заземлен с помощью Arduino Gnd, и 1023 при подключении к Arduino 5v. Но когда я подключаю его к датчику тока (ACS712), он всегда колеблется вот так:

0, 0, 0, 0, 0, 0, 1023, 1023, 1023, 1023, 1023, 441, 446, 0, 0, 0, 0, 1023, 1023...

Также пробовал с потенциометром (10K) и аналоговым джойстиком: результаты те же. Я пробовал менять разные блоки питания (и Arduino, и датчик (ACS712, потенциометр, джойстик)). Я даже тестировал его на Arduino Mega, но не повезло. Такие резкие колебания не имеют для меня никакого смысла. Пожалуйста, помогите мне, в чем может быть проблема.

Моя схема подключения прикреплена к этому сообщению. И я использую внешний источник питания для ACS712. Возможно ли, что причиной этой проблемы является статическое электричество?

Код:

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

void loop() {
  float value = analogRead(A0);
  Serial.print("Raw:");
  Serial.println(value);
  delay(500);
}

Спасибо.

, 👍2

Обсуждение

пожалуйста, добавьте схему ваших соединений, @jsotola

Вы говорите, что питаете привод ACS712 от внешнего источника. У вас есть заземление Arduino и заземление внешнего питания? _Полная_ схема была бы более полезной, потому что, возможно, проблема не в показанной части., @Mark Smith

Возможно, вы просто измеряете ток _AC_, и в этом случае «флуктуации» нормальны и ожидаемы., @Edgar Bonet

@Mark Smith Я не использую Arduino Gnd ACS712 использует Gnd от внешнего источника питания .... От Arduino я использую только его аналоговый контакт 0, @Hassaan Shah

@ Эдгар Бонет Я использую источник постоянного тока в качестве источника тока для ACS712., @Hassaan Shah


2 ответа


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

4

Вам необходимо соединить заземление от внешнего источника питания и Arduino.

На данный момент два устройства находятся в плавающем состоянии — общепринятой точки 0v нет.

,

Вы потрясающие ... Спасибо за вашу помощь очень ценится. Решил мою проблему, @Hassaan Shah


0

У меня была похожая проблема с колебаниями значений. Убедитесь, что вы устанавливаете в своем коде аналоговый вывод как контакт INPUT. На некоторых платах это нужно указывать явно, например так:

pinMode(A1, INPUT);
,