<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[RemoteXY community — лабораторный эксперимент-опыт Кундта]]></title>
	<link rel="self" href="https://forum.remotexy.com/extern.php?action=feed&amp;tid=1642&amp;type=atom" />
	<updated>2023-04-04T03:28:46Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.remotexy.com/viewtopic.php?id=1642</id>
		<entry>
			<title type="html"><![CDATA[лабораторный эксперимент-опыт Кундта]]></title>
			<link rel="alternate" href="https://forum.remotexy.com/viewtopic.php?pid=5089#p5089" />
			<content type="html"><![CDATA[<p>Трубка Кундта на основе микроконтроллера WeMos D1</p><p>Для проведения опыта Кундта со стоячими волнами в трубе можно воспользоваться возможностями современных микроконтроллеров. Для создания установки понадобятся трубка стеклянная или пластиковая диаметром от 12 мм и больше и длиной 50 см, микроконтроллер с WiFi-&nbsp; nodemcu или&nbsp; WeMos, зуммер KY-006&nbsp; и микрофонный модуль KY-037. Зуммер и микрофонный модуль помещаются на края трубки и подключаются к микроконтроллеру по схеме</p><p>Рисунок 1. Схема установки Кундта с изменением частоты звука<br />Программа создается в оболочке RemoteXY в следующем виде</p><p>Рисунок 2. Интерфейс управления установкой<br />После этого мы получаем заготовку кода и добавляем в нее свой код в соответствии с текстом<br />#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT<br />#include &lt;ESP8266WiFi.h&gt;</p><p>#include &lt;RemoteXY.h&gt;</p><p>// настройки соединения <br />#define REMOTEXY_WIFI_SSID &quot;doublems&quot;<br />#define REMOTEXY_WIFI_PASSWORD &quot;12345678&quot;<br />#define REMOTEXY_SERVER_PORT 6377<br />const byte dynPin=2;<br />//генерация звука на втором пине<br />const int IN_PIN = A0;<br />//прием звука на аналоговом пине а0<br />const int MAX_ADC_VALUE = 1023;//возможно изменить на 255<br />int frec;</p><p>// конфигурация интерфейса&nbsp; <br />#pragma pack(push, 1)<br />uint8_t RemoteXY_CONF[] =&nbsp; &nbsp;// 43 bytes<br />&nbsp; { 255,1,0,8,0,36,0,16,31,1,68,17,1,1,60,49,8,36,68,17,<br />&nbsp; 2,52,59,40,8,36,2,0,21,93,22,6,2,26,31,31,79,78,0,79,<br />&nbsp; 70,70,0 };</p><p>&nbsp; <br />// структура определяет все переменные и события вашего интерфейса управления <br />struct {</p><p>&nbsp; &nbsp; // input variables<br />&nbsp; uint8_t switch_1; // =1 если переключатель включен и =0 если отключен </p><p>&nbsp; &nbsp; // output variables<br />&nbsp; float onlineGraph_1;<br />&nbsp; float onlineGraph_2;</p><p>&nbsp; &nbsp; // other variable<br />&nbsp; uint8_t connect_flag;&nbsp; // =1 if wire connected, else =0 </p><p>} RemoteXY;<br />#pragma pack(pop)</p><p>/////////////////////////////////////////////<br />//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;END RemoteXY include&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //<br />/////////////////////////////////////////////</p><br /><br /><p>void setup() <br />{<br /> RemoteXY_Init (); <br />&nbsp; pinMode(dynPin,OUTPUT);<br />&nbsp; pinMode(IN_PIN, INPUT);<br />frec=3000;//исходное значение частоты 3000 Гц<br /> }</p><p>void loop() <br />{ RemoteXY_Handler ();<br />&nbsp; &nbsp;<br />&nbsp; &nbsp;if ((RemoteXY.switch_1!=0)and(frec&lt;5000)){<br />&nbsp; &nbsp; &nbsp; //инициализируем переменные<br />int mn = 1024;<br />int mx = 0;<br />tone(dynPin,frec);//запускаем генератор звука<br />for (int i=0; i &lt; 1000; ++i) {<br />&nbsp; &nbsp; <br />&nbsp; //ищем макс и мин значения амплитуды<br />int val = analogRead(IN_PIN);<br />mn = min(mn, val);<br />mx = max(mx, val);<br />}<br />//нашли размах амплитуды<br />&nbsp; &nbsp; &nbsp; &nbsp;noTone(dynPin);//отключаем звук<br />&nbsp; &nbsp; delayRXY(250);&nbsp; <br />&nbsp; &nbsp; RemoteXY.onlineGraph_1 = float (frec);<br />&nbsp; &nbsp; RemoteXY.onlineGraph_2 = float (5.0 / MAX_ADC_VALUE* (mx - mn));<br />&nbsp; &nbsp; &nbsp;frec=frec+10;//увеличиваем частоту на 100 для следующего измерения<br /> }<br /> else {if (RemoteXY.connect_flag==0) //если соединение смартфона и контроллера разорвалось, то</p><p>&nbsp; &nbsp;{RemoteXY.switch_1=0; //устанавливаем выключатель в положение OFF.</p><p>&nbsp; &nbsp;} //в этом случае при повторном соединении эффекты не запустятся самопроизвольно<br />&nbsp; &nbsp; <br />&nbsp; }<br />&nbsp; }<br />&nbsp; void delayRXY (uint32_t ms) {<br />&nbsp; uint32_t t = millis ();<br />&nbsp; while (millis () - t &lt; ms) RemoteXY_Handler ();<br />&nbsp; &nbsp; <br />}<br />Общая идея программы состоит в следующем: по включении тумблера микроконтроллер начинает генерировать звуковую волну заданной частотой и в течении 1000 циклов ищет максимальное и минимальное значение амплитуды сигнала, после чего выдает на график значение частоты и амплитуды. Затем увеличивает значение частоты и повторяет то же самое до тех пор, пока не достигнет граничного значения, строя таким образом одновременно два графика-зависимости частоты и амплитуды от времени. </p><p>Из этих графиков можно определить зависимость амплитуды от частоты. Выполнение работы может быть произведено как локально, так и удаленно через облачный сервер. Создавая интерфейс, я старался сделать графики максимально большими и сначала растянул их так, что они заняли всю площадь экрана. Оказалось, что так нельзя, так как должны быть небольшие промежутки между графиками, иначе не строит. Из этих графиков в принципе можно вытащить частоты максимумов и вычислить скорость звука.<br />Жаль не умею графики вставлять.</p>]]></content>
			<author>
				<name><![CDATA[gorchakov]]></name>
				<uri>https://forum.remotexy.com/profile.php?id=2370</uri>
			</author>
			<updated>2023-04-04T03:28:46Z</updated>
			<id>https://forum.remotexy.com/viewtopic.php?pid=5089#p5089</id>
		</entry>
</feed>
