Logo
Logo

Механический черный ящик

Введение

Вам выдан жёсткий механический чёрный ящик — контейнер массой $m_1$. Внутри контейнера находится груз массой $m_2$, который подвешен на лёгкой пружине жёсткостью $k_1$ к потолку ящика. Второй груз массой $m_3$ подвешен к грузу $m_2$ другой лёгкой пружиной жёсткостью $k_2$. В системе есть небольшое вязкое трение, которое зависит от скоростей тел. Ускорение свободного падения $g = 9.81 м/с^2$ параллельно боковым стенкам ящика.

Ящик может перемещаться вверх или вниз с кусочно-заданным постоянным ускорением. Эта зависимость задается длительностью (в секундах) и ускорением (в $м/с^2$) для каждого отрезка. Симуляция показывает в «реальном времени» значение силы $F$, которую нужно приложить к ящику, чтобы реализовать заданное ускорение в текущий момент времени, а также показывает значение времени. Программа также сохранит расчет в текстовый файл, который расположен там же, где и файл программы. Все симуляции всегда начинаются с одинаковыми начальными конфигурациями тел.

\textit{Примечание}: Каждое измерение силы $F$ обладает небольшой случайной погрешностью. Пружины можно считать линейными для разумно малых деформаций. Для больших деформаций пружины нелинейны. $k_1$ и $k_2$ — жесткости каждой пружины для малых деформаций вблизи положения равновесия, когда ящик находится в состоянии покоя. Сил $F$ и ускорение считаются положительными, если они направлены вверх. Длина стороны ящика равна $0.6 м$, и ящик изначально находится в середине комнаты высотой $3 м$. Эксперимент автоматически заканчивается, если ящик достигает потолка или пола или если любая из масс сталкивается с ящиком или другой массой. На рисунке не соблюдён масштаб.

Задание

Определите $m_1$, $m_2$, $m_3$, $k_1$, $k_2$. Погрешности оценивать НЕ нужно.

Как и в любом эксперименте в отчете должны присутствовать подписанные таблицы, графики и расчетные формулы. По отчету должно быть ясно, что вы непосредственно измеряли и как вы получили свои ответы.

Интерфейс программы

exe
Исполняемые файлы под операционные системы Windows, Linux, MacOS опубликованы на гитхабе.

Вначале программа запрашивает последовательность входных действий. Вы можете сделать следующие операции:

- Чтобы добавить участок в схему ускорений, введите два числа и нажмите $\textbf{Enter}$, например: $\texttt{1.5 -0.4}$. Первое число — это $\textbf{длительность}$ участка в секундах (должно быть кратным $0.01 c$), а второе число — $\textbf{ускорение}$ в $м/с^2$ (должно быть от $-30$ до $30$).

- Введите $\texttt{repeat}$, целое число и нажмите $\textbf{Enter}$ для повторения действий, например:
$\texttt{repeat 10}$
Целое число — это $\textbf{сколько раз}$ вы хотите повторять действия. Каждое повторенное действие должно заканчиваться командой
$\texttt{endrepeat}$.

- Введите $\texttt{endrepeat}$, чтобы завершить повторение действий. При выполнении эксперимента, все действия между $\texttt{repeat}$ и $\texttt{endrepeat}$ будут повторены заданное число раз. Вы не можете повторять действия внутри другого повторения.

- Чтобы изменить интервал времени между последовательными измерениями, введите $\texttt{sample}$ и число, нажмите $\textbf{Enter}$, например: $\texttt{sample 0.4}$. Это число будет новым значением $\textbf{времени между последовательными измерениями}$, т.е. с таким интервалом времени результаты расчетов будут записаны в файл. Значение времени между последовательными измерениями должно быть кратно $0.01 с$. Значение по умолчанию — $0.01 с$.

- Чтобы завершить последовательность действий и начать эксперимент, введите $\texttt{begin}$.

Вы можете также записать инструкции одной строкой и затем нажать $\textbf{Enter}$. Например, Вы можете ввести
$\texttt{sample 0.4 repeat 10 1.5 0.4 1.5 -0.4 endrepeat begin}$

таким образом запустится расчет со временем между последовательными измерениями равным $0.4 с$ и соответствующими ускорениями ящика $a=0.4 м/с^2$ и $a=-0.4 м/с^2$ 10 раз.

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

- Если ускорение вне диапазона: $\texttt{Acceleration is out of range.}$

- Если длительность действия ускорения вне диапазона: $\texttt{Duration is out of range.}$

- Если время между последовательными измерениями вне диапазона: $\texttt{Sampling time is out of range.}$

- Если число повторений вне диапазона: $\texttt{Number of repeat times is out of range.}$

- Если вы пытаетесь запустить цикл внутри другого цикла действий: $\texttt{Cannot repeat actions inside another repeat.}$

- Если вы пишите $\texttt{endrepeat}$, не задав сначала $\texttt{repeat}$: $\texttt{Cannot end repeat outside repeat.}$

- Во всех остальных случаях: $\texttt{Invalid entry.}$

После того, как Вы ввели $\texttt{begin}$, программа просит задать имя выходного файла $\texttt{Enter name for output file (e.g. "{}results"{}).}$

Введите имя файла и нажмите $\textbf{Enter}$. Вам рекомендуется использовать в имени только латинские буквы и цифры (в противном случае данные могут быть не сохранены). Данные будут сохранены в файле $\texttt{.txt}$ с заданным именем в той же папке, что и файл программы.

После этого программа покажет $\texttt{Begin experiment.}$ и начнёт расчет. Программа будет показывать текущее время от начала эксперимента ($\texttt{Time (s)}$), измеренную величину силы $F$ ($\texttt{Force (N)}$) и ускорение ящика ($\texttt{Accel (m/s\^{}2)}$). Эти же данные будут также записаны в текстовый файл.

Затем программа выведет одно из следующих сообщений.

- Если эксперимент успешно закончен: $\texttt{Experiment ended successfully.}$

- Если ящик достиг потолка: $\texttt{The box hit the ceiling. Experiment ended.}$

- Если ящик достиг пола: $\texttt{The box hit the floor. Experiment ended.}$

- Если массы внутри ящика столкнулись или одна из масс внутри ящика столкнулась с ящиком: $\texttt{Masses and/or the box collided. Experiment ended.}$

После окончания эксперимента можно начать следующий.