Cветодиод и ультразвуковой датчик

azat86
Offline
Зарегистрирован: 04.03.2021

Здравствуйте, нужна помощь.
Схема состоит из светодиода и ультразвукового датчика. Чем ближе
препятствие к датчику, тем меньше горит светодиод.

Вот схема,

Вот код программы

#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 секунду
}

Проблема в том, когда препятствие ближе к датчику, то светодиод просто горит, а должен гореть меньше.

sadman41
Offline
Зарегистрирован: 19.10.2016

http://arduino.ru/Reference/Map

Что тут печатает?

Serial.println(distance); //выводим дистанцию до объекта

azat86
Offline
Зарегистрирован: 04.03.2021
sadman41
Offline
Зарегистрирован: 19.10.2016

Может вы просто не отличаете яркость 24 от 50, к примеру? Ну, светодиод неяркий, например.

azat86
Offline
Зарегистрирован: 04.03.2021

И как это исправить?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

У светодиода нелинейная светимость (вернее, у глаза нелинейное восприятие). Попробуйте менять вывод от 0 до 255 и заметите, что вначале что-то меняется, а потом - практически одинаково всё. Надо выводить на него не само расстояние а логарифм от него (или антилогарифм, что-то я надегустировался и не могу точно сообразить, но направление для копания именно таково) 

azat86
Offline
Зарегистрирован: 04.03.2021

Примерно понятно

azat86
Offline
Зарегистрирован: 04.03.2021

Спасибо, получилось через map реализовать

vvadim
Offline
Зарегистрирован: 23.05.2012

azat86 пишет:
Спасибо, получилось через map реализовать

 

дык мап выдаёт линейную зависимость, а не логарифмическую.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

vvadim пишет:

azat86 пишет:
Спасибо, получилось через map реализовать

дык мап выдаёт линейную зависимость, а не логарифмическую.

Ну так если бы map сразу выдавал логарифмическую зависимость, не было бы повода похвастаться.

 

PS. А вообще, зависимость должна быть не логарифмической, а экспоненциальной. Но на практике нередко заменяют другой нелинейной функцией, например, степенной (т.н. гамма-коррекция).

anastasiiaisaev...
Offline
Зарегистрирован: 11.03.2022

Добрый день! Можете показать код, пожалуйста, который у вас получился в итоге с MAP? У меня такое же задание, не понимаю как сделать через map