Главная страница
Навигация по странице:

  • 4. Допустим, у нас есть код if (условие) {действие;}В каких случаях будет выполнено действие

  • 5. При каких значениях y выражение x+y>0 будет истинным, еслиx>0

  • 7. Чем отличается оператор == от оператора =

  • 1. Почему у светодиодной шкалы на 10 сегментов 20 ножек Ответ: потому что это 10 анодов и 10 катодов2. Зачем в схеме биполярный транзистор Какой он проводимости

  • 3. За счет чего увеличивается яркость шкалы Ответ: за счет использования ШИМ на 9 пине.4. Почему после достижения значения 255 переменная brightnessобнуляется

  • 1. Почему в данном упражнении светодиодная шкала подключается безиспользования транзистора

  • 2. Если бы светодиоды были бы подключены только к портам 5, 6, 7, 8и 9, что нужно было бы изменить в программе

  • 5. Что возвращает функция millis()

  • 6. Как в данном упражнении вычисляется номер порта, на которомнужно включить светодиод

  • 1. Почему порты, к которым подключены кнопки, не настраивались какINPUT, но устройство работает

  • 3. Почему разные «ноты», издаваемые пьезодинамиком, звучат с разной громкостью

  • 4. С какой целью в этом упражнении используется оператор логического отрицания !

  • 1. Зачем в схеме использован диод

  • 2. Почему использован полевой MOSFET-транзистор, а не биполярный

  • 3. Почему между портом Arduino и затвором транзистора не установлен резистор

  • Отчёт по практике Arduino. Отчет. Программирование микроконтроллеров в среде Arduino


    Скачать 2.74 Mb.
    НазваниеПрограммирование микроконтроллеров в среде Arduino
    АнкорОтчёт по практике Arduino
    Дата14.05.2022
    Размер2.74 Mb.
    Формат файлаdocx
    Имя файлаОтчет.docx
    ТипОтчет
    #528283
    страница2 из 4
    1   2   3   4

    2. Какой результат работы устройства будет получен, если свет от светодиода будет падать на фоторезистор?

    Ответ: светодиод начнет мигать.

    3. Если все же фоторезистор установлен между аналоговым входом иземлей (как сказано в первом вопросе), то каким образом нужно изменитьпрограмму, чтобы устройство работало верно?

    Ответ: изменитьстрочку: intlightness = 1023 - analogRead(LDR_PIN);


    4. Допустим, у нас есть код if (условие) {действие;}В каких случаях будет выполнено действие?

    Ответ: действие будет выполнено, если условие является истинным.


    5. При каких значениях y выражение x+y>0 будет истинным, еслиx>0?

    Ответ: у> -x


    6. Обязательно ли указывать, какие инструкции выполнять, если условие в операторе if ложно?

    Ответ: если условие всегда ложно, то достаточно написать код из ветки else.


    7. Чем отличается оператор == от оператора =?

    Ответ: первый логическое равно, второй присвоение.

    8. Если используется конструкцияif (условие) действие1;else действие2;может ли быть ситуация, когда ни одно из действий не выполнится?Почему?

    Ответ: нет так как логическое условие может быть истиной или ложью.

    Вывод: Сегодня я научилсяуправлять включением светодиода, подключенного к платеArduino, в зависимости от уровня освещенности фоторезистора и порога,заданного потенциометром

    Упражнение №6. Пульсар

    Цель: программное управление яркостью свечения светодиодной шкалы, подключенного к плате Arduino через транзистор.

    На рисунке 6.1 представлена схема электрическая принципиальная.



    Рисунок 6.1 – Схема электрическая принципиальная

    На рисунке 6.2 представлена схема, собранная в программной среде SimulIDE.



    Рисунок 6.2 – Схема, собранная в программной среде SimulIDE

    1. Изменена программа так, чтобы яркость шкалы росла только до половины от максимальной.

    #defineCONTROL_PIN 9

    int brightness = 0;

    voidsetup() {pinMode(CONTROL_PIN, OUTPUT);}

    voidloop()

    { brightness = (brightness + 1) % 128;

    analogWrite(CONTROL_PIN, brightness);

    delay(10);}

    Листинг 6.2 – Листинг программы

    2. Изменена программа так, чтобы шкала становилась максимально яркой в три раза быстрее, без изменения функции delay().

    #defineCONTROL_PIN 9

    int brightness = 0;

    voidsetup() {pinMode(CONTROL_PIN, OUTPUT);}

    voidloop()

    { brightness = (brightness + 3) % 256;

    analogWrite(CONTROL_PIN, brightness);

    delay(10);}

    Листинг 6.3 – Листинг программы

    3. Изменена программа так, чтобы такой же результат был получен без использования операции %.

    #defineCONTROL_PIN 9

    int brightness = 0;

    voidsetup() {pinMode(CONTROL_PIN, OUTPUT);}

    voidloop()

    { brightness = (brightness<256) ? (brightness + 1) : 0;

    analogWrite(CONTROL_PIN, brightness);

    delay(10);}

    Листинг 6.4 – Листинг программы

    Ответы на вопросы:


    1. Почему у светодиодной шкалы на 10 сегментов 20 ножек?

    Ответ: потому что это 10 анодов и 10 катодов


    2. Зачем в схеме биполярный транзистор? Какой он проводимости?

    Ответ: Без транзистора такое количество светодиодов будет потреблять больше тока, чем 40 мА, которые может себе позволить цифровой порт платы, на который установлен БТ, для управления большим током с помощью малого.


    3. За счет чего увеличивается яркость шкалы?

    Ответ: за счет использования ШИМ на 9 пине.


    4. Почему после достижения значения 255 переменная brightnessобнуляется?

    Ответ: analogWrite принимает значение в диапазоне от 0 до 255, поэтому мы получаем остаток от деления на 256.

    Вывод: Я освоил программное управление яркостью свечения светодиодной шкалы, подключенного к плате Arduino через транзистор

    Упражнение №7. Бегущий огонек

    Цель: организация эффекта «бегущий огонь» на светодиодной шкале,подключенной к плате Arduino.

    На рисунке 7.1 представлена схема электрическая принципиальная.



    Рисунок 7.1 – Схема электрическая принципиальная

    На рисунке 7.2 представлена схема, собранная в программной среде SimulIDE.



    Рисунок 7.2 – Схема, собранная в программной среде SimulIDE

    1. Код изменён так, чтобы светодиоды переключались раз в секунду.

    #defineFIRST_LED_PIN 2

    #defineLAST_LED_PIN 11

    voidsetup()

    {for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; pin++)

    pinMode(pin, OUTPUT);}

    voidloop()

    { unsignedint ms = millis();

    int pin = FIRST_LED_PIN + (ms / 1000) % 10;

    digitalWrite(pin, HIGH); delay(10);

    digitalWrite(pin, LOW);}

    Листинг 7.2 – Листинг программы

    2. Без выключения портов сделано так, чтобы огонек бежал только по средним четырем делениям шкалы.

    #defineFIRST_LED_PIN 2

    #defineLAST_LED_PIN 11

    voidsetup(){

    for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; pin++)pinMode(pin, OUTPUT);}

    voidloop()

    { unsignedint ms = millis();

    int pin = (ms / 120) % 4 + 5;

    digitalWrite(pin, HIGH);

    delay(10);

    digitalWrite(pin, LOW);}

    Листинг 7.3 – Листинг программы

    3. Программа изменена: вместо intpin = FIRST_LED_PIN + (ms / 120) % 10 перемещением огонька управляет цикл for.

    #defineFIRST_LED_PIN 2

    #defineLAST_LED_PIN 11

    voidsetup()

    { for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; pin++)

    pinMode(pin, OUTPUT);}

    voidloop()

    { for (int pin = 2; pin<12; pin++)

    { digitalWrite(pin, HIGH);

    delay(120);

    digitalWrite(pin, LOW); }}

    Листинг 7.4 – Листинг программы

    4. Неменяяместамипровода, изменена программатак, чтобы огонек бегал в обратном направлении.

    #defineFIRST_LED_PIN 2

    #defineLAST_LED_PIN 11

    voidsetup(){

    for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; pin++) pinMode(pin, OUTPUT);}

    voidloop()

    { unsignedint ms = millis();

    int pin = LAST_LED_PIN - (ms / 120) % 10;

    digitalWrite(pin, HIGH);

    delay(10);

    digitalWrite(pin, LOW);}

    Листинг 7.5 – Листинг программы

    Ответы на вопросы:


    1. Почему в данном упражнении светодиодная шкала подключается безиспользования транзистора?

    Ответ: потому что здесь для каждого светодиода мы используем собственный пин.


    2. Если бы светодиоды были бы подключены только к портам 5, 6, 7, 8и 9, что нужно было бы изменить в программе?

    Ответ: #defineFIRST_LED_PIN 5

    #defineLAST_LED_PIN 9


    3. С помощью какой другой инструкции можно выполнить действие,эквивалентное ++pin?

    Ответ: pin = pin + 1


    4. В чем разница между переменными типов int и unsigned int?

    Ответ: они имеют одинаковую размерность, но разный диапазон, так как второй тип является беззнаковым.


    5. Что возвращает функция millis()?

    Ответ: время в миллисекундах, прошедшее с момента включения микроконтроллера


    6. Как в данном упражнении вычисляется номер порта, на которомнужно включить светодиод?

    Ответ: int pin = FIRST_LED_PIN + (ms / 120) % 10;

    Вывод: Произведенаорганизация эффекта «бегущий огонь» на светодиодной шкале,подключенной к плате Arduino

    Упражнение №8. Мерзкое пианино

    Цель: управление частотой пьезодинамика в зависимости от нажатойкнопки.



    Рисунок 8.1 – Схема электрическая принципиальная



    Рисунок 8.2 – Схема, собранная в программной среде SimulIDE

    1. Пианино звучит в диапазоне от 2 кГц до 5 кГц.

    #defineBUZZER_PIN 13

    #defineFIRST_KEY_PIN 7

    #defineKEY_COUNT 3

    voidsetup(){pinMode(BUZZER_PIN, OUTPUT);}

    voidloop(){for (int i = 0; i
    int keyPin = i + FIRST_KEY_PIN;

    boolean keyUp = digitalRead(keyPin);

    if(!keyUp) {int frequency = 2000 + i * 1500;

    tone(BUZZER_PIN, frequency, 20);

    }}}

    Листинг 8.2 – Листингпрограммы

    2. Добавлено еще 2 кнопки и изменена программатак, чтобы можно было извлечь 5 различных нот.

    #defineBUZZER_PIN 13

    #defineFIRST_KEY_PIN 7

    #defineKEY_COUNT 5

    voidsetup(){pinMode(BUZZER_PIN, OUTPUT);}

    voidloop(){

    for (int i = 0; i
    int keyPin = i + FIRST_KEY_PIN;

    boolean keyUp = digitalRead(keyPin);

    if(!keyUp) {

    int frequency = 2000 + i * 500;

    tone(BUZZER_PIN, frequency, 20);

    }}}

    Листинг 8.3 – Листингпрограммы



    Рисунок 8.3 – Схема, собранная в программной среде SimulIDE

    3. Подключены кнопки по схеме с подтягивающим к земле резистором.



    Рисунок 8.4 – Схема, собранная в программной среде SimulIDE

    #defineBUZZER_PIN 13

    #defineFIRST_KEY_PIN 7

    #defineKEY_COUNT5

    voidsetup(){pinMode(BUZZER_PIN, OUTPUT);}

    voidloop()

    { for (int i = 0; i
    int keyPin = i + FIRST_KEY_PIN;

    boolean keyUp = digitalRead(keyPin);

    if (keyUp) {

    int frequency = 2000 + i * 500;

    tone(BUZZER_PIN, frequency, 20);}}}

    Листинг 8.3 – Листингпрограммы

    Ответы на вопросы:


    1. Почему порты, к которым подключены кнопки, не настраивались какINPUT, но устройство работает?

    Ответ: потому что, они по умолчанию INPUTдля digitalRead.


    2. Каким образом удалось избежать написания отдельного кода длячтения каждой кнопки?

    Ответ: благодаря использованию цикла, который «проходит» по всем кнопкам от FIRST_KEY_PIN до KEY_COUNT


    3. Почему разные «ноты», издаваемые пьезодинамиком, звучат с разной громкостью?

    Ответ: у нот разные частоты, а чем выше частота, тем громче она звучит.


    4. С какой целью в этом упражнении используется оператор логического отрицания !?

    Ответ: Поскольку мы собрали схему с подтягивающим резистором, при нажатии кнопки мы будем получать на соответствующем порте 0.

    Вывод: Теперь я умею реализовыватьуправление частотой пьезодинамика в зависимости от нажатойкнопки.

    Упражнение №9. Миксер

    Цель: создать модель миксера с двумя скоростями работы на основеплаты Arduino.



    Рисунок 9.1 – Схема электрическая принципиальная



    Рисунок 9.2 – Схема, собранная в программной среде TinkerCAD
    #defineMOTOR_PIN 9

    #defineFIRST_BUTTON_PIN 5

    #defineBUTTON_COUNT 3

    #defineSPEED_STEP (255 / (BUTTON_COUNT - 1))
    voidsetup()

    {

    pinMode(MOTOR_PIN, OUTPUT);

    for (int i = 0; i
    pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);

    }
    voidloop()

    {

    for (int i = 0; i
    if (digitalRead(i + FIRST_BUTTON_PIN))

    continue;

    int speed = i * SPEED_STEP;

    analogWrite(MOTOR_PIN, speed);

    }

    }

    Листинг 9.1 – Листингпрограммы

    1. Внесено единственное изменение в программу, после которого максимальная скорость вращения мотора составит половину от возможной.

    #defineMOTOR_PIN 9

    #defineFIRST_BUTTON_PIN 5

    #defineBUTTON_COUNT 3

    #defineSPEED_STEP (127 / (BUTTON_COUNT - 1))
    voidsetup()

    {

    pinMode(MOTOR_PIN, OUTPUT);

    for (int i = 0; i
    pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);

    }
    voidloop()

    {

    for (int i = 0; i < BUTTON_COUNT; ++i) {

    if (digitalRead(i + FIRST_BUTTON_PIN))

    continue;

    int speed = i * SPEED_STEP;

    analogWrite(MOTOR_PIN, speed);

    }

    }

    Листинг 9.2 – Листингпрограммы
    2. Переписана программа без использования инструкции continue.

    #defineMOTOR_PIN 9

    #defineFIRST_BUTTON_PIN 5

    #defineBUTTON_COUNT 3

    #defineSPEED_STEP(127 / (BUTTON_COUNT - 1))

    voidsetup()

    { pinMode(MOTOR_PIN, OUTPUT);

    for (int i = 0; i
    pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);

    }
    voidloop()

    { for (int i = 0; i
    if(!digitalRead(i + FIRST_BUTTON_PIN))

    {

    int speed = i * SPEED_STEP;

    analogWrite(MOTOR_PIN, speed);

    }

    }

    }

    Листинг 9.3 – Листингпрограммы

    3. Добавлена в схему еще одну кнопка, у миксера теперь три режима.



    Рисунок 9.3 – Схема, собранная в программной среде TinkerCad
    #defineMOTOR_PIN 9

    #defineFIRST_BUTTON_PIN 4

    #defineBUTTON_COUNT 4

    #defineSPEED_STEP (255 / (BUTTON_COUNT - 1))

    voidsetup()

    {

    pinMode(MOTOR_PIN, OUTPUT);

    for (int i = 0; i
    pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);

    }
    voidloop()

    {

    for (int i = 0; i
    if (digitalRead(i + FIRST_BUTTON_PIN))

    continue;

    int speed = i * SPEED_STEP;

    analogWrite(MOTOR_PIN, speed);

    }

    }

    Листинг 9.4 – Листингпрограммы


    1. Зачем в схеме использован диод?

    Ответ: Защитный диод в цепи транзистора нужен для того, чтобы ток обратного направления, который начнет создавать двигатель, вращаясь поинерции, не вывел транзистор из строя.


    2. Почему использован полевой MOSFET-транзистор, а не биполярный?

    Ответ: полевые транзисторы обладают высоким входным сопротивлением по постоянному току, и даже управление на высокой частоте не приводит к значительным затратам энергии.


    3. Почему между портом Arduino и затвором транзистора не установлен резистор?

    Ответ: потому что использован режим работы портов: INPUT_PULLUP


    4. Как работает инструкция continue, использованная в цикле for?

    Ответ: continue – оператор безусловного перехода к следующей итерации цикла for.

    Вывод:Создана модель миксера с двумя скоростями работы на основеплаты Arduino.

    Упражнение №10. Кнопочныйпереключатель

    Цель: программная реализация триггера с предотвращением эффекта«дребезга контактов» кнопки, подключенной к плате Arduino.



    Рисунок 10.1 – Схема электрическая принципиальная



    Рисунок 10.2 – Схема, собранная в программной среде SimulIDE

    1. Код изменён: светодиод переключается толькопосле отпускания кнопки.

    #defineBUTTON_PIN 3

    #defineLED_PIN 13

    boolean buttonWasUp = true;

    boolean ledEnabled = false;

    voidsetup()

    { pinMode(LED_PIN, OUTPUT);

    pinMode(BUTTON_PIN, INPUT_PULLUP);}

    voidloop()

    { boolean buttonIsUp = digitalRead(BUTTON_PIN);

    if(!buttonWasUp&& buttonIsUp) {delay(10);

    buttonIsUp = digitalRead(BUTTON_PIN);

    if (buttonIsUp)

    {ledEnabled = !ledEnabled;

    digitalWrite(LED_PIN, ledEnabled);}}

    buttonWasUp = buttonIsUp;}

    Листинг 10.2 – Листинг программы

    2. В схему добавлена еще одна кнопка, чтобы светодиод зажигается только при нажатии обеих кнопок.



    Рисунок 10.3 – Схема, собранная в программной среде SimulIDE

    #define BUTTON_PIN3

    #define BUTTON_PIN25

    #define LED_PIN13

    boolean buttonWasUp = true; boolean button2WasUp = true;

    boolean ledEnabled = false; boolean button1 = false; boolean button2 = false;

    void setup() { pinMode(LED_PIN, OUTPUT);

    pinMode(BUTTON_PIN, INPUT_PULLUP);

    pinMode(BUTTON_PIN2, INPUT_PULLUP); }

    void loop() { boolean buttonIsUp = digitalRead(BUTTON_PIN);

    boolean button2IsUp = digitalRead(BUTTON_PIN2);

    if (buttonWasUp && !buttonIsUp) { delay(10);

    buttonIsUp = digitalRead(BUTTON_PIN);

    if (!buttonIsUp) button1 = !button1; }

    if (button2WasUp && !button2IsUp) { delay(10);

    button2IsUp = digitalRead(BUTTON_PIN2);

    if (!button2IsUp) button2 = !button2; }

    if ((button1 * button2) ==1) {

    ledEnabled = true;

    digitalWrite(LED_PIN, ledEnabled);

    }

    else ledEnabled = false;

    digitalWrite(LED_PIN, ledEnabled);

    buttonWasUp = buttonIsUp;

    button2WasUp = button2IsUp;

    }

    Листинг 10.3 – Листингпрограммы

    Ответы на вопросы:

    1   2   3   4


    написать администратору сайта