dez 12, 2009
DanielAndrade

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. :P

Binary Clock II

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

leds1.png

binary-example.png

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…

imagem-binario.png

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:

button1.png

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

Binary Clock II

Binary Clock I

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&lt;800) {
     minute++;
     second=0;
     delay(250);
    }
 
    valh = analogRead(5);    // add one hour when pressed
     if(valh&lt;800) {
     hour++;
     second=0;
     delay(250);
    }


}

Binary Clock III

Espero que gostem, qualquer coisa só comentar abaixo ou enviar um email.

1 Comentário

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

Deixe um comentário

Vista Arduino



Comentarios



Amigos


Musa
TecendoBits
Arduino
Brasil Robotics
Arduino Tutorial
Arduino RS
Freeduino
Sala da Elétrica
Ricardo Dias
quer seu site aqui, entre em contato

Status

Posts: 39
Comments:146
Comments/Posts: 4


Sponsors