Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

DIY mais simples relógio IV9 Numitron com Arduino

Componentes e suprimentos

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ± 5ppm, I2C Real-Time Clock
× 1
TPIC6C595 shift register
× 4
Tubo IV9 Numitron
× 4
LED (genérico)
× 2
Capacitor 100 nF
× 4
1N4007 - Alta tensão, diodo nominal de alta corrente
× 2
Slide Switch
× 1
Resistor 1k ohm
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)
Arame de solda, sem chumbo

Aplicativos e serviços online

Arduino IDE

Sobre este projeto


Desta vez, vou mostrar a você como fazer um belo relógio de válvulas Numitron estilo Retro. Além da hora correta, o dispositivo exibe brevemente a data, o ano e a temperatura atual a cada 30 segundos.

Tive a ideia de fazer este relógio a partir da página do Github:https://github.com/theremotheman/simple_numitron_clock_with_4_shift_registers_and_rtc3231.

Primeiro fiz o projeto de acordo com as instruções do site e descobri que ele continha muitas falhas.

Aqui está a aparência do primeiro protótipo com 74HC595

Para 74HC595 IC A corrente máxima total de acordo com o datasheet é de 70 miliamperes, que neste caso é várias vezes excedido (cerca de 160 miliamperes para o dígito 8), de forma que depois de um tempo o IC superaquece e não funciona corretamente. Outra falha é que há muitos atrasos no loop de código, de modo que o tempo é lido apenas uma vez a cada 60 segundos. Na foto você pode ver o relógio acabado feito principalmente de acordo com as instruções da página acima. No começo, ele funciona normalmente, mas depois de um tempo, segmentos aleatórios são ativados e IC-s, numitrons ou o microcontrolador podem queimar facilmente. No primeiro caso, o problema foi resolvido usando TPIC6C595 IC em vez de 74HC595, que é fornecido para correntes maiores. Também deve ser tomado cuidado para que esses dois circuitos integrados não sejam compatíveis com os pinos.





-------------------------------------------------- --------------------------------

https://www.pcbgogo.com/promo/from_MirkoPavleskiMK

-------------------------------------------------- ---------------------------------

E o novo código foi criado usando millis () em vez da função delay (), então agora o relógio em tempo real é lido constantemente. Eu também adicionei um interruptor que muda a intensidade da luz dos numitrons e, portanto, a vida útil. Como você pode ver, o dispositivo é relativamente simples de construir e acho que essa é a maneira mais simples de fazer um relógio de tubo. Os Numitrons são baratos, fáceis de obter e não usam uma fonte de alimentação de alta tensão adicional.

Apenas alguns componentes são necessários para fazer este relógio:

- Quatro tubos Numitron IV9

- Quatro circuitos integrados TPIC6C595

- Microcontrolador Arduino

- Módulo de relógio em tempo real DS3231

- Dois LEDs por segundos

- Chave

- e quatro capacitores de desacoplamento

O módulo de tempo real também contém um termômetro, portanto, para uma visualização mais precisa da temperatura, ele fica localizado fora da caixa, protegido por uma malha. Primeiro, é desejável sincronizar o relógio em tempo real com o relógio do PC, e fazemos isso com a ajuda da biblioteca DS1307RTC. Em seguida, fazemos o upload do código e com isso o dispositivo está pronto. Resta modificar o código para que possamos acertar o tempo com a ajuda dos botões e será no próximo período como uma atualização do projeto.

Por fim, o relógio é montado em uma caixa adequada e é uma bela decoração em todas as vitrines.

Código

  • Código Arduino
Código Arduino C / C ++
 #include  // rtc com temperatura para ds3231RTC_DS3231 rtc; // definindo qual módulo rtc é usado # include  // wiring # include  // time lib # include  // time function # include  // rtc #include  #define led 7const int latchPin =13; // latchconst int clockPin =10; // clockconst int dataPin =11; // dataunsigned long previousMillis =0; // armazena a última vez Led blinkedlong interval =30000; // intervalo para piscar (milissegundos) unsigned long previousMillisDiode =0; // armazena a última vez Led blinkedlong intervalDiode =500; // intervalo no qual piscar (milissegundos) const int nums [12] ={// configuração da matriz de exibição - de acordo com a documentação:pino1 é comum, pino2 é ponto (não utilizado no esboço), o resto deve ser conectado aos registradores de deslocamento um por um 0b10111110, // 0 0b00000110, // 1 0b01111010, // 2 0b01101110, // 3 0b11000110, // 4 0b11101100, // 5 0b11111100, // 6 0b00001110, // 7 0b11111110, // 8 0b11101110, // 9 0b11001010, // st. 0b10111000 //celz.};int hour1; // hora primeiro numberint hour2; // hora, segundo, numberint minute1; // minutos primeiro numberint minute2; // minutos, segundo numberint day1; // dia primeiro numberint day2; // dia, segundo numberint month1; // mês primeiro numberint month2; // mês, segundo numberint year1; // primeiro número do ano - constante 2int ano2; // segundo número do ano - constante 0 (você quer viver tanto tempo para mudá-lo?) int ano3; // ano, terceiro númeroint year4; // ano quarto numberint hourDecimal; // análise decimal de hourint minuteDecimal; // análise decimal de minuteint dayDecimal; // análise decimal de dayint monthDecimal; // análise decimal de monthint year70; // ano após unix epochint temp1; // primeira temperatura numberint temp2; // segunda temperatura numberint tempDecimal; // análise decimal de temperatura (primeiros dois números) void setup () {pinMode (led, OUTPUT); pinMode (latchPin, OUTPUT); // define os pinos para saída para que você possa controlar o registro de deslocamento pinMode (clockPin, OUTPUT); // define os pinos para saída para que você possa controlar o registrador de deslocamento pinMode (dataPin, OUTPUT); // define os pinos para saída para que você possa controlar o registrador de deslocamento Serial.begin (9600); // inicializa o SPI:SPI.begin (); // leva o pino SS baixo para selecionar o chip:digitalWrite (clockPin, LOW); } void loop () {tmElements_t tm; // nomeação da biblioteca DS1307RTC RTC.read (tm); // ler rtc hora / data / ano minuteDecimal =tm.Minute / 10; // analisa a saída para ser legível (mais curta) dividindo por dez hourDecimal =tm.Hour / 10; // analisa a saída para ser legível (mais curta) dividindo por dez dayDecimal =tm.Day / 10; // analisa a saída para ser legível (mais curta) dividindo por dez monthDecimal =tm.Month / 10; // analisa a saída para ser legível (mais curta) dividindo por dez year70 =tm.Year - 30; // exibe o ano real subtraindo do unix epoch (1970) hour1 =hourDecimal; // tão simples quanto hour2 =tm.Hour - 10 * hourDecimal; // faz cálculos para exibir apenas o segundo número de dois dígitos string minute1 =minuteDecimal; // minuto2 simples =tm.Minute - 10 * minuteDecimal; // faz cálculos para exibir apenas o segundo número de dois dígitos string day1 =dayDecimal; // dia2 simples =dia.tm - 10 * dayDecimal; // faz cálculos para exibir apenas o segundo número da string de dois dígitos month1 =monthDecimal; // mês simples2 =tm.Mês - 10 * monthDecimal; // faz cálculos para exibir apenas o segundo número da string de dois dígitos ano1 =2; // número do primeiro ano, você realmente precisa mudar isso? você tem carros voadores e etc? ano2 =0; // número do segundo ano, se você precisar alterá-lo, deverá brincar com os netos em vez de year3 =year70 / 10; // analisa a saída para ser legível (mais curta) dividindo por dez year4 =year70 - 10 * year3; // faz cálculos para exibir apenas o segundo número da string de dois dígitos tempDecimal =rtc.getTemperature () / 10; // analisa a saída para ser legível (mais curta) dividindo por dez temp1 =tempDecimal; // temp2 simples =rtc.getTemperature () - 10 * tempDecimal; // faz cálculos para exibir apenas o segundo número da string de dois dígitos if (millis () - previousMillisDiode> =intervalDiode) {previousMillisDiode =millis (); digitalWrite (led,! digitalRead (led)); // altera o estado do led} if (millis () - previousMillis> =intervalo) {previousMillis =millis (); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); atraso (500); // numitron desligado por 0,5 seg para fazer o efeito de 'respiração' digitalWrite (clockPin, LOW); SPI.transfer (nums [mês2]); SPI.transfer (nums [mês1]); SPI.transfer (nums [dia2]); SPI.transfer (nums [dia1]); digitalWrite (clockPin, HIGH); atraso (1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); atraso (500); // numitron desligado por 0,5 seg para fazer o efeito de 'respiração' digitalWrite (clockPin, LOW); SPI.transfer (nums [ano4]); SPI.transfer (núms [ano3]); SPI.transfer (nums [ano2]); SPI.transfer (nums [ano1]); digitalWrite (clockPin, HIGH); atraso (1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); atraso (500); // numitron desligado por 0,5 seg para fazer o efeito de 'respiração' digitalWrite (clockPin, LOW); SPI.transfer (0b10111000); SPI.transfer (0b11001010); SPI.transfer (nums [temp2]); SPI.transfer (nums [temp1]); digitalWrite (clockPin, HIGH); atraso (1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); atraso (500); // numitron desativado por 0,5 seg para fazer o efeito de 'respiração'} else {digitalWrite (clockPin, LOW); SPI.transfer (nums [minuto2]); SPI.transfer (nums [minuto1]); SPI.transfer (nums [hora2]); SPI.transfer (nums [hora1]); digitalWrite (clockPin, HIGH); }} 

Esquemas


Processo de manufatura

  1. Jogo Arduino Gyroscope com MPU-6050
  2. Relógio Arduino com horas de oração islâmica
  3. Relógio mestre
  4. Arduino Temp. Monitor e relógio em tempo real com tela 3.2
  5. Voltímetro DIY com Arduino e um visor Nokia 5110
  6. MobBob:DIY Arduino Robot Controlado por Smartphone Android
  7. Roda de medição simples DIY com codificador rotativo
  8. IoT Gauge com Arduino, Yaler e IFTTT
  9. Relógio giratório Arduino de matriz de LED único
  10. Despertador simples com DS1302 RTC