Projeto 15 – Dado Eletrônico

Vamos construir um dado que rola ao sentir movimento. Para este  projeto iremos juntar dois componentes que já vimos anteriormente, um display de 7 segmentos e um sensor de vibração tilt.

 

Ao agitar o sensor de vibração tilt, o display deverá mostrar números aleatórios até parar, simulando o funcionamento de um dado de 10 lados.

Material necessário

1x  Display 7 segmentos
1x Resistor 220 ohm
1x Sensor tilt
13x Jumper Macho-macho
1x Cabo USB
1x Placa Uno

Montagem do projeto

Para que o projeto funcione adequadamente é necessário ajustar o sensor de vibração tilt através do pequeno potenciômetro azul, girando-o totalmente para direita como indicado pela seta vermelha. Se precisar, use a chave que veio junto do kit.

Montagem sensor de vibração com Arduino

Programa Projeto 15 – Dado eletrônico

Este programa é diferente do projeto que utiliza o Buzzer porque dessa vez, em vez de tocar um Buzzer ao se movimentar, gera um número aleatório. O funcionamento e a programação do display de 7 segmentos são os mesmos vistos no Projeto 14.

// Projeto 15 - Dado eletrônico

int segE = 7;
int segD = 8;
int segC = 9;
int segB = 13;
int segA = 12;
int segF = 11;
int segG = 10;

int pinoTilt = 5;

void setup()
{
  pinMode(segE, OUTPUT);
  pinMode(segD, OUTPUT);
  pinMode(segC, OUTPUT);
  pinMode(segB, OUTPUT);
  pinMode(segA, OUTPUT);
  pinMode(segF, OUTPUT);
  pinMode(segG, OUTPUT);

  pinMode(pinoTilt, INPUT);
}

void loop()
{
  
  if(digitalRead(pinoTilt) == HIGH)
  {
    jogaDado();
  }
}

void jogaDado()
{
  for(int i=0; i<25; i++) // Mostra 24 numeros
  {
    switch(random(0, 9)) // Escolhe um numero aleatorio entre 0 e 9
    {
      case 0 :
        acende0();
        break;
      case 1 :
        acende1();
        break;
      case 2 :
        acende2();
        break;
      case 3 :
        acende3();
        break;
      case 4 :
        acende4();
        break;
      case 5 :
        acende5();
        break;
      case 6 :
        acende6();
        break;
      case 7 :
        acende7();
        break;
      case 8 :
        acende8();
        break;
      case 9 :
        acende9();
        break;
    } 
    delay(4*i);     // O delay aumenta conforme passam mais numeros
  }
}

void acende0()
{
  digitalWrite(segE, LOW);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);  
}
void acende1()
{
  digitalWrite(segE, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);  
}
void acende2()
{
  digitalWrite(segE, LOW);
  digitalWrite(segD, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segA, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, LOW);  
}
void acende3()
{
  digitalWrite(segE, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, LOW);
}
void acende4()
{
  digitalWrite(segE, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, HIGH);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
}
void acende5()
{
  digitalWrite(segE, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
}
void acende6()
{
  digitalWrite(segE, LOW);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
}
void acende7()
{
  digitalWrite(segE, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
}
void acende8()
{
  digitalWrite(segE, LOW);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
}
void acende9()
{
  digitalWrite(segE, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
}

Possíveis erros

Caso o projeto não funcione verifique alguns dos possíveis erros:

  • Verifique se os jumpers estão na mesma coluna dos terminais dos componentes, fazendo assim a conexão;
  • Verifique se os jumpers estão ligados nos pinos corretos no Arduino;
  • Certifique-se de ter girado o potenciômetro do sensor todo para direita como indicado na montagem;
  • Verifique se o código carregou na placa através da IDE Arduino.

Desafios

Veja abaixo alguns desafios que você pode tentar!

  • Tente fazer um dado eletrônico que exiba letras de A até F ao invés de números;
  • Altere a programação para que se comporte como um dado de 6 lados.

Alguma dúvida, comentário ou algo que queira acrescentar? Entre no tópico do nosso fórum!