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

  • 20 светодиодов

  • Робототехника. Робототехника 9. 10. 12. 2021 Робототехника 9 класс (2курс)


    Скачать 257.3 Kb.
    Название10. 12. 2021 Робототехника 9 класс (2курс)
    АнкорРобототехника
    Дата15.03.2022
    Размер257.3 Kb.
    Формат файлаdocx
    Имя файлаРобототехника 9.docx
    ТипУрок
    #397039

    10.12.2021

    Робототехника

    9 класс (2курс)

    Калиева А.Ж.

    Продолжаем уроки в которых мы используем Arduinoрезисторы и светодиоды. Мы уже делали Светофорполицейский стробоскопотправляли сигнал sos и пр.
    Сегодня мы будем делать бегущие огниБегущие огни уже были в другом блоке уроков на ArduinoУрок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни
    При подключении к сдвиговому регистру всего при подключении по 3 проводам мы можем управлять 8 светодиодами. Но вот чтобы подключить 10 светодиодов, нужно подключать 2 сдвиговых регистра и использовать всего 2 выхода из 8 доступных в регистре. Это не очень логично. Иногда бывает проще подключить к плате Arduino нужное количество светодиодов. Что я и планирую сделать. В примере будет 5 самых простых режимов бегущих огней на Arduino.

    Для урока нам понадобится:

    • Arduino UNO или Arduino Nano

    • Плата макетная беспаечная

    • Резисторы 220 ОМ

    • Соединительные провода папа-папа

    • Светодиоды 3 или 5 мм.



    Подключим наши 10 светодиоды вот по такой схеме.



    В живую будет выгладить так.



    Вы наверное скажите что схема не правильная и к пинам 0 и1 подключать не желательно. Вот именно не желательно, но можно если не использовать Serial port. А для облегчения кода нам будет очень удобно использовать данные пины. При загрузки кода в Ардуину светодиоды подключенные к 0 и 1 выходам будут мигать. Также при работе нашего скетча. Вместе с данными светодиодами на плате Arduino UNO буду включаться светодиода RX и TX. Но как я говорил в данном случаи ни чего старшного в этом нет.

    Описывать все режимы не буду. В видео немного поясняю. Немного корява и может не совсем понятно. Но я думаю по комментариям к коду можно разобраться.

    Первый пример бегущих огней на Arduino, последовательное включение одного светодиода с 1 по 10. По пинам на ардуино будет с 0 по 9. Это нужно учитывать при написании кода.

    int last_pin = 10; //Кол-во светодиодов

    //блок для инициализации входов-выходов и других исходных данных

    void setup() {

    for (int i = 0; i < last_pin; i++) // цикл

    pinMode(i, OUTPUT); // инициализируем пины как выходы

    }

    // Основной цикл

    void loop() {

    for (int j = 0; j < last_pin; j++) { //перебираем пины с 0 до last_pin

    digitalWrite(j, HIGH); //зажигание следующего светодиода

    delay(300); //задержка 300мсек

    digitalWrite(j, LOW); //гасим все светодиоды

    }

    }

    Copy

    Немного изменим данный пример и сделаем 2 цикла. Получим включение всех светодиодов и выключение в обратном направлении.

    int last_pin = 10; //Кол-во светодиодов

    //блок для инициализации входов-выходов и других исходных данных

    void setup() {

    for (int i = 0; i < last_pin; i++) // цикл

    pinMode(i, OUTPUT); // инициализируем пины как выходы

    }

    // Основной цикл

    void loop() {

    for (int j = 0; j < last_pin; j++) { //перебираем пины с 0 до last_pin

    digitalWrite(j, HIGH); //зажигание следующего светодиода

    delay(300); //задержка 300мсек

    }

    for (int j = last_pin-1; j >= 0; j--) { //перебираем пины с 0 до last_pin

    digitalWrite(j, LOW); //гасим все светодиоды

    delay(300); //задержка 300мсек

    }

    }

    Copy

    Объединив код первого и второго примера получим включение одного светодиода в прямом и обратном направлении. Во втором цикли ставим j-2, потому что у нас пины начинаются с 0, а число светодиодов с 1 до 10. Также чтобы 10 светодиод не включался 2 раза вычитаем еще 1.

    int last_pin = 10; //Кол-во светодиодов

    //блок для инициализации входов-выходов и других исходных данных

    void setup() {

    for (int i = 0; i < last_pin; i++) // цикл

    pinMode(i, OUTPUT); // инициализируем пины как выходы

    }

    // Основной цикл

    void loop() {

    for (int j = 0; j < last_pin; j++) { //перебираем пины с 0 до last_pin

    digitalWrite(j, HIGH); //зажигание следующего светодиода

    delay(300); //задержка 300мсек

    digitalWrite(j, LOW); //гасим все светодиоды

    }

    for (int j = last_pin-2; j > 0; j--) { //перебираем пины с 0 до last_pin

    digitalWrite(j, HIGH); //зажигание следующего светодиода

    delay(300); //задержка 300мсек

    digitalWrite(j, LOW); //гасим все светодиоды

    }

    }

    Copy

    Сходящиеся огни. Тут все по аналогии. Добавим переменную в которой будим рассчитывать половину светодиодов. Поэтому количество светодиодов должно быть четным. Либо что-то делать с центральным светодиодом. Можно оставить его постоянно включенным или наоборот всегда включенным.

    int last_pin = 10; //Кол-во светодиодов

    //блок для инициализации входов-выходов и других исходных данных

    void setup() {

    for (int i = 0; i < last_pin; i++) // цикл

    pinMode(i, OUTPUT); // инициализируем пины как выходы

    }

    // Основной цикл

    void loop() {

    int half = last_pin/2; //last_pin должгно быть четным числом

    for (int j = 0; j < half; j++) { //перебираем пины с 0 до last_pin

    int k = last_pin-j-1;

    digitalWrite(j, HIGH); //зажигание следующего светодиода

    digitalWrite(k, HIGH); //зажигание следующего светодиода

    delay(300); //задержка 300мсек

    digitalWrite(k, LOW); //гасим все светодиоды

    digitalWrite(j, LOW); //гасим все светодиоды

    }

    }

    Copy

    И по аналогии делаем расходящиеся огни.

    int last_pin = 10; //Кол-во светодиодов

    //блок для инициализации входов-выходов и других исходных данных

    void setup() {

    for (int i = 0; i < last_pin; i++) // цикл

    pinMode(i, OUTPUT); // инициализируем пины как выходы

    }

    // Основной цикл

    void loop() {

    int half = last_pin/2; //last_pin должгно быть четным числом

    for (int j = half; j > 0; j--) { //перебираем пины с 0 до last_pin

    int k = last_pin-j;

    digitalWrite(j-1, HIGH); //зажигание следующего светодиода

    digitalWrite(k, HIGH); //зажигание следующего светодиода

    delay(500); //задержка 300мсек

    digitalWrite(k, LOW); //гасим все светодиоды

    digitalWrite(j-1, LOW); //гасим все светодиоды

    }

    }

    Copy

    Как видно без использования сдвигового регистра код получается намного проще и меньше строчек. Один минус количество ограничено. Максимум 20 светодиодов можно подключить к Arduino Uno и 22 к Arduino NANO. Думаете что я ошибся с цифрами. Подписывайтесь на канал. И в следующем уроке в данном блоке уроков я покажу как можно это реализовать.


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