Отчёт по практике Arduino. Отчет. Программирование микроконтроллеров в среде Arduino
Скачать 2.74 Mb.
|
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего образования «Южно-Уральский государственный университет (национальный исследовательский университет)» Высшая школа электроники и компьютерных наук Кафедра автоматики и управления ОТЧЕТ ПО УЧЕБНОЙ ПРАКТИКЕ Тема: Программирование микроконтроллеров в среде Arduino Студент _______________________ (Ф.И.О., Подпись) Группа XX-1XXкурс I . Место прохождения учебной практики ЮУрГУ, Кафедра автоматики и управления, ауд. 712/3б (наименование учреждения, адрес) Продолжительность ‒ 4 недели Сроки прохождения практики начало 01.07.201X г. окончание 28.07.201X г. (дата начала и окончания практики) Руководитель практики в группе _________ Колесникова О.В. Руководитель практики от кафедры __________Колесникова О.В. Челябинск 201X Задание №1. Маячок Цель: программное управление включением светодиода, подключенного к плате Arduino. Рисунок 1.1 – Схема электрическая принципиальная Рисунок 1.2 – Схема, собранная в программной среде SimulIDE Собрана схема и разработана программа, чтобы светодиод светился полсекунды, а пауза между вспышками была равна одной секунде. int ledPin = 13; voidsetup(){pinMode(ledPin, OUTPUT);} voidloop() { digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); delay(1000);} Листинг 1.2 – Листингпрограммы 2. Код примера изменен так, чтобы светодиод включался на три секунды после запуска устройства, а затем мигал в стандартном режиме. int ledPin = 13; voidsetup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, HIGH); delay(3000); digitalWrite(ledPin, LOW); delay(1000); } voidloop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); } Листинг 1.3 – Листинг программы Ответы на вопросы: 1. Что будет, если подключить к земле анод светодиода вместо катода? Ответ: светодиод не будет гореть, т.к. не будет пропускать ток. 2. Что будет, если подключить светодиод с резистором большого номинала (например, 10 кОм)? Ответ: сила тока будет недостаточна для горения светодиода, и он не будет гореть. 3. Что будет, если подключить светодиод без резистора? Ответ: светодиод может сгореть, из-за неограниченной силы тока. 4. Зачем нужна встроенная функция pinMode? Какие параметры она принимает? Ответ: функция pinMode служит для определения входных и выходных портов. 5. Зачем нужна встроенная функция digitalWrite? Какие параметры она принимает? Ответ: функция digitalWrite служит для установления сигналов на портах. Может быть высокого или низкого уровня. 6. С помощью какой встроенной функции можно заставить микроконтроллер ничего не делать? Ответ: с помощью функции пустой функции loop. 7. В каких единицах задается длительность паузы для этой функции? Ответ: задается в миллисекундах. Вывод: Я ознакомился с базовыми принципами работы микроконтроллера Arduino Uno R3, написана программа для работы маячка. Задание №2. Плавное мигание Цель: программное управление яркостью свечения светодиода, подключенного к плате Arduino. В соответствии с заданием была собрана схема и разработана программа, чтобы светодиод плавно мигал На рисунке 2.1 представлена схема электрическая принципиальная. Рисунок 2.1 – Схема электрическая принципиальная На рисунке 2.2 представлена схема, собранная в программной среде SimulIDE. Рисунок 2.2 – Схема, собранная в программной среде SimulIDE 1. Кодисхеманарисунке 2.3 изменены так, чтобы светодиод работал от 11-го порта.Код программы приведен на листинге 2.2. Рисунок 2.3 – Схема, собранная в программной среде SimulIDE #include int ledPin = 11; float Val; int led; voidsetup(){} voidloop() { for (int x = 0; x < 180; x++) { Val = sin(x*(3.1412 / 180)); led = int(Val * 255); analogWrite(ledPin, led); delay(10); } } Листинг 2.2 – Листинг программы 2. Код программы изменен так, чтобы в течение секунды на светодиодпоследовательно подавалось усредненное напряжение 0, 1, 2, 3, 4, 5 В. Схемы аналогичны схемам, приведенным на рисунках 2.1-2.2. Код программы приведен на листинге 2.3. int ledPin = 9; float Val; int led; voidsetup(){} voidloop() { led = int(0); analogWrite(ledPin, led); delay(166); led = int(255 / 5); analogWrite(ledPin, led); delay(166); led = int(255 / 5 * 2); analogWrite(ledPin, led); delay(166); led = int(255 / 5 * 3); analogWrite(ledPin, led); delay(166); led = int(255 / 5 * 4); analogWrite(ledPin, led); delay(166); led = int(255); analogWrite(ledPin, led); delay(166); } Листинг 2.3 – Листинг программы 3. Добавлен еще один светодиод, резистор на 220 Ом (см. рисунок 2.4), светодиодподключен к порту 3, программа изменена так, чтобы светодиоды мигали в противофазе (см. листинг 2.4). Рисунок 2.4 – Схема, собранная в программной среде SimulIDE #include float Val; int led; voidsetup(){} voidloop() { for (int x = 0; x < 180; x++) { Val = sin(x*(3.1412 / 180)); led = int(Val * 255); analogWrite(9, led); analogWrite(3, 255 - led); delay(10); } } Листинг 2.4 – Листингпрограммы Ответы на вопросы: 1. Какие из следующих идентификаторов корректны и не вызовутошибку?13pin,MOTOR_1,контакт_светодиода, sensorvalue,leftServo,my-var,distance_eval2. Ответ: MOTOR_1, leftServo, distance_eval2. 2. Чтопроизойдет, еслисоздатьдирективу #defineHIGHLOW? Ответ: значение HIGHбудет равно LOW (0 В). 3. Почему мы не сможем регулировать яркость светодиода, подключенного к порту 7? Ответ: вывод 7 не поддерживает ШИМ-сигнал, то есть на нём нельзя регулировать напряжение. 4. Какое усредненное напряжение мы получим на выходе 6, если вызовем функцию analogWrite(6, 153)? Ответ:3В. 5. Какое значение параметра value нужно передать функцииanalogWrite(), чтобы получить усредненное напряжение 2 В? Ответ: 102. Вывод: Я обучилсяпрограммному управлению яркостью свечения светодиода, подключенного к плате Arduino Упражнение №3. Светильник с управляемой яркостью Цель: программное управление яркостью свечения светодиода, подключенного к плате Arduino в зависимости от положения движка переменного резистора. В соответствии с заданием была собрана схема и разработана программа, чтобы яркость светодиодаможно было регулировать. На рисунке 3.1 представлена схема электрическая принципиальная. Рисунок 3.1 – Схема электрическая принципиальная На рисунке 3.2 представлена схема, собранная в программной среде SimulIDE. Рисунок 3.2 – Схема, собранная в программной среде SimulIDE 1. Подключен к порту 5 еще один светодиод (см. Рисунок 3.3). Код изменентак, чтобы второй светодиод светился на 1/8(см. Листинг 3.2) от яркости первого. Рисунок 3.3 – Схема, собранная в программной среде SimulIDE #defineLED_PIN 9 #defineLED_PIN2 5 #definePOT_PIN A0 voidsetup() { pinMode(LED_PIN, OUTPUT); pinMode(LED_PIN2, OUTPUT); pinMode(POT_PIN, INPUT);} voidloop() { int rotation, brightness; rotation = analogRead(POT_PIN); brightness = rotation / 4; analogWrite(LED_PIN, brightness); analogWrite(LED_PIN2, brightness / 8); } Листинг 3.2 – Листинг программы 2. Код изменен таким образом, чтобы яркость второго светодиода увеличивалась, в то время как яркость первого уменьшалась (см. Листинг 3.3). #defineLED_PIN 9 #defineLED_PIN2 5 #definePOT_PINA0 voidsetup() { pinMode(LED_PIN, OUTPUT); pinMode(LED_PIN2, OUTPUT); pinMode(POT_PIN, INPUT);} voidloop() { int rotation, brightness; rotation = analogRead(POT_PIN); brightness = rotation / 4; analogWrite(LED_PIN, brightness); analogWrite(LED_PIN2, 255 - brightness); } Листинг 3.3 – Листинг программы Ответы на вопросы: 1. Можно ли при сборке схемы подключить светодиод и потенциометрнапрямую к разным входам GND микроконтроллера? Ответ: да, можно. 2. В какую сторону нужно крутить переменный резистор для увеличения яркости светодиода? Ответ: в сторону клеммы, подключенной к 5 В. 3. Что будет, если стереть из программы строчку pinMode(LED_PIN,OUTPUT)? АстрочкуpinMode(POT_PIN, INPUT)? Ответ: ничего не изменится, так как используемые порты по умолчанию работают в данных режимах. 4. Зачем делится значение, полученное с аналогового входа перед тем,как задать яркость светодиода? Что будет, если этого не сделать? Ответ: функция analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255. По мере вращения ручки светодиод будет гаснуть/зажигаться 4 раза. Вывод: Я научилсяпрограммнному управлению яркостью свечения светодиода, подключенного к плате Arduino в зависимости от положения движка переменного резистора Упражнение №4. Музыкальная пауза Цель: управление звучанием пьезоакустического преобразователя (пьезодинамика). В соответствии с заданием была собрана схема с пьезодинамиком. На рисунке 4.1 представлена схема электрическая принципиальная. Рисунок 4.1 – Схема электрическая принципиальная На рисунке 4.2 представлена схема, собранная в программной среде SimulIDE. Рисунок 4.2 – Схема, собранная в программной среде SimulIDE Рисунок 4.3 – Схема, собранная в программной среде SimulIDE 1. С помощью функции analogWrite() подаётсясигнал SOS: три точки, три тире, три точки азбукой Морзе (см. листинг 4.4) int buzzer = 9; voidsetup() {pinMode(buzzer, OUTPUT);} voidloop() { for (int i = 0; i<3; i++) { analogWrite(buzzer, 100); delay(100); analogWrite(buzzer, 0); delay(200); } for (int i = 0; i<3; i++) { analogWrite(buzzer, 100); delay(500); analogWrite(buzzer, 0); delay(200); } for (int i = 0; i<3; i++) { analogWrite(buzzer, 100); delay(100); analogWrite(buzzer, 0); delay(200); }} Листинг 4.4 – Листинг программы 2. С помощью функции tone()звук раздается не непрерывно, а 10 раз в секунду с различимыми паузами(см. листинг 4.5). int buzzer = 9; voidsetup() {pinMode(buzzer, OUTPUT);} voidloop() { tone(buzzer, 261); delay(5); noTone(buzzer); delay(95); tone(buzzer, 261); delay(15); noTone(buzzer); delay(85); tone(buzzer, 261); delay(25); noTone(buzzer); delay(75); tone(buzzer, 261); delay(35); noTone(buzzer); delay(65); tone(buzzer, 261); delay(45); noTone(buzzer); delay(55); tone(buzzer, 261); delay(55); noTone(buzzer); delay(45); tone(buzzer, 261); delay(65); noTone(buzzer); delay(35); tone(buzzer, 261); delay(75); noTone(buzzer); delay(25); tone(buzzer, 261); delay(85); noTone(buzzer); delay(15); tone(buzzer, 261); delay(95); noTone(buzzer); delay(5);} Листинг 4.5 – Листингпрограммы Ответы на вопросы: 1. Как будет работать вызов tone() без указания длительности звучания? Ответ: бесконечное звучание 2. Можно ли устроить полифоническое звучание с помощью функцииtone()? Ответ: нет, нельзя. 3. Сколькими пьезодинамиками можно управлять одновременно? Ответ: одним. Вывод: Теперь я умеюуправлять звучанием пьезоакустического преобразователя. Упражнение №5. Автомат уличного освещения Цель: управление включением светодиода, подключенного к платеArduino, в зависимости от уровня освещенности фоторезистора и порога,заданного потенциометром. В соответствии с заданием была собрана схема автомата уличного освещения. На рисунке 5.1 представлена схема электрическая принципиальная. Рисунок 5.1 – Схема электрическая принципиальная На рисунке 5.2 представлена схема, собранная в программной среде Tinkercad. Рисунок 5.2 – Схема, собранная в программной среде Tinkercad 1. Переписана программа без использования переменной tooDark ссохранением функционала устройства(см. листинг 5.2). #define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 int cnt = 0; void setup() {pinMode(LED_PIN, OUTPUT);} void loop() { int lightness = analogRead(LDR_PIN); int threshold = analogRead(POT_PIN); if (lightness < threshold) cnt++; if (cnt>300) { cnt=0; digitalWrite(LED_PIN, HIGH); delay(5000); digitalWrite(LED_PIN, LOW); } } Листинг 5.2 – Листингпрограммы 3. Добавлен в схему еще один светодиод(см. рисунок 5.3). Программа дополнена: при падении освещенности ниже порогового значения включаетсяодин светодиод, а при падении освещенности ниже половины от порогового значения включаются оба светодиода(см. листинг 5.3). Рисунок 5.3 – Схема, собранная в программной среде TinkerCAD #define LED_PIN 10 #define LED_PIN_2 9 #define LDR_PIN A0 #define POT_PIN A1 int cnt = 0; void setup() { pinMode(LED_PIN, OUTPUT); pinMode(LED_PIN_2, OUTPUT); } void loop() { int lightness = analogRead(LDR_PIN); int threshold = analogRead(POT_PIN); if (lightness < threshold) cnt++; if (cnt>300) { digitalWrite(LED_PIN, HIGH); if (lightness < threshold/2) digitalWrite(LED_PIN_2, HIGH); delay(5000); cnt=0; digitalWrite(LED_PIN, LOW); digitalWrite(LED_PIN_2, LOW); } } Листинг 5.3 – Листингпрограммы 4. Схема и программа изменены: светодиоды включаются по-прежнему принципу, но светятся тем ярче, чем меньше света падаетна фоторезистор (см. листинг 5.4). #define LED_PIN 10 #define LED_PIN_2 9 #define LDR_PIN A0 #define POT_PIN A1 void setup() { pinMode(LED_PIN, OUTPUT); pinMode(LED_PIN_2, OUTPUT); } void loop() { int lightness=analogRead(LDR_PIN); int Threshold=analogRead(POT_PIN); if (lightness analogWrite(LED_PIN,255-lightness/4); elseanalogWrite(LED_PIN,0); if (lightness analogWrite(LED_PIN_2,255-lightness/4); elseanalogWrite(LED_PIN_2,0); } Листинг 5.4 – Листингпрограммы Ответы на вопросы: 1. Если установить фоторезистор между аналоговым входом и землей,устройство будет работать наоборот: светодиод будет включаться при увеличении количества света. Почему? Ответ: в этом случае при уменьшении сопротивления фоторезистора напряжение в средней точке будет смещаться не к 5 В, а к земле. |