Многофункциональный модуль для Arduino

Платформа Arduino прекрасна своими модулями расширения (shields). Их множество, на все случаи жизни. Большая часть модулей имеет некоторую специализацию, будь то модуль драйверов двигателей, модуль дисплея 1602 или модуль для работы с сетью Ethernet. Но есть такие, которые можно назвать многофункциональными. Именно о таком модуле и пойдет речь в этой статье.

На универсальном модуле расширения есть:

  • четырёхразрядный семисегментный индикатор, плюс два сдвиговых регистра: для коммутации разрядов и сегментов;
  • четыре светодиода;
  • зуммер;
  • потенциометр многооборотный:
  • три кнопки, плюс кнопка сброса;
  • разъёмы для подключения датчиков LM35, DS18B20 и инфракрасного приёмника;
  • разъём APC220 для подключения одноимённого радиомодуля, либо модулей bluetooth со стандартным набором контактов.
  • прочие GPIO.

Характеристики

  • напряжение питания: 5 В;
  • размеры: 69 x 53,5 мм;

Приобрести данный модули и саму плату Arduino можно у в нашем интернет-магазине:

В корзину
В корзину

Подключение

Принципиальная схема платы

Таблица контактов Arduino, к которым подключены элементы модуля.

Arduino
Семисегментный индикаторLatch 4, Clock 7, Data 8
СветодиодыD10, D11, D12, D13
ЗуммерD3
ПотенциометрA0
КнопкиA1, A2, A3
Разъём датчиков LM35, DS18B20A4
Разъём инфракрасного приёмникаD2
Разъём APC220GND, +5V, D0(RX), D1(TX)
Прочие разъёмыD5, D6, D9, A5

Также необходимо отдельно отметить две перемычки на плате:

  • J1 — подключает подтяжку к питанию через резистор 10 кОм;
  • J2 — подключает подтяжку кнопок к питанию через резистор 10 кОм.

Программа

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

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

#define LATCH_DIO 4 // линия синхронизации данных, защелка (LCHCLK)
#define CLK_DIO 7 // линия тактирования (SFTCLK)
#define DATA_DIO 8 // линия передачи данных (SDI)

byte counter = 0;

// коды цифр от 0 до 9
const byte seg_digits[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90};
// коды разрядов
const byte seg_num[] = {0xF1,0xF2,0xF4,0xF8};

// таймер
unsigned long counter_next;
unsigned int counter_to = 200;

void setup (){
    // настройка контактов индикатора
    pinMode(LATCH_DIO, OUTPUT);
    pinMode(CLK_DIO, OUTPUT);
    pinMode(DATA_DIO, OUTPUT);
}
 
void loop(){
    unsigned long tm = millis();
    if( counter_next < tm ){
        counter_next = tm + counter_to;
        counter++;
    }

    // вывод числа на индикатор поразрядно
    writeNumber(0 , 0); // первый разряд (индекс 0)
    writeNumber(1 , (counter/100) % 10); // второй разряд
    writeNumber(2 , (counter/10) % 10); // третий разряд
    writeNumber(3 , counter % 10); // четвёртый разряд
}
 
// вывод цифры в заданный разряд
void writeNumber(byte seg, byte val){
    digitalWrite(LATCH_DIO,LOW);
    shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, seg_digits[val]);
    shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, seg_num[seg] );
    digitalWrite(LATCH_DIO, HIGH);
}


Изменено:

Добавить комментарий

Ваш адрес email не будет опубликован.