Инженерный тур. 1 этап
Дана схема, состоящая из контроллера Arduino Nano, сервомотора, джойстика, RGB-светодиода и зуммера. Схема по условию должна работать следующим образом:
- При наклоне джойстика вперед сервопривод поворачивается направо на 90°, загорается зеленый светодиод.
- При наклоне джойстика назад сервопривод поворачивается налево на 90°, загорается синий светодиод.
- При наклоне влево/вправо загорается красный светодиод.
#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
}
Найдите ошибку в коде и вставьте нужные строки в области кода вида your_answer. Ответом является шесть цифр, записанных в верной последовательности (например, 123456).
Варианты ответа:
horizontal != 512vertical == 512- 180
vertical > 512vertical < 512- 0
Дополните программу таким образом, чтобы при отсутствии действия больше 10 с светодиод начал мигать желтым цветом, а зуммер начал подавать звуковой сигнал в слышимом диапазоне (от 20 Гц до 20 кГц).
Выберите один из четырех предложенных вариантов реализации, который нужно добавить в программу после комментария // Подзадача 1.2.
- 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); } - 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); } - 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); } - 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.
Дан ТНПА с нулевой плавучестью. К сожалению, вертикальный движитель неисправен и требует замены. Перед установкой нового движителя было принято решение испытать его на лабораторном стенде.
В результате испытаний был зафиксирован вес на свободном плече стенда: 54 Н.
Длина свободного плеча: 10 см, длина плеча с движителем 75 см.
Определите тягу движителя. Ответ укажите в ньютонах с точностью до десятых.
Рассчитайте тягу движителя по показаниям лабораторного стенда. Определите, хватит ли тяги такого движителя, установленного на аппарат с нулевой плавучестью, чтобы поднять куб со стороной 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 Н.
Программа получает изображение, на котором находятся два желтых прямоугольника и один черный квадрат. Необходимо вычислить расстояние между прямоугольниками в сантиметрах, если известно, что сторона черного квадрата фиксирована и составляет 10 см.
Ниже представлена реализация программы, однако часть кода пропала, а в одной строке обнаружена ошибка. Устраните все недочеты и восстановите программу.
Для тестирования программы авторы используют три изображения. Изображения можно скачать по ссылке: https://disk.yandex.ru/d/Plmqol_Xpn80GQ/изображения.
Пример изображения на рис. 1.4.
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))
Формат выходных данных
Выходные данные представляют собой строку, которая содержит целое число, которое равно расстоянию между прямоугольниками в сантиметрах.
Расположите строки в правильном порядке (задача на сопоставление).
yellow_points[1]x + wyellow_points[2](x + w) - x
Замените неправильный параметр в строке на верный (задача с вводом текста).
result = dist / (insert_here / 10)
Подзадача 1: 4, 2, 3, 1.
Подзадача 2: cube_width.

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

Ознакомьтесь с инструкцией к модулю и ответьте на следующий вопрос.
К каким пинам платы Arduino Nano Иван должен подключить лазерный модуль?
Подключите выводы 1, 2, 3 лазерного модуля к плате, выбрав правильные варианты. Ответом является последовательность из трех цифр.
- Tx,
- D6,
- RST,
- GND,
- 5V,
- VIN.
Для обеспечения работы всех систем бортовой части подводного аппарата необходимо правильно подбирать провода для изготовления кабель-троса. Для этого необходимо знать, какие потери напряжения ожидают пользователя при использовании кабеля того или иного сечения.
Ученики провели исследования своего подводного устройства и выяснили, что при подключении подводного устройства к батарее 12 В через кабель-трос на движитель приходит только 10,68 В.
Известно, что для питания кабеля используются два одножильных провода по 20 м неизвестного сечения, сила тока в цепи 4 А.
Рассчитайте потери напряжения на кабеле. Ответ округлите до сотых.
Определите, провода какого сечения были использованы по стандарту 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.




