Йодо 16 задание. Парктроник с потенциометром

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем SuperKek, 14 ноя 2018.

  1. SuperKek

    SuperKek Нерд

    [​IMG]
    Я не знаю как подключить потенциометр, чтобы менять расстояние
    Помогите, пожалуйста
    upload_2018-11-14_15-48-29.png
     

    Вложения:

  2. Trem

    Trem Нерд

    Потенциометр подключался в эксперименте №5
    Код (Javascript):
    var pot = require('@amperka/pot')  .connect(A0);
    var x = pot.read();
     
    Х - будет принимать значения от 0 до 1.
    А дальше математика и правильно поставленная задача
    можно уменьшить текущее расстояние срабатывания на какую-то величину
    Код (Javascript):

    var sonic = require('@amperka/ultrasonic')  .connect({trigPin: P10, echoPin: P11});
    var buzzer = require('@amperka/buzzer')  .connect(P5)  .frequency(440);
    setInterval(function() {
     x = pot.read();
     sonic.ping(function(err, val) {
     if (val < 5-(5*х)) {
     buzzer.turnOn();
     } else if (val < 20-(5*х)) {
     buzzer.beep(0.1, 0.1);
     } else if (val < 50-(5*х)) {
     buzzer.beep(0.2, 0.2);
     } else {
     buzzer.turnOff();
     }
     }, 'cm');
    }, 100);
     
    Можно увеличивать
    Код (Javascript):

    var sonic = require('@amperka/ultrasonic')  .connect({trigPin: P10, echoPin: P11});
    var buzzer = require('@amperka/buzzer')  .connect(P5)  .frequency(440);
    setInterval(function() {
     x = pot.read();
     sonic.ping(function(err, val) {
     if (val < 5+(5*х)) {
     buzzer.turnOn();
     } else if (val < 20+(5*х)) {
     buzzer.beep(0.1, 0.1);
     } else if (val < 50+(5*х)) {
     buzzer.beep(0.2, 0.2);
     } else {
     buzzer.turnOff();
     }
     }, 'cm');
    }, 100);
     
    или абсолютное значение
    Код (Javascript):

    var sonic = require('@amperka/ultrasonic')  .connect({trigPin: P10, echoPin: P11});
    var buzzer = require('@amperka/buzzer')  .connect(P5)  .frequency(440);
    setInterval(function() {
     x = pot.read();
     sonic.ping(function(err, val) {
     if (val < 5*х) {
     buzzer.turnOn();
     } else if (val < 20*х) {
     buzzer.beep(0.1, 0.1);
     } else if (val < 50*х) {
     buzzer.beep(0.2, 0.2);
     } else {
     buzzer.turnOff();
     }
     }, 'cm');
    }, 100);
     
     
    Робо Папа нравится это.
  3. Сегодня не было достаточно времени сидеть с сыном и разбирать задание. По этому, предвидя, что будут вопросы оставил такой текст. Он его выполнил))
    Надеюсь что он и вам поможет понять задачу если остались какие-то вопросы, решив его вы сможете усовершенствовать и дополнить программу уже самостоятельно.
    Trem в предыдущем посте привел пример решения. Я его дополняю лишь комментариями к программе которые помогли моему ребенку лучше разобраться.
    Код (Java):
    // Попробуем решить эту задачу. Но с начала предлагаю разобраться с примером

    // копируем ультразвуковой датчик созданный разработчиками амперки
    // require('@amperka/ultrasonic')
    // в нашу программу и назовем его sonic
    var sonic = require('@amperka/ultrasonic').connect({trigPin: P10, echoPin: P11});
    // копируем пищалку в нашу программу
    // указываем порт к которому мы ее подсоединили - .connect(P5)
    // и устанавливаем звучание по умолчанию 440 герц - .frequency(440);
    var buzzer = require('@amperka/buzzer').connect(P5).frequency(440);

    // Далее функция setInterval поможет нам периодически отдавать задания нашей плате - это первый параметр,
    // а частоту с которой мы будем спрашивать выполнение задания записываем в самом конце 100 - второй параметр
    // setInterval (function(){первый параметр}, второй параметр)
    setInterval(function() {
      sonic.ping(function(err, val) { //слушаем что нам говорит ультразвуковой датчик, а говорит он об ошибках либо сообщает расстояние до объекта
        if (val < 5) {                //если расстояние до препятствия меньше 5 см
          buzzer.turnOn();            //5 см - практически авария включаем пищалку на полную
        } else if (val < 20) {        //если расстояние до препятствия меньше 20 см
          buzzer.beep(0.1, 0.1);      //достаточно близко к препятствию - пищим активнее
        } else if (val < 50) {       //если расстояние до препятствия меньше 50 см
          buzzer.beep(0.2, 0.2);      //50 см не так опасно поэтому пищим не часто, так предупредительно попискиваем
        } else {                      //Что ж если все предыдущие условия не выполняются то есть расстояние до препятствия более 50 см,
          buzzer.turnOff();          //панику поднимать не будем, просто выключим динамик
        }
      }, 'cm');
    }, 100);


    // Что ж перечитаем еще раз дополнительное задание и подумаем что нам надо добавить/изменить в программе

    var sonic = require('@amperka/ultrasonic').connect({trigPin: P10, echoPin: P11});
    var buzzer = require('@amperka/buzzer').connect(P5).frequency(440);
    // полагаю что здесь нам необходимо будет добавить наше новое устройство (потенциометр) в программу

    setInterval(function() {
      // полагаю что нам необходимо завести переменную в которую мы будем записывать наше "расстояние срабатывания"
      // и конечно же эта переменная должна учитывать значения поворота ручки потенциометра, ведь им будем регулировать это расстояние
      // подобное было в задании №10 Пантограф, только в нем мы изменяли значение поворота мотора
      sonic.ping(function(err, val) {
        if (val < 5) {
          buzzer.turnOn();
        } else if (val < 20) {
          buzzer.beep(0.1, 0.1);
        } else if (val < /* расстояние начала срабатывания */) { // в примере в этом месте мы начинали нашу панику о приближении к препятствию
          buzzer.beep(0.2, 0.2);
        } else {
          buzzer.turnOff();
        }
      }, 'cm');
    }, 100);
     
  4. ИгорьК

    ИгорьК Гуру

    Аккуратно, чтобы не измазаться о предыдущий пост замечу следующее.

    Ультрасоник имеет минимальное и максимальное расстояние для измерения.

    Можно предположить, что применение потенциометра имеет смысл тогда, когда крайние положенияя крутилки перекрывают весь диапазон измерения.
     
  5. Дельное дополнение. Это расстояние от 2х см до 4 метров.
    Мы это уточнение использовали когда в дальнейшем усовершенствовали код.
    Еще можно для большей явности менять тональность динамика на разных расстояниях.
    Верю что завтра автор поста разберется со всем и проведет свои собственные эксперименты.
     
  6. SuperKek

    SuperKek Нерд

    Спасибо за помощь! Я поигрался с потенциометром, понял суть, в основном брал значения как у Trem'а и менял постоянно. Робо Папе спасибо за пояснения, стало легче понимать программу.
     
    Последнее редактирование: 16 ноя 2018
    Робо Папа нравится это.