Cветодиод и ультразвуковой датчик
- Войдите на сайт для отправки комментариев
Чт, 04/03/2021 - 13:59
Здравствуйте, нужна помощь.
Схема состоит из светодиода и ультразвукового датчика. Чем ближе
препятствие к датчику, тем меньше горит светодиод.
Вот схема,
Вот код программы
#define Trig 9 //обозначаем порты, к которым подключили датчик #define Echo 8 #define diod 11 //пин диода void setup() { pinMode(Trig, OUTPUT); //назначаем пин на выход pinMode(Echo, INPUT); //назначаем пин на вход Serial.begin(9600); //пин диода pinMode(diod, OUTPUT); //назначаем пин на выход } void loop() { digitalWrite(Trig, HIGH); //посылаем ультразвук delayMicroseconds(10); //ждем 10мс digitalWrite(Trig, LOW); //отключаем ультразвук unsigned int impulse=pulseIn(Echo, HIGH); //с помощью специальной функции //принимаем сигнал ультразвука unsigned int distance=impulse/58; //и по формуле вычисляем дистанцию Serial.println(distance); //выводим дистанцию до объекта if (distance <= 255) { analogWrite(diod, distance); }else { analogWrite(diod, 255); } delay(1000); //пауза в 1 секунду }
Проблема в том, когда препятствие ближе к датчику, то светодиод просто горит, а должен гореть меньше.
http://arduino.ru/Reference/Map
Что тут печатает?
Serial
.println(distance);
//выводим дистанцию до объекта
https://cdn1.savepice.ru/uploads/2021/3/4/6ff137553b04c7ee87c01887bbd396...
Может вы просто не отличаете яркость 24 от 50, к примеру? Ну, светодиод неяркий, например.
И как это исправить?
У светодиода нелинейная светимость (вернее, у глаза нелинейное восприятие). Попробуйте менять вывод от 0 до 255 и заметите, что вначале что-то меняется, а потом - практически одинаково всё. Надо выводить на него не само расстояние а логарифм от него (или антилогарифм, что-то я надегустировался и не могу точно сообразить, но направление для копания именно таково)
Примерно понятно
Спасибо, получилось через map реализовать
дык мап выдаёт линейную зависимость, а не логарифмическую.
дык мап выдаёт линейную зависимость, а не логарифмическую.
PS. А вообще, зависимость должна быть не логарифмической, а экспоненциальной. Но на практике нередко заменяют другой нелинейной функцией, например, степенной (т.н. гамма-коррекция).
Добрый день! Можете показать код, пожалуйста, который у вас получился в итоге с MAP? У меня такое же задание, не понимаю как сделать через map