O projeto ScoreBoard (Painel de Pontuação) surgiu da necessidade de controlar o tempo durante as peladas de futebol com a turma da universidade.
Juntamente com o professor André Milhomem, iniciamos então o projeto de construir um scoreboard que pudesse marcar o tempo e os gols, uma vez que as partidas das peladas são disputadas na modalidade 10m ou 2 gols.
A placa foi desenhada utilizando o PCB Design, software livre rodando sob o Linux Ubuntu.
![]() |
| Layout utilizando PCB Layout |
Após o desenho utilizou-se o processo manual para transferência do Layout impresso para a Placa de fenolite. Foi adquirido o kit de confecção de PCI SUEKIT CK-10, adquirido no Soldafria. que vem com furador e cortador de placa, percloreto de ferro para corrosão, placa de fenolite, Caneta e vasilhame.
O processo de confeccionar, colocar componentes e soldar é bem demorado, uma vez que são muitos LED's.
![]() |
| Construção da placa com Display de leds difusos |
Utilizou-se também um expansor (SHIFT) de porta 74HC595 para cada display. No total, foram utilizados 8 SHIFT's.
![]() |
| Placa em construção |
A imagem abaixo simboliza o modo como foram ligados os SHIFT's, o desenho não está bom por causa da pressa, mas eles são ligados em série.
![]() |
| Ligação do Arduino com os SHIFT 74HC595 |
Utilizou-se uma caixa de
MDF por ser mais fácil e barato que o metal para fabricar. Trata-se de
uma versão Beta e que tem muito a ser melhorado, principalmente no
aspecto físico. Também utilizou-se EVA e uma tampa de acrílico para
tentar melhorar o acabamento.
Os vídeos abaixo apresentam o Scoreboard em funcionamento.
a) Parte 1
b) Parte 2
Segue os códigos do Arduino para consulta. Não coloquei referência no código porque pesquisei em muitos lugares métodos que fossem simples, adaptando e alterando até chegar em algo compreensível. Disponibilizo abaixo, deste modo, contribuo com aqueles que também divulgaram e os quais pude utilizar para construí-lo.
Códigos do Arduino
a) TechScore.h
#include "WProgram.h" const int latchPin = 12; //Pin connected to ST_CP of 74HC595 const int clockPin = 10; //Pin connected to SH_CP of 74HC595 const int dataPin = 8; //Pin connected to DS of 74HC595 const int bt_l = 2; const int bt_r = 3; const int TIME_INTERVAL = 1000; const int FREQ = 1; const byte Display7SegmCathod[11] = { B10001000, //0 B10111110, //1 B10010001, //2 B10010100, //3 B10100110, //4 B11000100, //5 B11000000, //6 B10011110, //7 B10000000, //8 B10000110, //9 B11111111 // OFF ALL }; const byte Display7SegmCathod_R[11] = { B11000000, //0 B11110011, //1 B10100100, //2 B10100001, //3 B10010011, //4 B10001001, //5 B10001000, //6 B11100011, //7 B10000000, //8 B10000001, //9 B11111111 // OFF ALL }; const byte DisplayLed[10] = { B01111011, //0 B01100000, //1 B00110111, //2 B01110101, //3 B01101100, //4 B01011101, //5 B01011111, //6 B01110000, //7 B01111111, //8 B01111101 //9 }; const byte DisplayLed_R[10] = { B01111011, //0 B00001010, //1 B01011101, //2 B00011111, //3 B00101110, //4 B00110111, //5 B01110111, //6 B00011010, //7 B01111111, //8 B00111111 //9 };
b) TechScore.pde
#include "TechScore.h" int sec_a = 0; int sec_b = 0; int min_a = 0; int min_b = 0; int point_l1 = 10; int point_l2 = 10; int point_r1 = 10; int point_r2 = 10; int flag1 = 0; int flag2 = 0; int flag3 = 0; int flag4 = 0; unsigned long time = 0; unsigned long time2 = 0; unsigned long timeago = millis(); void setup() { //set pins to output because they are addressed in the main loop pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(bt_l,INPUT); pinMode(bt_r,INPUT); Serial.begin(9600); limpa(); } void loop() { time = millis(); if(time - timeago > TIME_INTERVAL){ bt_check(); timeago = time; sec_a++; if(sec_a > 9){ sec_b++; sec_a=0; } if(sec_b > 5){ min_a++; sec_b = 0; } if(min_a > 9){ min_b++; min_a = 0; } if(min_b > 9){ min_b = 0; } mostra(sec_a,sec_b,min_a,min_b,point_l1,point_l2,point_r1,point_r2); } } void bt_check(){ // buttons check if(digitalRead(bt_l) == LOW){ //flag to on led if(flag1 == 0) { point_l1 = 0; flag1 = 1; } point_l1++; if(point_l1 > 9){ //flag to on led if(flag2 == 0) { point_l2 = 0; flag2 = 1; } point_l1 = 0; point_l2++; if(point_l2 > 1){ point_l1 = 10; point_l2 = 10; flag1 = 0; flag2 = 0; } } } if(digitalRead(bt_r) == LOW){ //flag to on led if(flag3 == 0) { point_r1 = 0; flag3 = 1; } point_r1++; if(point_r1 > 9){ //flag to on led if(flag4 == 0) { point_r2 = 0; flag4 = 1; } point_r1 = 0; point_r2++; if(point_r2 > 1){ point_r1 = 10; point_r2 = 10; flag3 = 0; flag4 = 0; } } } } void mostra(int _seca, int _secb, int _mina, int _minb,int _btl1,int _btl2, int _btr1, int _btr2){ send(Display7SegmCathod_R[_btl1]); // first 7 display send(Display7SegmCathod_R[_btl2]); //second 7 display send(DisplayLed_R[_seca]); // first Led Display send(DisplayLed_R[_secb]); // secondf Led Display send(Display7SegmCathod[_btr2]); // first 7 display send(Display7SegmCathod[_btr1]); //second 7 display send(DisplayLed[_minb]); // first Led Display send(DisplayLed[_mina]); // secondf Led Display } void limpa(){ send(B11111111); // first 7 display send(B11111111); //second 7 display send(B00000000); // first Led Display send(B00000000); // secondf Led Display } void send(byte data){ //ground latchPin and hold low for as long as you are transmitting digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, data);//MSBFIRST LSBFIRST //return the latch pin high to signal chip that it no longer needs to listen for information digitalWrite(latchPin, HIGH); }




Nenhum comentário:
Postar um comentário