Seta com Arduino UNO

Hoje vamos montar um circuito que simula a seta de um carro.

O código pode ser baixado no GitHub. Ao abrir, basta clicar no ícone para copiar (fica no canto superior direito do código).

Discutindo o código

Iniciamos o código com um comentário, no qual apresentamos como deve ser o circuito (conectando um LED na porta digital 2 e outro na digital 3; conectando os botões para acionar as setas nas portas digitais 4 e 5).

/* LED esquerdo -> digital 2
   LED direito -> digital 3
   botão led esquerdo -> 4
   botão led direito -> 5
*/

A seguir vemos as variáveis que correspondem às conexões elétricas.

int LEDesquerdo = 2, LEDdireito = 3, botaoEsquerdo = 4, botaoDireito = 5; 
int seta = 0; //se 1 liga a esquerda, se 2 liga a direita

Note que criamos uma variável chamada seta. Ela servirá para identificar qual das setas deve ser acionada.

No setup´ iniciamos a comunicação serial para verificarmos se os botões estão funcionando. Note que a entrada dos botões estão definidas como INPUT_PULLUP, que significa que a porta digital ficará em HIGH quando não pressionamos o botão e em LOW quando pressionamos. Isso implica que devemos conectar o GND aos botões.

void setup() {
  Serial.begin(9600);
  pinMode(LEDesquerdo, OUTPUT);
  pinMode(LEDdireito, OUTPUT);
  pinMode(botaoEsquerdo, INPUT_PULLUP);
  pinMode(botaoDireito, INPUT_PULLUP);
}

No loop iniciamos com um Serial.println para vemos se os botões estão funcionando. Para isso, abra o monitor serial para ver se está alternando entre 0 e 1 ao pressionar os botões. Se estiver sempre mostrando somente zero, você ligou incorretamente o fio GND no(os) botão(ões). Tente mudar isso para ver se resolve.

void loop() {
  Serial.println(digitalRead(botaoEsquerdo));
  Serial.println(digitalRead(botaoDireito));

Agora vamos usar a variável seta: se pressionarmos o botão esquerdo, a variável guarda o número 1 e se pressionarmos o botão da direita esta variável muda para 2.

Note que ao colocar if (!digitalRead(botaoEsquerdo)), o que está dentro do if será verdadeiro (True) (ou 1 ou ainda HIGH) quando pressionarmos o botão, uma vez que quando pressionamos o botaoEsquerdo terá valor 0 (falso ou False ou LOW) e o símbolo “!” nega isso (ou seja, se botaoEsquerdo for 0, o argumento do if será 1). Por outro lado, se não pressionamos, botaoEsquerdo valerá 1 (ou True ou LOW) e
!digitalRead(botaoEsquerdo) valerá 0 (ou False ou LOW).

Lembre-se que o que está abaixo do if (entre as chaves {}) só será executado se o argumento do if for True.

  if (!digitalRead(botaoEsquerdo)) {
    seta = 1;
  }
  if (!digitalRead(botaoDireito)) {
    seta = 2;
  }

O final do código começa com um delay de 300 milisegundos (ou 0,3 segundo) que servirá para manter o LED escolhido apagado por este tempo. Este delay foi colocado de forma estratégica para que o pressionar do botão seja reconhecido antes da espera (lembre-se que o código fica sendo executado em loop, ou seja, após executar todo o código, esta parte será executada novamente.

  delay(300);
  if (seta == 1) {
    digitalWrite(LEDesquerdo, HIGH);
    delay(400);
    digitalWrite(LEDesquerdo, LOW);
  }
  if (seta == 2) {
    digitalWrite(LEDdireito, HIGH);
    delay(400);
    digitalWrite(LEDdireito, LOW);
  }
}

Os ifs servem para ligar a seta correspondente, esperar por 400 milissegundos (0,4 segundo) e desligar a seta.

O circuito

Para montar o circuito, você deverá ligar um o GND no pino menor de cada LED usado, sendo possível usar quantos LEDs você quiser em cada uma das setas. Aqui, no entanto, é importante colocar um resistor, fornecido por seu professor, para não queimar o LED ou sobrecarregar o Arduino.

No botão, sugiro que faça uma conexão cruzada, como na figura a seguir. Assim você nunca vai errar no uso dos botões do tipo pushbutton.

Como conectar os fios no botão
Conecte os fios de forma cruzada no botão, assim você nunca vai erra a conexão deste tipo de botão

A perninha maior de cada LED deve ser conectada na porta digital correspondente.

Veja simulação a seguir:

Gostou deste novo formato de documento para as aulas? Temos algumas vantagens quanto à isso:

  • Menor quantidade de papel impresso usado;
  • Conteúdo mais responsivo: pode ver no notebook ou celular que a visualização fica amigável;
  • Maior interatividade, pois você pode postar uma dúvida abaixo que o professor irá te responder;
  • Mais fácil de encontrar este circuito no futuro, pois todas as nossas aulas estarão marcadas na categoria “Robótica” e, se for com Arduino, também terá a categoria “Arduino”.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *