Измерительный датчик HG-C 1100

Я использую два измерительных датчика HG-C 1100 для измерения ширины металла. В верхней части датчика у меня будет значение измерения. Датчик способен измерять размеры от-35мм до 35мм. Поэтому я использую формулу:

int First_sample = analogRead(6);  
int Second_sample = analogRead(7);
float First_sensor = (map(First_sample, 1023, 0, -3500, 3500) / 100.0);     
float Second_sensor = (map(Second_sample, 0, 1023, -3500, 3500) / 100.0); 
Serial.print("First_sensor:");
Serial.println(First_sensor, 3);
Serial.print("Second_sensor:");
Serial.println(Second_sensor, 3);
Final_sensor = (First_sensor - Second_sensor);
Serial.println(Final_sensor, 4);

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

, 👍0

Обсуждение

Я не могу понять особого смысла в написанном вопросе, за исключением того, что дисплей показывает не то, что вы ожидали. На сенсорном дисплее, похоже, есть режимы "Стандартный", " Перевернутый и Смещенный`. Если это не имеет никакого отношения к этому, и на самом деле имеет какое-то отношение к Arduino, может быть, несколько прояснить вопрос., @timemage

Но когда я добавляю код arduino и смотрю на последовательный монитор, значения не так похожи на верхнюю часть датчика. если первый датчик равен -17,5, то он принимает значение -17,78, а если второй датчик равен -21,5, то он принимает значение -21,12. Я должен знать, в чем разница. Но металл, который я помещаю между датчиками, дает мне правильный выход. Вы поняли, к чему я клоню? Последовательный монитор и верхняя часть значения датчика различны., @user76575

*"Ты меня понял?"* " Нет, не понял. И я не знаю, о чем тебя спросить. Может быть, кто-то другой это сделает. В противном случае вам придется выяснить, как прояснить вопрос, пока кто-то не поймет его достаточно хорошо., @timemage


1 ответ


-1

HG-C1100 имеет разрешение 70 мкм (= 0,07 мм) в диапазоне измерений 70 мм. Вы цитируете ошибки 0,28 и 0,38 мм, что хуже, чем можно ожидать (±0,07 мм). Разрешение составляет 1‰ диапазона измерений. Поэтому 10-битный диапазон (1024) аналого-цифрового преобразователя (АЦП) Arduino достаточен.

Вы сопоставляете выход АЦП 0-1023 с диапазоном от -3500 до +3500, что приводит к значению в 0,01 мм. Затем вы делите на 100,0, что приводит к значению в мм.

Согласно ссылке Arduino функция map() использует целочисленную арифметику, но аргументы длинны, а порядок вычисления таков, что поддерживается максимальная точность. Это обеспечивает достаточную точность для этой цели. Я только не уверен, должны ли ваши константы быть фиксированными после "L".

Пока все выглядит нормально.

Упомянутые вами ошибки соответствуют примерно 5 отсчетам АЦП. Я предполагаю, что решение заключается в принятии мер по предотвращению попадания шума в ваши сигналы (формирование сигнала).

Дополнение:
Когда вы читаете один и тот же датчик несколько раз, получаете ли вы стабильные показания? Вы можете попробовать использовать среднее значение по нескольким показаниям. Вы смотрели на сигнал(ы) с помощью осциллографа?

,