DIY: Relógio Binário com Arduino
Hoje irei explicar como montar um relógio binários utilizando apenas LEDs, Resistores e um Arduino. Este projeto foi feito durante uma noite, onde eu e um grande amigo pedro desistimos de assistir um filme e decidimos montar algo legal com leds e arduino. Passamos a noite inteira montando/programando/melhorando o circuitos e o resultado final foi muito bom, então resolvi explicar como você pode montar um na sua casa. Espero que goste.
Partes:
- Arduino
- 13x Leds
- 13x Resistores de 220 Ω
- 3x Resistores de 2.2 KΩ
- 2x Push-Buttons
- 1x Botão normal
- Protoboard
- Cabos
Este projeto é bem simples, porém pode ser complicado para pessoas com pouca experiência com eletrônica, então vou tentar explicar detalhadamente como montar.
Como funciona


Acredito que imagens valem mais do que mil palavras. Para saber a hora, você deve somar o valor de cada LED que esteja ligado em cada coluna, isso resultará na hora atual.
Montando
Para montar o circuito, você deve primeiro conectar os leds e resistores nos pinos de saída do arduino do 1 ao 13. Lembre-se que a pena maior do LED é sempre o positivo, e a outra perna do LED é o terra, e deve ser conectado ao terra do arduino.
Para que o circuito funcione, você deve conectar o LED 1 no PINO 1, LED 2 no PINO 2…

Para conectar os botões, utilizei uma entrada digital e duas analógicas. Para alterar as horas/minutos, você terá que usar dois botões do estilo push-buttons. E eles serão ligados às entradas analógicas 0 e 5. E para LIGAS/DESLIGAR os LEDs usei um botão normal conectado na entrada digital 0. Para montar o botão, você deve conectar uma perna do mesmo a um resistor de 2.2 KΩ e conectá-lo a saída de 5 Volts junto com a entrada digital/analógica. E a outra pena do botão vai para o terra. Algo como a imagem abaixo:

Se você não conseguiu entender minha explicação, tem informações mais detalhadas (em inglês) no site oficial do arduino.AQUI.
Imagens + Video
Código
O código do relógio é baseado no open-source-arduino-clock feito pelo Rob Faludi. Fiz algumas alterações, mas o função do relógio é basicamente o mesmo. Se o código abaixo não estiver funcionando, você pode baixá-lo em .txt AQUI.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | /* An open-source binary clock for Arduino. Based on the code from by Rob Faludi (http://www.faludi.com) Code under (cc) by Daniel Spillere Andrade, www.danielandrade.net http://creativecommons.org/license/cc-gpl */ int second=0, minute=0, hour=0; //start the time on 00:00:00 int munit,hunit,valm=0,valh=0,ledstats,i; void setup() { //set outputs and inputs pinMode(1, OUTPUT);pinMode(2, OUTPUT);pinMode(3, OUTPUT);pinMode(4, OUTPUT);pinMode(5, OUTPUT); pinMode(6, OUTPUT);pinMode(7, OUTPUT);pinMode(8, OUTPUT);pinMode(9, OUTPUT);pinMode(10, OUTPUT); pinMode(11, OUTPUT);pinMode(12, OUTPUT);pinMode(13, OUTPUT); pinMode(0, INPUT); } void loop() { static unsigned long lastTick = 0; // set up a local variable to hold the last time we moved forward one second // (static variables are initialized once and keep their values between function calls) // move forward one second every 1000 milliseconds if (millis() - lastTick >= 1000) { lastTick = millis(); second++; } // move forward one minute every 60 seconds if (second >= 60) { minute++; second = 0; // reset seconds to zero } // move forward one hour every 60 minutes if (minute >=60) { hour++; minute = 0; // reset minutes to zero } if (hour >=24) { hour=0; minute = 0; // reset minutes to zero } munit = minute%10; //sets the variable munit and hunit for the unit digits hunit = hour%10; ledstats = digitalRead(0); // read input value, for setting leds off, but keeping count if (ledstats == LOW) { for(i=1;i< =13;i++){ digitalWrite(i, LOW);} } else { //minutes units if(munit == 1 || munit == 3 || munit == 5 || munit == 7 || munit == 9) { digitalWrite(1, HIGH);} else { digitalWrite(1,LOW);} if(munit == 2 || munit == 3 || munit == 6 || munit == 7) {digitalWrite(2, HIGH);} else {digitalWrite(2,LOW);} if(munit == 4 || munit == 5 || munit == 6 || munit == 7) {digitalWrite(3, HIGH);} else {digitalWrite(3,LOW);} if(munit == 8 || munit == 9) {digitalWrite(4, HIGH);} else {digitalWrite(4,LOW);} //minutes if((minute >= 10 && minute < 20) || (minute >= 30 && minute < 40) || (minute >= 50 && minute < 60)) {digitalWrite(5, HIGH);} else {digitalWrite(5,LOW);} if(minute >= 20 && minute < 40) {digitalWrite(6, HIGH);} else {digitalWrite(6,LOW);} if(minute >= 40 && minute < 60) {digitalWrite(7, HIGH);} else {digitalWrite(7,LOW);} //hour units if(hunit == 1 || hunit == 3 || hunit == 5 || hunit == 7 || hunit == 9) {digitalWrite(8, HIGH);} else {digitalWrite(8,LOW);} if(hunit == 2 || hunit == 3 || hunit == 6 || hunit == 7) {digitalWrite(9, HIGH);} else {digitalWrite(9,LOW);} if(hunit == 4 || hunit == 5 || hunit == 6 || hunit == 7) {digitalWrite(10, HIGH);} else {digitalWrite(10,LOW);} if(hunit == 8 || hunit == 9) {digitalWrite(11, HIGH);} else {digitalWrite(11,LOW);} //hour if(hour >= 10 && hour < 20) {digitalWrite(12, HIGH);} else {digitalWrite(12,LOW);} if(hour >= 20 && hour < 24) {digitalWrite(13, HIGH);} else {digitalWrite(13,LOW);} } valm = analogRead(0); // add one minute when pressed if(valm<800) { minute++; second=0; delay(250); } valh = analogRead(5); // add one hour when pressed if(valh<800) { hour++; second=0; delay(250); } } |
Espero que gostem, qualquer coisa só comentar abaixo ou enviar um email.
1 Comentário
Deixe um comentário
Vista Arduino
Comentarios
- (DanielAndrade): Olá, o WD reproduz muito bem a
- (gogeta): Daniel! Esse projeto ficou óti
- (Dhuankles): como eu ligo um sensor normal
- (Raquel): gostei, mas acho q esse relógi
- (Ricardo Henriques): Acabo de descobrir o teu sítio
- (Felipe Tabata): Muito bom... comprei um gabine
- (jose augusto mendes vieira): gostei muito do projeto daria
- (ademirjunior): tenho uma duvida pretendo faz
- (Aracantus): Gostaria se possível mostrar c
- (DanielAndrade): Você pode colocar quantos LEDs
Amigos
TecendoBits
Arduino
Brasil Robotics
Arduino Tutorial
Arduino RS
Freeduino
Sala da Elétrica
Ricardo Dias
quer seu site aqui, entre em contato
Status
Posts: 39Comments:146
Comments/Posts: 4







gostei, mas acho q esse relógio não seria prático.
Mas a intenção do projeto eh boa parabéns!