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

  • ЛАБОРАТОРНАЯ РАБОТА № 2 На тему: « АРДУИНО: Подключение 7-сегментногоиндикатора напрямую через I2C. Подключение ЖК дисплея»

  • Москва - 2022 Тема

  • Используемое оборудование

  • Схема подключения

  • Подключение в arduino ide

  • VSS и VDD

  • Вывод информации: Для работы дисплея используется встроенная с среду Arduino IDE библиотека LiquidCrystal.h Функционал библиотеки

  • Создание собственных символов

  • лабораторная ардуино. лабораторная работа 2. Ардуино Подключение 7сегментногоиндикатора напрямую через I2C. Подключение жк дисплея


    Скачать 1.71 Mb.
    НазваниеАрдуино Подключение 7сегментногоиндикатора напрямую через I2C. Подключение жк дисплея
    Анкорлабораторная ардуино
    Дата12.03.2023
    Размер1.71 Mb.
    Формат файлаdocx
    Имя файлалабораторная работа 2.docx
    ТипЛабораторная работа
    #981798

    МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

    РОССИЙСКОЙ ФЕДЕРАЦИИ

    ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

    ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

    ЛАБОРАТОРНАЯ РАБОТА № 2

    На тему: «АРДУИНО: Подключение 7-сегментногоиндикатора напрямую через I2C. Подключение ЖК дисплея»

    Дисциплина: (Специальность): «Электроника, электротехника, радиотехника»




    Студент

    _________________







    (подпись)

    (инициалы, фамилия)










    Научный руководитель,


    _________________







    (подпись)

    (инициалы, фамилия)

    Зав. Кафедрой

    _________________







    (подпись)

    (инициалы, фамилия)

    Москва - 2022

    Тема: Подключение 7-сегментногоиндикатора напрямую через I2C. Подключение ЖК дисплея

    Цель: Научиться подключать индикаторы разных типов и программировать вывод информации на дисплей индикатора.

    Задание

    1 Для каждого типа индикатора осуществить подключение к плате.

    2 Запрограммировать вывод информации на дисплей.

    3 Оформить отчет.

    3.1 Подключение семисегментного индикатора


    В этом эксперименте мы рассмотрим работу с семисегментным светодиодным индикатором, которая позволяет Arduino визуализировать цифры.



    Используемое оборудование:

    • контроллер Arduino UNO R3;
    • плата для прототипирования;
    • одноразрядный семисегментный индикатор;
    • резистор 510 Ом – 7 штук;
     • провода папа-папа.




    Светодиодный семисегментный индикатор представляет собой группу светодиодов, расположенных в определенном порядке и объединенных конструктивно. Светодиодные контакты промаркированы метками от a до g (и дополнительно dp – для отображения десятичной точки), и один общий вывод, который определяет тип подключения индикатора (схема с общим анодом ОА, или общим катодом ОК). Зажигая одновременно несколько светодиодов, можно формировать на индикаторе символы цифр. Схема одноразрядного семисегментного индикатора показана на рис. 6.1.




    Рис. 6.1. Схема одноразрядного семисегментного индикатора


    Для подключения одноразрядного светодиодного индикатора к Arduino будем задействовать 7 цифровых выводов, каждый из контактов a–g индикатора подключается к выводу Arduino через ограничительный резистор 470 Ом. В нашем эксперименте мы используем семисегментный индикатор с общим катодом ОК, общий провод подсоединяем к земле. На рис. 6.2 показана схема подключения одноразрядного семисегментного индикатора к плате Arduino.



    Рис. 6.2. Схема подключения семисегментного индикатора к Arduino


    Приступим к написанию скетча. Мы будем на семисегментный индикатор в цикле выводить цифры от 0 до 9 с паузой 1 секунда. Сформируем массив значений для цифр 0–9, где старший разряд байта соответствует метке сегмента a индикатора, а младший – сегменту g.



    byte numbers[10] = { B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11110110};

    Для преобразования значения цифры в данные для вывода значения на выводы Arduino будем использовать битовые операции языка Arduino:




    Листинг программного кода:
    #define F_CPU 1000000L

    #include

    #include

    int main(void)

    {

        DDRD = 0b11111111;

          

        while (1)

        {

             PORTD = 0b00111111; //0

             _delay_s(1);

             PORTD = 0b00000110; //1

             _delay_s(1);

             PORTD = 0b01011011; //2

             _delay_s(1);

             PORTD = 0b01001111; //3

             _delay_s(1);

             PORTD = 0b01100110; //4

             _delay_s(1);

             PORTD = 0b01101101; //5

             _delay_s(1);

             PORTD = 0b01111101; //6

             _delay_s(1);

             PORTD = 0b00000111; //7

             _delay_s(1);

             PORTD = 0b01111111; //8

             _delay_s(1);

             PORTD = 0b01101111; //9

             _delay_s(1);

                }

    }

    Порядок подключения:

    1. Подключаем семисегментный индикатор по схеме на рис. 6.2.
    2. Загружаем в плату Arduino скетч из листинга 6.1.
    3. Наблюдаем вывод цифр на экран семисегментного индикатора.

    Справочно: Двухзнаковый семисегментый индикатор


    3.2 Подключение LED индикатора с TM1637


    Часто проекты требуют от нас вывода данных с различных датчиков и устройств в монитор порта или же на дисплей, например, для вывода данных с датчика температуры. Многие из вас уже знакомы с бюджетным дисплеем LCD 1602, подключаемым с помощью i2c интерфейса.

    Но существуют также и LED дисплеи. С их помощью можно выводить те же данные, но в более удобном формате: за счет большего размера дисплея данные легче считывать, а еще с их помощью можно создать проект наподобие настоящих часов!

    В данном задании разберем устройство LED индикатора TM1637, научимся подключать его к Arduino и писать программный код для работы с ним!

    Для реализации проекта потребуются следующие компоненты:

    • Arduino Uno R3

    • Семисегментный индикатор TM1637

    • Макетная плата на 400 точек

    • Набор макетных проводов “папа-мама”


    ОБЗОР МОДУЛЯ



    Модуль представляет собой небольшую плату, на которой установлен LED 4-х разрядный семисегментный дисплей на основе одноименного i2c драйвера TM1637.

    Внешне конструкция довольно простая, и на этом останавливаться сильно не будем. Разве что, можно отметить, что продается модуль иногда и в качестве 8-разрядной версии, которая будет занимать больше выводов для подключения к Arduino.

    Также на некоторых дисплеях, например от RobotDyn, на дисплее имеется также и часовой разделитель в виде двоеточия. Именно поэтому очень широкое применение индикатор TM1637 нашел в DIY часах на Arduino.
    Схема подключения
    Благодаря наличию i2c интерфейса на борту, подключается модуль очень просто – с помощью четырех контактов. Два из них отвечают за питание и подключаются к выводам 5V и Gnd на панели Power нашего контроллера; два других, называются они CLK и DIO, подключатся к цифровым выводам, например 3 и 2, соответственно.

    Визуальная схема подключения, для вашего удобства, изображена на картинке справа:



    Подключение в arduino ide

    Перед тем, как начинать писать программный код, а затем уже и ломать голову над более сложными проектами, необходимо загрузить специализированную библиотеку для нашего дисплея – tm1637.h: СКАЧАТЬ

    Одновременно с загруженной библиотекой в папке «примеры» появятся три новых кода для ознакомления и проверки работоспособности. Познакомимся с одним из них.

    Приведенный ниже код выводит на дисплей любые 4 символа, которые мы пропишем перед компиляцией, а также включает и выключает часовой разделитель с задержкой в 1 секунду (1000 миллисекунд):
    Листинг программного кода:
    #include "TM1637.h"   // Подключаем библиотеку для работы с модулем

    int8_t DispMSG[] = {1, 2, 3, 4};   // Настройка символов для последующего вывода на дислей

    //Определяем пины для подключения к плате Arduino

    #define CLK 3

    #define DIO 2

    //Создаём объект класса TM1637, в качестве параметров

    //передаём номера пинов подключения

    TM1637 tm1637(CLK, DIO);

    void setup()

    {

      //Инициализация модуля

      tm1637.init();

      //Установка яркости горения сегментов

      /*

         BRIGHT_TYPICAL = 2 Средний

         BRIGHT_DARKEST = 0 Тёмный

         BRIGHTEST = 7      Яркий

      */

      tm1637.set(BRIGHT_TYPICAL);

    }

    void loop()

    {

      //Задание на включение разделителя

      tm1637.point(true);

      //Выводим массив на дисплей

      tm1637.display(DispMSG);

      //Задержка

      delay(1000);

      //Задание на выключение разделителя

      tm1637.point(false);

      //Выводим массив на дисплей

      tm1637.display(DispMSG);

      //Задержка

      delay(1000);

    }

    После загрузки и успешной компиляции данного кода, мы увидим цифры 1, 2, 3, 4 на LED экране.

    3.3 Подключение LCD 1602 (HD44780) к Arduino


    LCD дисплеи размерности 1602, на базе контроллера HD44780, являются одними из самых простых, доступных и востребованных дисплеев для разработки различных электронных устройств. Его можно встретить как и в устройствах собранных на коленке, так и в промышленных устройствах, таких, как например, автоматы для приготовления кофе. На базе данного дисплея собраны самые популярные модули и шилды в тематике Arduino такие как LCD I2C модуль и LCD Keypad Shield.

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



     

    Данные дисплеи имеют два исполнения: желтая подсветка с черными буквами либо, что встречается чаще, синюю подсветку с белыми буквами. 

    Размерность дисплеев на контроллере HD44780 может быть различной, управляться они будут одинаково. Самые распространенные размерности 16x02 (т.е. по 16 символов в двух строках) либо 20x04. Разрешение же самих символов - 5x8 точек.

    Большинство дисплеев не имеют поддержку кириллицы, имеют её лишь дисплеи с маркировкой CTK.

     Выводы дисплея:

    На дисплее имеется 16pin разъем для подключения. Выводы промаркированы на тыльной стороне платы.

    1 (VSS) - Питание контроллера (-)
    2 (VDD) - Питание контроллера (+)
    3 (VO) - Вывод управления контрастом
    4 (RS) - Выбор регистра 
    5 (R/W) - Чтение/запись ( режим записи при соединении с землей)
    6 (E) - Еnable (строб по спаду) 
    7-10 (DB0-DB3) - Младшие биты 8-битного интерфейса
    11-14 (DB4-DB7) - Старшие биты интерфейса
    15 (A) - Анод (+) питания подсветки
    16 (K) - Катод (-) питания подсветки



     Режим самотестирования:

    Перед попытками подключения и вывода информации, было бы неплохо узнать рабочий дисплей или нет. Для этого необходимо подать напряжение на сам контроллер (VSS и VDD), запитать подсветку (A и K), а также настроить контрастность.

    Для настройки контрастности следует использовать потенциометр на 10 кОм. Каким он будет по форме - не важно. На крайние ноги подается +5V и GND, центральная ножка соединяется с выводом VO

    После подачи питания на схему необходимо добиться правильного контраста, если он будет настроен неверно, то на экране ничего не будет отображаться. Для настройки контраста следует поиграться с потенциометром.

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

    Вывод информации:

    Для работы дисплея используется встроенная с среду Arduino IDE библиотека LiquidCrystal.h

     

     Функционал библиотеки

     

    Сам же дисплей может работать в двух режимах:

    • 8-битный режим - для этого используются и младшие и старшие биты (BB0- DB7)

    • 4-битный режим - для этого используются и только младшие биты (BB4- DB7)

     

    Использование 8-битного режима на данном дисплее не целесообразно. Для его работы требуется на 4 ноги больше, а выигрыша в скорости практически нет т.к. частота обновления данного дисплея упирается в предел < 10 раз в секунду.

    Для вывода текста необходимо подключить выводы RS, E, DB4, DB5, DB6, DB7 к выводам контроллера. Их можно подключать к любым пинам Arduino, главное в коде задать правильную последовательность.





    Листинг программного кода:
    /*Добавляем необходимые библиотеки*/

    #include

    /* Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строк */

    LiquidCrystal_I2C lcd(0x27, 16, 2);

    void setup()

    { /* Инициализируем ЖК-дисплей */

    lcd.init();

    /* Включаем подсветку дисплея */

    lcd.backlight();

    /* Устанавливаем курсор на первую строку и нулевой символ. */

    lcd.setCursor(0, 0);

    /* Выводим на экран строк */

    lcd.print(" micro-pi.ru ");

    }

    void loop()

    {

    /* Устанавливаем курсор на вторую строку и 3 символ. */

    lcd.setCursor(3, 1);

    /* Выводим на экран количество секунд с момента запуска ардуины */

    lcd.print(millis() / 1000);

    delay(1000);

    }

    Создание собственных символов

    С выводом текста разобрались, буквы английского алфавита зашиты в память контроллера внутри дисплея и с ними проблем нет. А вот что делать если нужного символа в памяти контроллера нет?

    Не беда, требуемый символ можно сделать вручную (всего до 7ми символов). Ячейка, в рассматриваемых нами дисплеях, имеет разрешение 5х8 точек. Все, к чему сводится задача создания символа, это написать битовую маску и расставить в ней единички в местах где должны гореть точки и нолики где нет. В ниже приведенном примере нарисуем смайлик.

     

    Листинг программного кода
    /*

    Добавляем необходимые библиотеки

    */

    #include
    extern uint8_t bell[8];

    extern uint8_t note[8];

    extern uint8_t clock[8];

    extern uint8_t heart[8];

    extern uint8_t duck[8];

    extern uint8_t check[8];

    extern uint8_t cross[8];

    extern uint8_t retarrow[8];
    /*

    Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строки

    */

    LiquidCrystal_I2C lcd(0x27, 16, 2);
    void setup()

    {

    /*

    Инициализируем ЖК-дисплей

    */

    lcd.init();
    /*

    Включаем подсветку дисплея

    */

    lcd.backlight();
    /*

    Добавляем символы

    */

    lcd.createChar(0, bell);

    lcd.createChar(1, note);

    lcd.createChar(2, clock);

    lcd.createChar(3, heart);

    lcd.createChar(4, duck);

    lcd.createChar(5, check);

    lcd.createChar(6, cross);

    lcd.createChar(7, retarrow);
    /*

    Устанавливаем курсор на первую строку и нулевой символ.

    */

    lcd.home();
    /*

    Выводим на экран строку

    */

    lcd.print("Hello world...");

    }
    void loop()

    {

    static char i = 0;
    /* Устанавливаем курсор на вторую строку и 'i' символ. */

    lcd.setCursor(i, 1);
    /* Выводим на экран символ с номером 'i' */

    lcd.print(i);
    /* Ждём секунду */

    delay(1000);
    if (i == 7)

    {

    /*

    Очищаем вторую строку после вывода всех символов

    */

    i = 0;

    lcd.setCursor(0, 1);

    for (char j = 0; j < 16; j++)

    {

    lcd.print(' ');

    } }

    else

    {

    i++;

    }

    }
    /*

    ..O..

    .OOO.

    .OOO.

    .OOO.

    OOOOO

    .....

    ..O..

    */

    uint8_t bell[8] = {

    0b00100,

    0b01110,

    0b01110,

    0b01110,

    0b11111,

    0b00000,

    0b00100

    };
    /*

    ...O.

    ...OO




    .

    .OO..

    .....

    */

    uint8_t note[8] = {

    0b00010,

    0b00011,

    0b00010,

    0b01110,

    0b11110,

    0b01100,

    0b000000000

    };
    /*

    .....

    .OOO.

    O.O.O

    O.OOO

    O...O

    .OOO.

    .....

    */

    uint8_t clock[8] = {

    0b00000,

    0b01110,

    0b10101,

    0b10111,

    0b10001,

    0b01110,

    0b00000

    };
    /*

    .....

    .O.O.

    OOOOO

    OOOOO

    .OOO.

    ..O..

    .....

    */

    uint8_t heart[8] = {

    0b00000,

    0b01010,

    0b11111,

    0b11111,

    0b01110,

    0b00100,

    0b00000

    };
    /*

    .....

    .OO..

    OOO.O

    .OOOO

    .OOOO

    ..OO.

    .....

    */

    uint8_t duck[8] = {

    0b00000,

    0b01100,

    0b11101,

    0b01111,

    0b01111,

    0b00110,

    0b00000

    };
    /*

    .....

    ....O

    ...OO

    O.OO.

    OOO..

    .O..O

    .....

    */

    uint8_t check[8] = {

    0b00000,

    0b00001,

    0b00011,

    0b10110,

    0b11100,

    0b01001,

    0b00000

    };
    /*

    .....

    OO.OO

    .OOO.

    ..O..

    .OOO.

    OO.OO

    .....

    */

    uint8_t cross[8] = {

    0b00000,

    0b11011,

    0b01110,

    0b00100,

    0b01110,

    0b11011,

    0b00000

    };
    /*

    ....O

    ....O

    ..O.O

    .O..O

    OOOOO

    .O..O

    ..O..

    */

    uint8_t retarrow[8] = {

    0b00001,

    0b00001,

    0b00101,

    0b01001,

    0b11111,

    0b01001,

    0b00100

    };

    3.4 Подключение LCD1602 по I2C к Ардуино


    К сожалению, стандартная схема подключения, рассмотренная в предыдущих заданиях, не всегда удобна, так как занимает как минимум 6 цифровых выходов на ардуине.



    В этом задании мы рассмотрим способ как это можно обойти и использовать только два аналоговых выхода.

    Нам понадобится дополнительный модуль 1602 LCD конвертор в IIC/I2C. Он припаивается к нашему дисплею как видно на фото ниже.


    И подключается к ардуине следующим образом


    Arduino Mega

    Arduino Uno

    LCD i2c

    Цвет проводов на фото

    GND

    GND

    GND

    Черный

    5V

    5V

    VCC

    Красный

    20 (SDA)

    A4

    SDA

    Коричневый

    21(SCL)

    A5

    SCL

    Белый
    Этот способ подключения работает только со специально библиотекой, скачать библиотеку можно по ссылке (LiquidCrystal_I2C1602V1 Библиотека). Установите данную библиотеку.

    Листинг программного кода:
    /*

    Добавляем необходимые библиотеки

    */

    #include
    /*

    Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строки

    */

    LiquidCrystal_I2C lcd(0x27, 16, 2);
    void setup()

    {

    /*

    Инициализируем ЖК-дисплей

    */

    lcd.init();

    /*

    Включаем подсветку дисплея

    */

    lcd.backlight();

    /*

    Устанавливаем курсор на первую строку и нулевой символ.

    */

    lcd.setCursor(0, 0);

    /*

    Выводим на экран строку

    */

    lcd.print(" micro-pi.ru ");

    }

    void loop()

    {

    /*

    Устанавливаем курсор на вторую строку и 3 символ.

    */

    lcd.setCursor(3, 1);

    /*

    Выводим на экран количество секунд с момента запуска ардуины

    */

    lcd.print(millis() / 1000);

    delay(1000);

    }

    Список литературы:

    1. К. Гленн Системное администрирование в школе, вузе, офисе. - М.: СОЛОН-ПРЕСС, 2021. - (Серия «Элективный курс. Профильное обучение»).

    2. Н. В. Максимов, И. И. Попов Компьютерные сети: учебное пособие для студентов учреждений среднего профессионального образования. - М.: Форум, 2019.

    3. В. Олифер, Н. Олифер Основы компьютерных сетей. - СПб.: ПИТЕР, 2019. - (Серия «Учебное пособие»).

    4. Введение в Телекоммуникационные технологии. / Под ред. В.И. Журавлева. - М., 2019. - 239 с.

    5. Пилиповский В.Я. Требования к личности техника в условиях высокотехнологического общества // Наука и техника. - 2021. - № 5. - С. 97-103.

    6. Петражицкий Л.И. Техника научного самообразования // Татьянин день. - 2017. - №3(23). - авг. - С. 8-10.

    7. Иванов Ф.Ф, Петров В.В., Сидоров Т.Т., Соловьева А.А. Электронный журнал "Исследовано в России", 3, 2017.

    8. Майоров В. Г., Гаврилов А. И. Практический курс программирования микропроцессорных систем // Машиностроение. 2019.

    9. Фрибель В., Ролоф Х., Шиллер Х. Программирование микропроцессоров // Энергоиздат. 2021.

    10. Егоров О. Д., Подураев Ю. В. Конструирование мехатронных модулей. -- М.: Издательство МГТУ «Станкин», 2004. - 368 с.

    11. Герман-Галкин С.Г. Matlab&Simulink. Проектирование мехатронных систем на ПК. - СПб.: КОРОНА-Век, 2008 - 368 с.

    12. Ким К.К., Системы электродвижения с использованием магнитного подвеса и сверхпроводимости: Монография. - М.: ГОУ «Учебно-методический центр по образованию на железнодорожном транспорте», 2007. - 360 с.

    13. Цыган А.Б., Цыган Б.Г., Мокроусов С.Д. Современное вагоностроение: Монография: в 4-х т. - Том I.:Железнодорожный подвижной состав. - Харьков: Корпорация «Техностандарт», 2008. - 432 с.

    14. Журавлев Ю.Н. Активные магнитные подшипники: Теория, расчет, применение. - СПб.: Политехника, 2019. - 206 с., ил.

    15. Вышков Ю. Д., Иванов В. И. Магнитные опоры в автоматике. - М.: Энергия, 2019. - 160 с., ил.

    16. Осокин Ю. А., Герди В. Н., Майков К. А., Станкевич Н. Н. Теория и применение электромагнитных подвесов. - М.: Машиностроение, 2019. - 284 с.

    17. Буль Б. К., Буль О. Б., Азанов В. А., Шоффа В. Н. Электромеханические аппараты автоматики: Учеб. для вузов по спец. «Электрич. аппараты». - М.: Высш. шк., 2021. - 303 с., ил.

    18. Пассивные магнитные подшипники (подвесы) на постоянных магнитах URL: (дата обращения: 13.02.2019).

    19. Мартыненко Ю. Г. О проблемах левитации тел в силовых полях 1996. (дата обращения: 13.02.2021).


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