| Ваш IP: 3.239.7.207 | Online(28) - гости: 13, боты: 15 | Загрузка сервера: 3.56 ::::::::::::

4-х разрядный семисегментный дисплей на базе драйвера TM1637 (Arduino)

4-х разрядный семисегментный дисплей на базе драйвера TM1637 с десятичными точками в разрядах, очень прост в использовании, библиотека Arduino TM1637.zip позволяет выводить на дисплей цифры и десятичные точки, а так же ряд символов. Так же имеется возможность менять яркость свечения сегментов.

Подключение дисплея к плате Arduino очень простое:

  • VCC to Arduino 5v
  • GND to Arduino GND
  • CLK к произвольному цифровому контакту Arduino, описанному в скетче
  • DIO к произвольному цифровому выходу Arduino, описанному в скетче

Вывод чисел

#include <TM1637.h>
 TM1637 print(3,2); //CLK,DIO
 
float i1 = 0.123,i2 = -1.25;
 
void setup(){
  print.set(7);//0...7 - яркость
  print.init(D4056A);//D4056A is the type of the module
}
 
void loop(){
  print.display(i1);
  delay(2000);
  print.display(i2);
  delay(2000);
}

Вывод чисел и символов

В этом примере показан вывод символов (список доступных указаны в скетче под номерами) и символов с цифрами.

#include <TM1637.h>
 TM1637 print(3,2); //CLK,DIO
 
int8_t arr0[] = {5, 14, 17, 10};// SEGA
int8_t arr1[] = { 2, 3, 4}; // int 324
 
void setup(){
  print.set(5);//0...7 - яркость
}
 
void loop(){
  print.point(false);
  print.display(arr0);
  delay(2000);
 
/* A 0x77 = 10, b 0x7c = 11, C 0x39 = 12, d 0x5e = 13, E 0x79 = 14, F 0x71 = 15,"-" 0x40 = 16, G 0x3d = 17, H 0x76 = 18, h 0x74 = 19, 
   i 0x04 = 20, J 0x1e = 21 ,L 0x38 = 22, l 0x18 = 23, M 0x37 = 24, n 0x54 = 25, P 0x73 = 26, r 0x50 = 27, t 0x78 = 28,
   U 0x3e = 29, u 0x1c = 30, Y 0x6E = 31, o верхнее 0x5c = 32, o нижнее 0x63 = 33 */
 
  print.point(false);
  print.display(0, 16);// минус
 
  print.point(false);
  print.display(1, arr1[0]);
 
  print.point(true);
  print.display(2, arr1[1]);
 
  print.point(false);
  print.display(3, arr1[2]);
  delay(2000);
}

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

#include <iarduino_RTC.h>
#include <TM1637.h>
  iarduino_RTC time(RTC_DS1302, 6, 7, 8); // RST, CLK, DAT
  TM1637 print(3,2); //CLK,DIO
 
  unsigned long times;
 
void setup(){
  time.begin();
  print.set(5);//0...7 - яркость
   // time.settime(0,30,18,24,10,19,4); // Записываем время в модуль: сек, мин, час, дата, месяц, год (2019 = 19), день недели (пон = 1). 
}
 
void loop(){
  time.gettime();
 
  print.point(false);
  print.display(0,time.Hours / 10);
 
  if(millis()-times<500){print.point(true);}
  if(millis()-times>1000){times=millis();}
 
  print.display(1, time.Hours % 10);
 
  print.point(false);
  print.display(2, time.minutes / 10);
 
  print.point(false);
  print.display(3, time.minutes % 10);
 
}

В следующем примере на дисплей выводим показания цифрового датчика температуры DS18B20.

#include <OneWire.h>          
#include <DallasTemperature.h>
#include <TM1637.h>
 
  TM1637 print(3,2); //CLK,DIO
  OneWire oneWire(A0);// вход датчика 18b20
  DallasTemperature temp(&oneWire);
 
 float t1;
 
void setup(){
  print.init(D4056A);//D4056A is the type of the module
  temp.begin(); temp.setResolution(12);//12 бит  
  print.set(5);//0...7 - яркость
}
 
void loop(){
  temp.requestTemperatures();// опрос 18b20
  t1 = temp.getTempCByIndex(0); // снятие показаний 18b20
 
  print.display(t1);
}

В следующем примере скетча реализован терморегулятор на микросхеме MAX6675 (модуль), которая предназначена для работы с термопарами типа К(ХА) в диапазоне температур от 0 до 1000ºС, регулировка температуры осуществляется в этом же диапазоне, дополнительно добавлена возможность регулировки гистерезиса. Значения регулировки температуры и гистерезиса хранятся в энергонезависимой памяти.

Регулировка осуществляет при помощи энкодера, при нажатии на кнопку энкодера происходит переход к параметрам регулятора (регулировка температуры, гистерезис). К выходу D13 платы Arduino подключается модуль реле для управления нагревателем.

#include <max6675.h> // https://rcl-radio.ru/wp-content/uploads/2018/07/max6675.zip
#include <TM1637.h> // https://rcl-radio.ru/wp-content/uploads/2019/10/TM1637-1.zip
#include <Encoder.h> // https://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h>  
#include <MsTimer2.h> // https://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
 TM1637 print(7,6); //CLK,DIO
 MAX6675 thermocouple(4,3,2);// CLK, CS, SO
 Encoder myEnc(9, 8);// DT, CLK
 
int t,t_sum,i,t_iz,t_reg,menu,zn,w,x,gis; 
byte a[3];
unsigned long time,oldPosition  = -999,newPosition;    
 
void setup() {
  print.set(1);//0...7 - яркость
  pinMode(10,INPUT);// КНОПКА SW энкодера
  pinMode(13,OUTPUT);// выход для управления нагрузкой
  MsTimer2::set(3, to_Timer);MsTimer2::start(); 
  t_reg = EEPROM.read(0)*256+EEPROM.read(1);gis = EEPROM.read(2);
}
 
void loop() {
  ////////////// управлние //////////////////////////////////////////////////////////////
  if(digitalRead(10)==LOW){menu++;if(menu>0){delay(200);}time=millis();w=1;if(menu>2){menu=0;};}
  if (newPosition != oldPosition&&menu==1){oldPosition = newPosition;
     t_reg=t_reg+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(t_reg>999||t_reg<0){t_reg=0;}}
  if (newPosition != oldPosition&&menu==2){oldPosition = newPosition;
     gis=gis+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(gis>10||gis<0){gis=0;}}     
  ////////////// измерение /////////////////////////////////////////////////////////////
  if(menu==0){myEnc.write(0);t=thermocouple.readCelsius();delay(200);
  t_sum=t_sum+t;
  if(i==5){t_iz = t_sum/5;t_sum=0;i=0;}i++;
  }
  ////////////// вывод на дисплей //////////////////////////////////////////////////////
  switch(menu){
    case 0:zn = 28;x=t_iz;break;
    case 1:zn = 27;x=t_reg;break;
    case 2:zn = 17;x=gis;break;}
 
  a[0]=x/100%10;
  a[1]=x/10%10;
  a[2]=x%10%10;
 
  print.point(false);
  print.display(0, zn);
  print.display(1, a[0]);
  print.display(2, a[1]);
  print.display(3, a[2]);
 ///////////// память ///////////////////////////////////////////////////////////////////
if(millis()-time>10000 && w==1){
     EEPROM.update(0,highByte(t_reg));EEPROM.update(1,lowByte(t_reg));EEPROM.update(2,gis);
     menu=0;w=0;} 
 //////////// управление реле //////////////////////////////////////////////////////////
  if(t_reg >= t_iz + gis){digitalWrite(13,HIGH);}
  if(t_reg <= t_iz - gis){digitalWrite(13,LOW);}
 
}
 
void to_Timer(){newPosition = myEnc.read()/4;}

Комментарии

  • andrys:

    Подскажите, в скетче с температурой ошибка в компиляции: print.init(D4056A);//D4056A is the type of the module

    скетч с часами работает отлично, даже изменил на DS1307.

    И самый верхний пример не проходит компиляция.

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

Войти с помощью: 

Случайные статьи

  • Бестрансформаторный источник питания 12 В / 15 мА

    Бестрансформаторный источник питания 12 В / 15 мА

    Некоторые схемы которые имеют небольшой ток потребления, поэтому для их работы можно использовать простые бестрансформаторные источники питания. В подобных источниках питания целесообразно использовать диодный мост, для увеличения величины выходного тока и меньшей пульсации выходного напряжения, что позволяет использовать конденсаторный фильтр меньшей емкости. Поэтому в предложенной схеме VD3 VD4 используются как …Подробнее...
  • Секундомер на ATtiny2313 (Arduino IDE)

    Секундомер на ATtiny2313 (Arduino IDE)

    На базе ATtiny2313 можно собрать простой секундомер. Информация выводится на дисплей LCD1602. Для управления секундомером используются три кнопки — СТАРТ, СТОП, СБРОС. Минимальный шаг секундомера 0,1 секунда, максимальное время измерения 24 часа. Кнопки СТОП и СТАРТ работают через прерывания IN0 и INT1 (пример — https://rcl-radio.ru/?p=94273), время тактируется при помощи таймера …Подробнее...
  • Часы-будильник на PIC16F877A

    Часы-будильник на PIC16F877A

    На рисунке показана схема часов с будильником. Часы отображают часы, минуты и секунды, будильник только часы и минуты. Дополнительной опцией часов является термометр, датчик температуры LM35 подключен к выводу 9 (AN6) микроконтроллера. После подачи питания на микроконтроллер необходимо установить правильное время, сделать это можно при помощи кнопки «Установка времени», при …Подробнее...
  • Автоматическая регулировка усиления

    Автоматическая регулировка усиления

    Автоматическая регулировка усиления  (АРУ) регулирует выходной сигнал в определенных пределах, при разном уровне входного сигнала.В результате устраняются различия громкости, которые могут раздражать, при смене каналов радиоприемника, телевизора… Полевой транзистор VT1 используется как переменное сопротивление. Это значение может  от бесконечности до 150Ω, тем самым регулируя усиление ОУ на TL072.Подробнее...
  • Регулируемый блок питания с цифровым управлением

    Схема регулируемого блока питания м цифровым управлением состоит из регулятора положительного напряжен7ия на KM317, КПОМ декадного счетчика CD4017, таймера NE555 и регулятора отрицательного напряжения на LM7912. Напряжение сети понижается трансформатором до напряжения +/-12В при токе 1А во вторичной обмотке, далее оно выпрямляется. С1-С5 емкостной фильтр постоянного напряжения. Светодиод LED1 сигнализирует …Подробнее...