search icon search icon ВЕРСИЯ ДЛЯ СЛАБОВИДЯЩИХ

Инженерный тур. 1 этап

Задача 1.1.(25 баллов)
Программирование микроконтроллеров. Поворотные механизмы
Темы: Arduino Nano, микроконтроллеры, Wokwi, джойстик

Условие

Дана схема, состоящая из контроллера Arduino Nano, сервомотора, джойстика, RGB-светодиода и зуммера. Схема по условию должна работать следующим образом:

  • При наклоне джойстика вперед сервопривод поворачивается направо на 90°, загорается зеленый светодиод.
  • При наклоне джойстика назад сервопривод поворачивается налево на 90°, загорается синий светодиод.
  • При наклоне влево/вправо загорается красный светодиод.

Рис. 1.1. Электрическая схема

Ниже приведен код программы, который необходимо исправить так, чтобы он работал согласно условию.
C++
#include <Servo.h>

#define LED_RED    12 // светодиод красный
#define LED_GREEN  11 // светодиод зеленый
#define LED_BLUE   10 // светодиод желтый

#define BUZZ_PIN   9 // зуммер
#define HOR_JOY    A6 // джойстик ось X
#define VERT_JOY   A7 // джойстик ось Y

#define SERVO_PIN  3 // серво

Servo servo;

unsigned long time_passed, time_reset;

void setup() {
  pinMode (LED_RED, OUTPUT);
  pinMode (LED_GREEN, OUTPUT);
  pinMode (LED_BLUE, OUTPUT);

  pinMode (BUZZ_PIN, OUTPUT);
  servo.attach(SERVO_PIN);
  servo.write(90);
}

void loop() {
  int horizontal = analogRead(HOR_JOY);
  int vertical = analogRead(VERT_JOY);

  if (your_answer) {
    servo.write(your_answer);
    digitalWrite(LED_RED, LOW);
    digitalWrite(LED_GREEN, HIGH);
    digitalWrite(LED_BLUE, LOW);
  } 
  if (your_answer) {
    servo.write(your_answer);
    digitalWrite(LED_RED, LOW);
    digitalWrite(LED_GREEN, LOW);
    digitalWrite(LED_BLUE, HIGH);
  } 
  if (your_answer){
    servo.write(90);
    digitalWrite(LED_RED, LOW);
    digitalWrite(LED_GREEN, LOW);
    digitalWrite(LED_BLUE, LOW);
  }

  if (your_answer) {
    digitalWrite(LED_RED, HIGH);
    digitalWrite(LED_GREEN, LOW);
    digitalWrite(LED_BLUE, LOW);
  } 
  // Подзадача 1.2
}

Подзадача 1 (13 баллов)

Найдите ошибку в коде и вставьте нужные строки в области кода вида your_answer. Ответом является шесть цифр, записанных в верной последовательности (например, 123456).

Варианты ответа:

  1. horizontal != 512
  2. vertical == 512
  3. 180
  4. vertical > 512
  5. vertical < 512
  6. 0

Подзадача 2 (12 баллов)

Дополните программу таким образом, чтобы при отсутствии действия больше 10 с светодиод начал мигать желтым цветом, а зуммер начал подавать звуковой сигнал в слышимом диапазоне (от 20 Гц до 20 кГц).

Выберите один из четырех предложенных вариантов реализации, который нужно добавить в программу после комментария // Подзадача 1.2.

  1. C++
      time_passed = millis() - time_reset;
      if (horizontal != 512 and vertical != 512) {
        time_reset = millis();
      }
    
      if ((10000 < time_passed)) {
        digitalWrite(LED_RED, LOW);
        digitalWrite(LED_GREEN, LOW);
        digitalWrite(LED_BLUE, LOW);
        delay(100);
        digitalWrite(LED_RED, HIGH);
        digitalWrite(LED_GREEN, HIGH);
        digitalWrite(LED_BLUE, LOW);
        delay(100);
    
        tone(BUZZ_PIN, 250, 100);
      }
  2. C++
      time_passed = millis() - time_reset;
      if (horizontal != 512 or vertical != 512){
       time_reset = millis();
      }
    
      if ((10000 < time_passed)) {
        digitalWrite(LED_RED, LOW);
        digitalWrite(LED_GREEN, LOW);
        digitalWrite(LED_BLUE, LOW);
        delay(100);
        digitalWrite(LED_RED, HIGH);
        digitalWrite(LED_GREEN, HIGH);
        digitalWrite(LED_BLUE, LOW);
        delay(100);
    
        tone(BUZZ_PIN, 250, 100);
      }
  3. C++
      time_passed = millis() - time_reset;
      if (horizontal == 512 or vertical == 512) {
        time_reset = millis();
      }
    
      if ((10000 <= time_passed)) {
        digitalWrite(LED_RED, LOW);
        digitalWrite(LED_GREEN, LOW);
        digitalWrite(LED_BLUE, LOW);
        delay(100);
        digitalWrite(LED_RED, HIGH);
        digitalWrite(LED_GREEN, HIGH);
        digitalWrite(LED_BLUE, LOW);
        delay(100);
    
        tone(BUZZ_PIN, 250, 100);
      }
  4. C++
      time_passed = millis() - time_reset;
      if (horizontal != 512 or vertical == 512){
        time_reset = millis();
      }
    
      if ((10000 <= time_passed)) {
        digitalWrite(LED_RED, LOW);
        digitalWrite(LED_GREEN, LOW);
        digitalWrite(LED_BLUE, LOW);
        delay(100);
        digitalWrite(LED_RED, HIGH);
        digitalWrite(LED_GREEN, HIGH);
        digitalWrite(LED_BLUE, LOW);
        delay(100);
    
        tone(BUZZ_PIN, 250, 100);
      }

Ответ

Подзадача 1: 435621.

Подзадача 2: 2.

Задача 1.2.(25 баллов)
Конструирование. Определение грузоподъемности
Темы: ТНПА, тяга, плавучесть

Условие

Дан ТНПА с нулевой плавучестью. К сожалению, вертикальный движитель неисправен и требует замены. Перед установкой нового движителя было принято решение испытать его на лабораторном стенде.

В результате испытаний был зафиксирован вес на свободном плече стенда: 54 Н.

Длина свободного плеча: 10 см, длина плеча с движителем 75 см.

Рис. 1.2. Вид лабораторной установки

Рис. 1.3. Схема лабораторной установки

Подзадача 1 (10 баллов)

Определите тягу движителя. Ответ укажите в ньютонах с точностью до десятых.

Подзадача 2 (15 баллов)

Рассчитайте тягу движителя по показаниям лабораторного стенда. Определите, хватит ли тяги такого движителя, установленного на аппарат с нулевой плавучестью, чтобы поднять куб со стороной 10 см и весом 15 Н. В ответе укажите сумму выталкивающих сил.

Решение

Из условия равновесия рычага: \[F_{\text{д}}=54\cdot \dfrac{10}{75}=7{,}2~ \text{Н}.\]

Сила выталкивания куба: \[F=1000\cdot 9{,}8\cdot 0{,}001=9{,}8~ \text{Н}.\]

Сумма выталкивающих сил: \[F_{\text{в}}=9{,}8+7{,}2=17~ \text{Н}\] — это больше веса 15 Н, поэтому аппарат сможет поднять такой груз со старым движителем.

Ответ

Подзадача 1: 7,2 Н.

Подзадача 2: 17 Н.

Задача 1.3.(25 баллов)
Программирование. Расчет расстояния
Темы: Python, программирование, компьютерное зрение

Условие

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

Ниже представлена реализация программы, однако часть кода пропала, а в одной строке обнаружена ошибка. Устраните все недочеты и восстановите программу.

Для тестирования программы авторы используют три изображения. Изображения можно скачать по ссылке: https://disk.yandex.ru/d/Plmqol_Xpn80GQ/изображения.

Пример изображения на рис. 1.4.

Рис. 1.4.

Ниже приведен код программы, который необходимо исправить так, чтобы он работал согласно условию.
Python
import cv2

img = cv2.imread("slide1.jpg")

yellow_color = ((0, 50, 50), (40, 255, 255))
black_color = ((0, 0, 0), (180, 255, 30))
yellow_points = []
cube_width = 0

def find_contours(img, color):
    img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    img_mask = cv2.inRange(img_hsv, color[0], color[1])
    contours, _ = cv2.findContours(img_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    return contours

yellow_cnt = find_contours(img, yellow_color)
black_cnt = find_contours(img, black_color)

for cnt in black_cnt:
    x, y, w, h = cv2.boundingRect(cnt)
    cube_width = your_answer

for cnt in yellow_cnt:
    x, y, w, h = cv2.boundingRect(cnt)
    yellow_points.append(x)
    yellow_points.append(your_answer)

yellow_points.sort()
dist = your_answer - your_answer
result = dist / (insert_here / 10)

print(round(result))

Формат выходных данных

Выходные данные представляют собой строку, которая содержит целое число, которое равно расстоянию между прямоугольниками в сантиметрах.

Подзадача 1 (13 баллов)

Расположите строки в правильном порядке (задача на сопоставление).

  1. yellow_points[1]
  2. x + w
  3. yellow_points[2]
  4. (x + w) - x

Подзадача 2 (12 баллов)

Замените неправильный параметр в строке на верный (задача с вводом текста).

Python
    result = dist / (insert_here / 10)

Ответ

Подзадача 1: 4, 2, 3, 1.

Подзадача 2: cube_width.

Задача 1.4.(25 баллов)
Электрические схемы
Темы: электрические цепи, падение напряжения, электроника

Условие

Подзадача 1 (7 баллов)

Рис. 1.5. Лазерный модуль KY-008

Иван хочет разработать герметичный дальномер, который может определять размеры повреждений. Для этого он решил использовать лазерный модуль KY-008 (рис. 1.5), фоторезистор и плату Arduino Nano (рис. 1.6).

Рис. 1.6. Arduino Nano

Ознакомьтесь с инструкцией к модулю и ответьте на следующий вопрос.

К каким пинам платы Arduino Nano Иван должен подключить лазерный модуль?

Подключите выводы 1, 2, 3 лазерного модуля к плате, выбрав правильные варианты. Ответом является последовательность из трех цифр.

  1. Tx,
  2. D6,
  3. RST,
  4. GND,
  5. 5V,
  6. VIN.

Подзадача 2 (7 баллов)

Для обеспечения работы всех систем бортовой части подводного аппарата необходимо правильно подбирать провода для изготовления кабель-троса. Для этого необходимо знать, какие потери напряжения ожидают пользователя при использовании кабеля того или иного сечения.

Ученики провели исследования своего подводного устройства и выяснили, что при подключении подводного устройства к батарее 12 В через кабель-трос на движитель приходит только 10,68 В.

Известно, что для питания кабеля используются два одножильных провода по 20 м неизвестного сечения, сила тока в цепи 4 А.

Рассчитайте потери напряжения на кабеле. Ответ округлите до сотых.

Подзадача 3 (11 баллов)

Определите, провода какого сечения были использованы по стандарту AWG. Для определения характеристик провода нужно воспользоваться таблицей: https://anlan.ru/table-awg

Решение

Тогда потери напряжения на кабеле: \[Uk = 12 - 10{,}68= 1{,}32 ~\text{В}.\]

Сопротивление кабеля: \[R=\dfrac{1{,}32}{4}=0{,}33 ~\text{Ом}.\]

Погонное сопротивление: \[Rp=\dfrac{0{,}33~\text{Ом}}{0{,}04 ~\text{км}}=8{,}25 ~\text{Ом/км}.\]

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

Ответ

Подзадача 1: 452.

Подзадача 2: 1,32 В.

Подзадача 3: 14 AWG.

text slider background image text slider background image
text slider background image text slider background image text slider background image text slider background image