Meu primeiro programa no Arduino: 2 semáforos interligados num cruzamento

Simular um semáforo é bem simples, mas simular 2 semáforos interligados, fazendo com que um fique verde e depois amarelo enquanto o outro está vermelho e vice-versa, foi um exemplo inicial bem mais divertido!

Depois de algumas semanas me divertindo e aprendendo com circuitos discretos e sem grande variação de estado e controle, chegou o grande dia: após fazer funcionar um teste com um relé, me permiti tirar o Arduino Uno da caixinha, pela primeira vez.

A instalação do ambiente de desenvolvimento do Arduino no meu computador foi tão simples como sempre me disseram e, logo após fazer o teste com o exemplo básico “Blink” que acompanha o sistema (e que se limita a piscar, em intervalos de 1 segundo, o led da própria placa do Arduino), resolvi fazer meu próprio primeiro programa para o microcontrolador.

Um exemplo inicial um pouco mais divertido que os usuais

Ter dedicado 2 semanas a entender o básico da eletrônica (e ter formação como programador) me permitiu ir um pouco mais além do que os típicos programas inaugurais. Está certo que me limitei ao clássico conectar pinos do Arduino a leds em uma protoboard, mas eu optei por fazer isso com um detalhe a mais: simular o funcionamento de 2 semáforos de um cruzamento, de tal forma que, enquanto um estiver vermelho, o outro fica verde e, logo após, amarelo, e vice-versa.


Infelizmente os 2 leds vermelhos (os maiores) aparecem brancos nas fotos da minha câmera...

Eletronicamente, a descrição é a mesma dos exemplos mais simples com um led só: conecta um pino numerado do Arduino à perna mais comprida de cada led, conecta a perna mais curta do led a um resistor adequado, e conecta o outro lado do resistor a um pino terra (GND) do Arduino.

Como só um dos 3 leds de cada semáforo fica aceso de cada vez, pude usar só 2 resistores (compartilhando cada um deles com os 3 leds de cada um dos semáforos), e não o método tradicional de incluir um resistor para cada led.

Para entender um pouco mais sobre como são feitos os contatos nas linhas e colunas de uma protoboard, dê uma olhada neste artigo anterior.

A inteligência do sistema está na programação

No lado da programação, entretanto, o exercício ficou um pouco mais interessante. O funcionamento de um único semáforo é algo bem simples mas, quando temos 2 semáforos interligados em um mesmo cruzamento, é necessário alternar os estados na ordem certa.

Digamos que os semáforos se chamem S1 e S2. Teremos uma repetição perpétua da seguinte sucessão de estados:

  1. S1 verde, S2 vermelho
  2. S1 amarelo, S2 vermelho
  3. S1 vermelho, S2 verde
  4. S1 vermelho, S2 amarelo

Imagino que no futuro eu terei classe e charme o suficiente para fazer isso com poucos pinos do Arduino e implementando uma parte da inteligência diretamente no hardware do circuito, de modo a garantir fisicamente que nem mesmo em caso de erro de software será possível ocorrer a desastrosa situação em que ambos os semáforos ficam verdes ao mesmo tempo.

Mas ainda não cheguei lá, e implementei a inteligência toda em software1. Acima você uma animação dos semáforos funcionando (infelizmente os meus leds vermelhos aparecem brancos na câmera), e abaixo você vê a parte crucial do código: o loop de pausas e incrementos de estado (entre 0 e 3) que faz os 2 semáforos funcionarem, ao mesmo tempo em que pisca o led interno do Arduino.

Não vou explicar mais detalhadamente, porque não são técnicas complexas (embora sejam ainda mais simples nos típicos exemplos iniciais, que não incluem condicionais) – mas o código completo do meu exercício está disponível para download, para você estudar e, eventualmente, aprimorar.

Para este exercício eu usei um Arduino, uma breadboard, 2 leds vermelhos, 2 leds amarelos, 2 leds verdes, 2 resistores de cerca de 800Ω cada, e 7 jumpers (1 para cada led, mais um para o terra). Os leds de um semáforo foram conectados aos pinos 8, 9 e 10, e os do outro foram ligados aos pinos 5, 6 e 7.

 
  1.  E evitei usar arrays para deixar um pouco mais fácil a compreensão por parte de recém-programadores.

Comentar

Dos leds ao Arduino, ESP8266 e mais

Aprenda eletrônica com as experiências de um geek veterano dos bits e bytes que nunca tinha soldado um led na vida, e resolveu narrar para você o que descobre enquanto explora esse universo – a partir da eletrônica básica, até chegar aos circuitos modernos.

Por Augusto Campos, autor do BR-Linux e Efetividade.net.

Recomendados

Livro recomendado


Artigos já disponíveis

Comunidade Arduino

O BR-Arduino é integrante da comunidade internacional de entusiastas do Arduino, mas não tem relação com os criadores e distribuidores do produto, nem com os detentores das marcas registradas.

Livros recomendados