Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
products:laboratory_iot_с:exp14 [2024/11/14 14:48] – [Программный код эксперимента] labuser30products:laboratory_iot_с:exp14 [Дата неизвестна] (текущий) – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1
Строка 1: Строка 1:
-===== Эксперимент 14. Измерение напряжения ===== 
- 
-В предыдущей статье мы узнали о том что такое аналого- цифровой преобразователь. Микроконтроллер, на базе которого работает наш электронный конструктор, имеет встроенный аналого- цифровой преобразователь. Попробуем им воспользоваться. 
- 
-==== Подключение переменного резистора ==== 
-На плате конструктора установлен переменный резистор. 
-Переменный резистор состоит из полукруглой пластины, 
-покрытой веществом, имеющим электрическое сопротивление, 
-и скользящего контакта с ручкой. У переменного резистора 
-три вывода — по концам пластины и скользящий контакт. 
-Сопротивление меняется в зависимости от длины отрезка 
-резистивной пластины от ее начала до скользящего контакта. Чем 
-больше этот путь, тем выше сопротивление. 
- 
-{{ :products:esp-iot:varr.png?nolink |}} 
-//Рисунок 1. Переменный резистор. Внешний вид, устройство и условное обозначение// 
- 
-Переменный резистор можно представить как схему из двух резисторов 
-{{ :products:esp-iot:varr.1.png?nolink |}} 
- 
-==== Делитель напряжения ==== 
-С помощью переменного резистора будем получать аналоговый сигнал. 
-Используем широко распространенную схему резисторного 
-делителя напряжения. Резисторный делитель — это два 
-последовательных участка цепи, называемых плечами, сумма 
-напряжений на которых равна напряжению питания. Плечо между 
-минусом питания и средней точкой называют нижним, а другое — 
-верхним. 
- 
-{{ :products:esp-iot:varr.2.png?nolink |}} 
- 
-Резисторный делитель используется для деления напряжения. 
-Например, если верхнее и нижнее плечи имеют одинаковые 
-сопротивления, то напряжение на средней точке делителя равно 
-половине напряжения питания. Такой делитель делит напряжение 
-на 2. 
- 
-Подключим нижнее плечо с земле, а верхнее к напряжению питания. Тогда при вращении ручки переменного резистора на его средней точки напряжение будет изменяться от 0 до напряжения питания (3,3в в нашем конструкторе). Подключим среднюю точку ко входу аналого- цифрового преобразователя и будем измерять напряжение на ней. 
- 
-==== Схема эксперимента ==== 
-{{ :products:esp-iot:varr.3.png?nolink |}} 
-//Рисунок 2. Электрическая принципиальная схема эксперимента// 
- 
-{{ :products:esp-iot:adcexp.png?direct&600 |}} 
-//Рисунок 3. Монтажная схема эксперимента// 
- 
-==== Программный код эксперимента ==== 
-<file arduino Exp14.ino[enable_line_numbers="2", start_line_numbers_at="1"]> 
-#define ACD_PIN A0    
- 
-int value = 0;           
-  
-void setup() { 
-  Serial.begin(9600);           
-} 
- 
-void loop() { 
-  value = analogRead(ACD_PIN);      
-  Serial.println(value); 
-  delay(200);              
-} 
-</file> 
- 
-В строке 1 мы задаем псевдоним ''ACD_PIN'' для номера канала АЦП. В нашем микроконтроллере только один канал и он имеет номер A0. 
- 
-<code arduino [enable_line_numbers="2", start_line_numbers_at="1"]> 
-#define ACD_PIN A0 
-</code> 
- 
-В строке 3 мы объявляем переменную ''value'' с новым для нас типом ''int'' и присваиваем ей значение ''0''. Переменные типа ''int'' могут хранить только целые числа в диапазоне  
-от -32 768 до 32 767. 
- 
-<code arduino [enable_line_numbers="2", start_line_numbers_at="3"]> 
-int value = 0; 
-</code> 
- 
-В строке 6 мы с помощью функции ''begin()'' включаем последовательный порт ''Serial'' микроконтроллера для отправки сообщений на компьютер. В качестве параметра функция ''begin()'' принимает число бод (число символов в секунду), определяющее скорость передачи сообщений.   
- 
-<code arduino [enable_line_numbers="2", start_line_numbers_at="6"]> 
-  Serial.begin(9600);   
-</code> 
- 
-В цикле просим АЦП оцифровать текущее напряжение на его входе cпомощью функции ''analogRead()'' и записать полученное значение в переменную ''value''. Результатом является число в диапазоне от 0 до 1023. 
-<code arduino [enable_line_numbers="2", start_line_numbers_at="10"]> 
-  value = analogRead(ACD_PIN); 
-</code> 
- 
-После чего с помощью функции ''println()'' "печатаем" значение в последовательный порт ''Serial''. 
-<code arduino [enable_line_numbers="2", start_line_numbers_at="11"]> 
-  Serial.println(value); 
-</code> 
-Чтобы увидеть "напечатанные" значения включите монитор порта, нажав соответствующую кнопку в правом верхнем углу Arduino IDE.  [[products:laboratory_iot_c:arduino_ide_howto|Подробнее про монитор порта.]] 
- 
-Задержка в строке 13 нужна для того, чтобы сообщения микроконтроллера не "печатались" слишком быстро. 
-<code arduino [enable_line_numbers="2", start_line_numbers_at="12"]> 
-  delay(200); 
-</code> 
-Попробуй изменить значение задержки и посмотреть как изменится скорость вывода сообщений в монитор порта. 
- 
-В принципе наша программа может обойтись без переменной ''value'', т.к. она только хранит считаное значение с АЦП, при этом изменения значения не происходит. Мы можем удалить строку 3 с объявлением переменной ''value'',  а в бесконечном цикле сразу передавать полученное значение функции ''analogRead()'' в качестве аргумента в функцию печати ''Serial.println()''. В итоге тело бесконечной функции  ''loop()'' будет выглядеть следующим образом. 
- 
-<code arduino> 
-  Serial.println(analogRead(ACD_PIN));  
-  delay(200) 
-</code>  
- 
- 
-<WRAP center round info 60%> 
-  * [[https://arduino.ru/Reference/Int|Подробнее о типе int в Arduino]] 
-  * [[https://arduino.ru/Reference/Serial|Подробнее последовательном порте Serial в Arduino]] 
-</WRAP> 
-==== Дополнительное задание ==== 
-<WRAP center round tip 60%> 
-  * Если наш АЦП при напряжении 0 вольт возвращает результат 0, а при 3.3 вольт — 1023, то какой результат преобразования будет при напряжении 1.65? А если напряжение 1 вольт ровно? 
-  * Какое напряжение соответствует значению 785? 
-</WRAP>