Счетчики. Вариант 1 - Простейший счетчик на базе Arduino

01.06.2017 19:27

jazon



        Всем привет, в этой статье мы рассмотрим создание прототипа простейшего счетчика импульсов. Для создания прототипа нам потребуется следующее оборудование: 

Вот фото всего того что нам понадобится, плата Arduino Nano установлена на отладочный шилд I/O Wireless Shield for Nano:



Соединяем провода согласно нижеприведённой схеме:



Если вдруг у вас нет модулей кнопок, то можно решить эту задачу согласно следующей схеме:



Это тоже самое что и предыдущий чертеж, только модули кнопок здесь как бы разнесены на свои принципиальные схемы. 

        После того как все провода соединены, остаётся только загрузить скетч в контроллер, и испытать полученный прототип. Скетч выложен ниже, его можно просто скопировать в свой проект на Arduino IDE, но прежде всего, чтобы всё правильно откомпилировалось, нужно установить библиотеку для дисплеев на базе драйвера TM1637

Листинг скетча
#include "TM1637.h"

void DispUpdate(void);
boolean DebounceButton(int ScanPort, boolean last);

#define INC 2 //Пин подключения датчика готовой продукции  
#define RES 3 //Пин подключения кнопки сброса счетчика

#define CLK 4 //TM1637 CLK
#define DIO 5 //TM1637 DIO

int8_t CountDisp[] = {0x00,0x00,0x00,0x00};

static int Counter = 0; //Значение счетчика будет сохраняться здесь

bool INCCurr = false;
bool INCPrev = false;

/*
 * Создаем объект tm1637 класса TM1637
 * в качестве параметров передаём ему
 * номера пинов к которым подключен модуль
 * с дисплеем
 */
TM1637 tm1637(CLK, DIO);

void setup() 
{
  pinMode(INC, INPUT);  //Определяем пины подключения кнопки сброса 
  pinMode(RES, INPUT);  //и датчика готовой продукции как входные

  //Инициализация дисплея на базе драйвера TM1637
  tm1637.init();
  /*
   * Установка яркости свечения сегментов
   * возможные значения:  BRIGHT_TYPICAL либо 2
   *                      BRIGHT_DARKEST либо 0
   *                      BRIGHTEST      либо 7
   * Также можно вводить значения от 0 до 4
   * при вводе начения свыше 4 визуального различия   
   * в яркости свечения не наблюдается поэтому решено
   * остановиться на 3
   */
  tm1637.set(2);  
}

void loop()
{
  //Обнуление счетчика
  if(digitalRead(RES))
  {
    Counter = 0;
  }
  
  //Проверка кнопки инкремента - нажатие и обработка "Антидребезг"
  INCCurr = DebounceButton(INC, INCPrev);
  
  if(INCPrev == false && INCCurr == true)
  {
    if(Counter == 9999)
    {
      Counter = 0;
    }
    else
    {
      Counter ++;
    }
  }
  INCPrev = INCCurr;
  
  DispUpdate();
}

//Функция подавления дребезга контактов концевого датчика
boolean DebounceButton(int ScanPort, boolean last)
{
  boolean current = digitalRead(ScanPort);
  if(current != last)
  {
    delay(10);
    current = digitalRead(ScanPort); 
  }
  return current;
}

//Функция обновления дисплея
//Вывод значения счетчика на дисплей
void DispUpdate(void)
{
  int intValue = Counter;
  int divValue;
  
  for(int i = 3; i >= 0; i --)
  {
    divValue = intValue % 10;
    intValue = intValue / 10;
    
    CountDisp[i] = divValue;
  }
  tm1637.display(CountDisp);
}


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



но, при этом предварительно подтянув порт подключения датчика к земле. Из плат можно использовать любую доступную, будь то UNO, Mega, и даже такого малыша как Digispark ATTiny85. На этом в общем то и всё, в конце хотелось представить вам обзорное видео по статье:




Расскажи о нас

Сообщение

Если у Вас есть опыт в работе с Arduino и собственно есть время для творчества, мы приглашаем всех желающих стать авторами статей публикуемых на нашем портале. Это могут быть как уроки, так и рассказы о ваших экспериментах с Arduino. Описание различных датчиков и модулей. Советы и наставления начинающим. Пишите и размещайте свои статьи в соответсвующей ветке форума.