Платформа 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, DS18B20 | A4 |
Разъём инфракрасного приёмника | D2 |
Разъём APC220 | GND, +5V, D0(RX), D1(TX) |
Прочие разъёмы | D5, D6, D9, A5 |
Также необходимо отдельно отметить две перемычки на плате:
- J1 — подключает подтяжку к питанию через резистор 10 кОм;
- J2 — подключает подтяжку кнопок к питанию через резистор 10 кОм.
Программа
В действительности, модуль не несёт на себе каких-то специфичных устройств, так что для работы со всей имеющейся периферией подойдут программы из разных уроков:
- работа с аналоговым датчиком температуры LM35
- работа с цифровым датчиком температуры DS18B20
- про зуммер
- про потенциометр
- про кнопки
Пожалуй, полезным будет только пример программы для работы с сегментными индикатором.
#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);
}