Просьба написать скетч на дальномер

vs41
Offline
Зарегистрирован: 20.09.2013

Доброго дня!

Помогите (мозгов не хватает) написать простой скетч.

Задача - дальномер HR при приближении объекта выдает сигнал на вибратор (4,7 В).

Чем ближе объект - тем сильнее жжужит.

(можно использовать библиотеку newping.h)

Araris
Offline
Зарегистрирован: 09.11.2012

А как же скетчи-примеры, идущие в составе библиотеки Newping ? 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

vs41 пишет:

Задача - дальномер HR при приближении объекта выдает сигнал на вибратор (4,7 В).

Чем ближе объект - тем сильнее жжужит.

Простите, не смог удержаться....

Цитата: Мировое признание формат Бетакам получил после принятия его порноиндустрией

Вы хотите прославить ардуино тем же способом? :D

Клапауций
Offline
Зарегистрирован: 10.02.2013

JollyBiber пишет:

Простите, не смог удержаться....

Цитата: Мировое признание формат Бетакам получил после принятия его порноиндустрией

Вы хотите прославить ардуино тем же способом? :D

Дохтор, это не тот вибратор - это этот вибратор

com
Offline
Зарегистрирован: 06.09.2013

этот, пожалуй, и до гланд достанет.....

vs41
Offline
Зарегистрирован: 20.09.2013

вибратор с мобильного телефона, а точнее  мотор-вибратор:

 

 

maksim
Offline
Зарегистрирован: 12.02.2012
#define pinTrig  2
#define pinEcho  3
#define pinVibro 4

void setup()
{
  //Serial.print(9600);
  pinMode(pinTrig, OUTPUT);
  pinMode(pinVibro, OUTPUT);
}

void loop()
{
  digitalWrite(pinTrig, HIGH); 
  delayMicroseconds(10);
  digitalWrite(pinTrig, LOW);
  uint32_t time_us = pulseIn(pinEcho, HIGH, 30000); 
  int distance_sm = time_us/58;
  //Serial.println(distance_sm);
  if(distance_sm > 50 && distance_sm < 500)
  {
    byte vibro = map(distance_sm, 500, 50, 0, 250);
    analogWrite(pinVibro, vibro);
  }
  else analogWrite(pinVibro, 0);
  delay(100);
}

 

vs41
Offline
Зарегистрирован: 20.09.2013

Спасибо!!!

 

maksim
Offline
Зарегистрирован: 12.02.2012

А лучше так

#define pinTrig  2
#define pinEcho  3
#define pinVibro 4

#define MIN_DIST 0
#define MAX_DIST 500

#define MIN_VIBRO 0
#define MAX_VIBRO 250

void setup()
{
  //Serial.print(9600);
  pinMode(pinTrig, OUTPUT);
  pinMode(pinVibro, OUTPUT);
}

void loop()
{
  digitalWrite(pinTrig, HIGH); 
  delayMicroseconds(10);
  digitalWrite(pinTrig, LOW);
  uint32_t time_us = pulseIn(pinEcho, HIGH, 30000); 
  int distance_sm = time_us/58;
  //Serial.println(distance_sm);
  if(!time_us || distance_sm >= MAX_DIST) analogWrite(pinVibro, 0);
  else if(distance_sm <= MIN_DIST) analogWrite(pinVibro, MAX_VIBRO);
  else
  {
    int vibro = map(distance_sm, MAX_DIST, MIN_DIST, MIN_VIBRO, MAX_VIBRO);
    analogWrite(pinVibro, vibro);
  }
  delay(100);
}

 

vs41
Offline
Зарегистрирован: 20.09.2013

Спасибо, действительно - этот вариант лучше!

чтобы "перевернуть" значение сигнала в функции map меняем местами min и max?

maksim
Offline
Зарегистрирован: 12.02.2012

Зачем?

vs41
Offline
Зарегистрирован: 20.09.2013

мне надо при приближении - усиление сигнала.

Сейчас схему соберу (на Pro mini) - протестирую, завтра отпишусь, спасибо за участие.

maksim
Offline
Зарегистрирован: 12.02.2012

vs41 пишет:

мне надо при приближении - усиление сигнала.

И? Вы где то увидили другое?

Не зря было сказано:

jeka_tm пишет:

А человек упертый.