Искатель - несерьезная ракета-плеер

Тема в разделе "Глядите, что я сделал", создана пользователем OldKryptos, 16 май 2021.

  1. OldKryptos

    OldKryptos Гик

    "... Эдик поднял паяльник, точно жезл, и сказал, уже что-то соображая:
    - Звездолёт? Тебе какого класса?
    - Ну... мне самый большой.
    - Тащи материал! Если что-нибудь осталось из твоих игрушек.
    - Старый паровоз подойдёт? Кукушка.
    - Подойдет! ... "




    Это фрагмент из книги Г. Садовникова "Продавец приключений". В детстве этот рассказ произвел на меня такое же впечатление, как и "Понедельник начинается в субботу" Стругацких в студенческий период. Все так научно и не совсем научно, и очень позитивно!

    Чтобы это как-то отметить, решил сделать звездолет "Искатель" из этого рассказа.
    Конечно, все достоинства необычной ракеты воссоздать в модели было нереально, но не было сомнений в том, что ракета должна быть веселой ))).

    Были опасения, что небольшое соотношение калибра и длины модели плохо скажется на устойчивости полета, но опасения не подтвердились впоследствии. Ракета пошла в небо свечой.
    Для "оживления" ракеты было решено сделать машущие крылышки, которыми в рассказе звездолет тормозил при приземлении. Плюс, от себя, был добавлен плеер, который без дела пылился уже пару лет на полке.

    В результате было сформировано ТЗ проекта по которому:
    1) при включении ракета должна сделать:
    • а) голосовое приветствие шкипера;
    • б) помахать крылышками;
    • в) проговаривать высоту предыдущего полета;
    • г) пожелать хорошего полета;
    2) до момента старта:
    • а) ракета корректирует дрейф нулевой высоты;
    • б) каждую минуту голосовое напоминание о том, что ракета включена и активна;
    3) в момент начала движения - переключение на более быстрый алгоритм определения высоты;
    4) при достижения апогея:
    • a) срабатывает запал сигнального дымового трассера;
    • б) включается бравая музыка;
    • в) ракета около минуты под парашютом помахивает крыльями.

    Иэ вышеперечисленного не был сделан только трассер, то есть алгоритм запала реализован - подключить можно, но ракета получилась и без того тяжелой, что от шашки пришлось отказаться.
    Было решено задействовать два контроллера. Контроллер-A следил за стартом, определял апогей, включал запал трассера, управлял плеером и подавал сигналы контроллеру-Б, который управлял сервами крыльев.
    Благодаря большим майским входным, проект получился мегабыстым. Сделал за две недели, это абсолютный рекорд.

    isk01.jpg isk02.jpg isk03.jpg isk04.jpg isk05.jpg

    Из совершенно новенького в этом проектике для меня был плеер. Не особо углубляясь в тонкости его работы, использовал первую попавшуюся библиотеку - DFRobotDFPlayerMini.
    Текстики сгенерировал на сайте https://apihost.ru/voice
    Метод произношения чисел не сложный, на его вход нужно подать число от 0 до 999. Далее метод определяет цифру каждого разряда, возвращает ей разряд, и по очереди из флеш-карты вызываются соответствующие файлы.
    Код (C++):
    /* м.произнести номер -------------------------------------------------------------------*/
    void speakNum(int value ) {
      String strVal;
      int v_100 = 0;
      int v_10 = 0;
      int v_1 = 0;
      int v_10_1 = 0;
      int lVal;
      // определим количество разрядов и поместить цифры в соотв. разряд
      strVal = (String)value;
      int len = strVal.length();
      for (int i = len - 1; i >= 0; i-- )
        switch ( i )
        { case 2: v_100 = round(value / 100); break;                         //сотни метров
          case 1: v_10 = round((value - v_100 * 100) / 10); break;           //десятки метров
          case 0: v_1 = round(((value - v_100 * 100) - v_10 * 10 ) ); break; //единицы метров

            if (i == 2) v_100 = round(value / 100);                              //сотни метров
            else if (i == 1) v_10 = round((value - v_100 * 100) / 10);           //десятки метров
            else if (i == 0) v_1 = round(((value - v_100 * 100) - v_10 * 10 ) ); //единицы метров
        }

      //Здесь нужно пропикать значение высоты
      if ( v_100 == 0 && v_10 == 0 && v_1 == 0 ) {
        myDFPlayer.playLargeFolder(2, 998);
        delay (1500);
        return;
      }

      v_100 = v_100 * 100;
      v_10 = v_10 * 10;

      if (v_100 != 0) {
        myDFPlayer.playLargeFolder(2, v_100);
        delay (1500);
      }

      if (v_10 == 10 ) {
        v_10_1 = v_10 + v_1;
        myDFPlayer.playLargeFolder(2, v_10_1);
        delay (1500); return;
      }
      else if (v_10 != 0) {
        myDFPlayer.playLargeFolder(2, v_10);
        delay (1500);
      }

      if (v_1 != 0) {
        myDFPlayer.playLargeFolder(2, v_1);
        delay (1500);
      }
      else {
        myDFPlayer.playLargeFolder(2, 999);
        delay (2500);
      }
    }
    В первый полет немного подвела парашютная система спасения, поэтому будут доработки. Ракета публике понравилась ))
     
    Последнее редактирование: 16 май 2021
    issaom нравится это.