Плата расширения с таймером реле 4 канала 5 В для Arduino Pro Mini

Код:00898
Артикул:SAPM4-5
В наличии:есть
1 420 руб
1
Плата расширения с таймером реле 4 канала 5 В для Arduino Pro Mini (IO22C04 pro mini delay relay)

Плата IO22C04 pro mini delay relay представляет собой шилд для Arduino Pro mini. По сути это четырехканальный реле шилд с дополнительной обвязкой и функциональностью. 
 
IO22C04 pro mini delay relay
 
По центру платы расположен слот для подключения плвты Arduino pro mini.  На плате также расположены:
  • четыре реле SRD-05VDC;
  • блок из четырех семисегментных индикаторов;
  • четыре кнопки;
  • четыре входа с опторазвязкой (низкий уровень триггера, NPN типа);
  • штекер для подключения стабилизированного питания +5В;
  • входы для питания 6-24В.

 
Надо понимать, что данная плата является шилдом и без контроллера Arduino pro mini и загруженного в него скетча работать не может.
Реле подключены к 4 выходам Arduino через микросхему ULN2003 – набор мощных составных ключей для применения в цепях индуктивных нагрузок. Блок семисегментных индикаторов управляется 3 выводами Arduino по протоколу SPI (2 микросхемы  74HC595 – расширитель выводов).
 Карта подключения
  Плата Контакты Arduino
Реле D1 10
D2 11
D3 12
D4 6
Кнопки на плате K1 2
K2 3
K3 4
K4 5
Input входы IN1 A1
IN2 A0
IN3 A3
IN4 A2
SPI latch 8
clock 9
data 7
 
 Варианты схем подключения
 

 

 

 
Пример скетча, где по нажатии внешней кнопки на определенное время включается соответствующее реле. Значение таймера для каждого реле (от 1 до 9999 сек ) устанавливается в скетче. Кнопками K1-K4 выбираем для какого таймера высвечиваются данные на индикаторах.
 
// подключение библиотеки таймера
#include
 
#define uchar unsigned char
#define uint  unsigned int
 
int display_dat;
int key_value;
 
const int led = 13;
 
// Пин подключения SPI latch
const int latch = 8;
// Пин подключения SPI o clock
const int clock = 9;
// Пин подключения SPI data
const int data = 7;
// Пины подключения кнопок K1-K4
const int K1 = 2;
const int K2 = 3;
const int K3 = 4;
const int K4 = 5;
// пины подключения внешних кнопок
const int INPUT1 = A1;
const int INPUT2 = A0;
const int INPUT3 = A3;
const int INPUT4 = A2;
// Пины подключения реле
const int j1 = 10;
const int j2 = 11;
const int j3 = 12;
const int j4 = 6;
// Значение таймера (1-9999 секунд) для каждого реле
int relay1_delay_time = 1;
int relay2_delay_time = 2;
int relay3_delay_time = 3;
int relay4_delay_time = 4;
 
int relay1_time_left;
int relay2_time_left;
int relay3_time_left;
int relay4_time_left;
 
int relay1_display;
int relay2_display;
int relay3_display;
int relay4_display;
 
 
// Значения data для символов
// Character :0,1,2,3,4,5,6,7,8,9,A, b, C, c, d, E, F, H, h, L, n, N, o, P, r, t, U, -,  ,
uchar  TUBE_SEG[] =
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa7,0xa1,
0x86,0x8e,0x89,0x8b,0xc7,0xab,0xc8,0xa3,0x8c,0xaf,0x87,0xc1,0xbf,0xff};
// Значения data выбора индикатора
uchar TUBE_NUM[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
 
uchar dat_buf[8];
 
uchar dat;
uchar com_num;
//***********************************************
// dat : данные для отображения на индикаторе
// com_num :  выбор индикатора
//***********************************************
void TubeDisplayOneBit()
{
  uchar tube_dat;
  uchar bit_num;
   tube_dat = TUBE_SEG[dat];
   bit_num = ~TUBE_NUM[com_num];
 
    // разрешить передачу данных в 74HC595
     digitalWrite(latch, LOW);
     // сначала выбор индикатора, потом data
     shiftOut(data, clock, MSBFIRST, bit_num);
     shiftOut(data, clock, MSBFIRST, tube_dat);  
     // защелкнуть данные в 74HC595
     digitalWrite(latch, HIGH);
}
 
uchar OneSecondCnt;
void TubeDisplay4Bit(void)
{
  if(com_num<3) com_num ++;
  else com_num=0;
  dat = dat_buf[com_num];
  // вывести данные в один индикатор
  TubeDisplayOneBit();
 
  OneSecondCnt--;
  if(OneSecondCnt==0)
  {
    OneSecondCnt = 200;
    // декремент показаний активных таймеров
    if(relay1_time_left>0)
        {relay1_time_left--; relay1_display = relay1_time_left;}
    else
        {digitalWrite(j1, LOW);relay1_display = relay1_delay_time;}
    if(relay2_time_left>0)
        {relay2_time_left--; relay2_display = relay2_time_left;}
    else
        {digitalWrite(j2, LOW);relay2_display = relay2_delay_time;}
    if(relay3_time_left>0)
        {relay3_time_left--; relay3_display = relay3_time_left;}
    else
        {digitalWrite(j3, LOW);relay3_display = relay3_delay_time;}
    if(relay4_time_left>0)
        {relay4_time_left--; relay4_display = relay4_time_left;}
     else
       {digitalWrite(j4, LOW);relay4_display = relay4_delay_time;}
  }
  // выбор показаний для вывода на индикаторы
  if(key_value==0)
      display_dat = relay1_display;
  else if(key_value==1)
      display_dat = relay2_display;
  else if(key_value==2)
      display_dat = relay3_display; 
  else 
      display_dat = relay4_display;
  // показания таймера поразрядно  
   dat_buf[0] = display_dat/1000;
   display_dat = display_dat%1000;
   dat_buf[1] = display_dat/100;
   display_dat = display_dat%100;
   dat_buf[2] = display_dat/10;
   dat_buf[3] = display_dat%10;
 
}
 
void setup() {
   // установка режимов для пинов
   pinMode(led, OUTPUT);
   // для SPI
   pinMode(latch, OUTPUT);
   pinMode(clock, OUTPUT);
   pinMode(data, OUTPUT);
   //  для кнопок K1-K4
   pinMode(K1, INPUT);
   pinMode(K2, INPUT);
   pinMode(K3, INPUT);
   pinMode(K4, INPUT);
   // для внешних кнопок
   pinMode(INPUT1, INPUT);
   pinMode(INPUT2, INPUT);
   pinMode(INPUT3, INPUT);
   pinMode(INPUT4, INPUT);
   // для реле
   pinMode(j1, OUTPUT);
   pinMode(j2, OUTPUT);
   pinMode(j3, OUTPUT);
   pinMode(j4, OUTPUT);
  // запуск таймера каждые 5 мс
  FlexiTimer2::set(5, 1.0/1000, TubeDisplay4Bit);
  FlexiTimer2::start();
  // начальные значения для пинов
  digitalWrite(j1, LOW);
  digitalWrite(j2, LOW);
  digitalWrite(j3, LOW);
  digitalWrite(j4, LOW);
 
  digitalWrite(INPUT1, HIGH);
  digitalWrite(INPUT2, HIGH);
  digitalWrite(INPUT3, HIGH);
  digitalWrite(INPUT4, HIGH);
 
 
  digitalWrite(K1, HIGH);
  digitalWrite(K2, HIGH);
  digitalWrite(K3, HIGH);
  digitalWrite(K4, HIGH);
 
  key_value = 0;
}
 
void loop() {
 
  while(1) {
    // определение нажатия внешних кнопок
    if(digitalRead(INPUT1)==LOW)
      {
       relay1_time_left = relay1_delay_time;
     digitalWrite(j1, HIGH);
      digitalWrite(led, HIGH);}
    else
      {digitalWrite(led, LOW);}
    if(digitalRead(INPUT2)==LOW)
      {
       relay2_time_left = relay2_delay_time;
       digitalWrite(j2, HIGH);
       digitalWrite(led, HIGH);
      }
    else
      { digitalWrite(led, LOW);}
    if(digitalRead(INPUT3)==LOW)
      {
       relay3_time_left = relay3_delay_time;
       digitalWrite(j3, HIGH);
       digitalWrite(led, HIGH);
       }
    else
      { digitalWrite(led, LOW);}
    if(digitalRead(INPUT4)==LOW)
      {
       relay4_time_left = relay4_delay_time;
       digitalWrite(j4, HIGH);
       digitalWrite(led, HIGH);
       }
    else
      { digitalWrite(led, LOW);}
    // определение нажатия кнопок K1-K4
    if     (digitalRead(K1)==LOW) {key_value = 0; }
    else if(digitalRead(K2)==LOW) {key_value = 1; }
    else if(digitalRead(K3)==LOW) {key_value = 2; }
    else if(digitalRead(K4)==LOW) {key_value = 3; }     
  }
}
 
Скачать описание PDF


 
 
 
 
Вверх