Опубликовано: 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. Описание различных датчиков и модулей. Советы и наставления начинающим. Пишите и размещайте свои статьи в соответсвующей ветке форума.