Arduino: Controlando leds pelo teclado

Olá pessoal, nesse post irei mostrar um simples e pequeno projeto utilizando arduino e leds coloridos. O objetivo desse projeto e fazer o controle  (ligar/desligar)  vários leds conectados ao arduino através do teclado do computador . Para isso vou dividir o post em 3 partes:

1° Parte: explicar  um código de exemplo que acompanha a IDE do Arduino, vou utilizar apenas um led.
2° Parte:  acrescentar algumas linhas de código para o controle desse led através do teclado.
3° Parte: montar um projeto usando 5 leds controlados pelo teclado.

Inicio do projeto (1° Parte)

Na IDE do Arduino é possível encontrar vários exemplos de códigos prontos para uso dos mais variados componentes, desde leds, botões, sensores, servo motores e outros mais avançados como usar arduino na internet. Para isso basta você acessar o menu: “File > Examples” e então escolher um de seu interesse. Nesse caso utilizaremos o exemplo chamado “Digital > Blink”


Depois de selecionado o exemplo você verá o código responsável por ligar e desligar um led conectado ao pino 13 do arduino. Esse código está todo comentado e possui referencias do seu autor. Abaixo está o mesmo código comentado e explicado em português e sem os comentários do autor.

int ledPin =  13; //seta o pino 13 do arduino para ligar o led

void setup()   {
  pinMode(ledPin, OUTPUT); //inicializa o pino digital 13 como saida
}

void loop()  //loop (infinito) para executar as operacoes
{
  digitalWrite(ledPin, HIGH);  // seta o pino 13 como LIGADO
  delay(1000);                // espera 1 segundo (com o led ligado)
  digitalWrite(ledPin, LOW); // seta o pino 13 como DESLIGADO
  delay(1000);              // espera 1 segundo (com o led desligado)
}                          // faz o loop (volta para o inicio do loop)

O código é simples de entender. Vamos para o próximo passo, conectar o led na protobord e no arduino. Siga o esquema  abaixo para montar seu circuito. Caso não consiga visualizar direito a imagem, click sobre ela.

Repare que o jumper vermelho está ligado ao pino digital 13 do arduino e ligado ao pino corrente (pino maior) do led verde, já o jumper azul está ligado ao pino GND (terra) do arduino e ligado ao pino terra do led (pino menor). Agora basta carregar o código para o Arduino e ver o led piscar como no vídeo abaixo:

Com isso chegamos ao final da primeira parte.

Acrescentando algumas linhas ao código de exemplo (2° Parte).

Vamos utilizar o mesmo código para fazer a segunda parte do projeto, agora acrescentaremos algumas linhas para ler as teclas e fazer as condições necessárias para controlar o led.  As linhas de código que eu comentei são as acrescentadas, veja:


int ledPin =  13;
void setup()   {

  // inicializamos a porta serial onde vamos escrever
  //os dados que serao lidos pela função Serial.read()
  Serial.begin(9600);

  pinMode(ledPin, OUTPUT);
}

void loop()
{
  //inicializa uma variavel do tipo char chamada tecla
  char tecla;

  // armazena em "tecla" o retorno da função read()
  //essa função lê um valor que é escrito na porta serial
  tecla = Serial.read();

  //verfica se a tecla digitada é igual a l (liga)
  //se for igual entra na condiçao e liga o led
  if(tecla == 'l')
  {
      digitalWrite(ledPin, HIGH);
  }

  else // se nao

    //verfica se a tecla digitada é igual a d (desliga)
    //se for igual entra na condição e desliga o led
    if(tecla == 'd')

    {
        digitalWrite(ledPin, LOW);
    }

  delay(1000);
}

Veja o resultado:

Repare que logo depois da escolha da tecla eu pressiono ENTER, isso faz com que a tecla seja escrita na porta serial e então lida pela função Serial.read();

Fim da 2° Parte.

Projeto final, controlando 5 leds atraves do teclado (3° Parte).

Bom estamos quase alcançando nosso objetivo, até aqui foi tudo muito simples. Acredito que voce tenha entendido os códigos e a montagem do circuito na protoboard. Veremos então o mesmo projeto só que agora um pouco maior (nem tanto rsrsrs…), Iniciaremos com a montagem do circuito:

Repare que existe dois leds amarelos, isso aconteceu pois o software que eu usei para montar o circuito não tinha a cor laranja então imagine que o led amarelo que esta ao lado do azul, seja da cor laranja. Outra diferença nesse esquema é que agora estamos usando resistores para regular a tensão que vem das portas digitais para os leds, nos exemplos onde usamos apenas um led conectado ao pino 13 não era necessario pois nesse pino ja existem um resistor interno que vem por padrão, nesse esquema prefiri utilizar mais um resistor externo para o pino 13 apenas por questões de padronização, mas para esse pino não se faz necessario.

Agora vamos ao código do projeto:
Penso que as explicações ja feitas serão suficientes para o entendimento do código abaixo. Não ha nada de novo a não ser pelo fato da presença de mais 4 leds. Veja:

int ledPin13 =  13;
int ledPin11 =  11;
int ledPin9  =  9;
int ledPin7  =  7;
int ledPin5  =  5;

void setup()   {

  Serial.begin(9600);

  pinMode(ledPin13, OUTPUT);
  pinMode(ledPin11, OUTPUT);
  pinMode(ledPin9, OUTPUT);
  pinMode(ledPin7, OUTPUT);
  pinMode(ledPin5, OUTPUT);
}

void loop()
{
  char tecla;
  tecla = Serial.read();
  //se pressionado "g" liga o led verde (green)
  if(tecla == 'g')
  {
      digitalWrite(ledPin13, HIGH);
  }
  else
    //Se pressionado "b" liga o led azul (blue)
    if(tecla == 'b')
    {
         digitalWrite(ledPin11, HIGH);
    }
    else
      //S pressionado "o" liga o led laranja (orange)
      if(tecla == 'o')
      {
         digitalWrite(ledPin9, HIGH);
      }
      else
        //Se pressionado "y" liga o led amarelo (yellow)
        if(tecla == 'y')
        {
            digitalWrite(ledPin7, HIGH);
        }
        else
          //Se pressionado "w" liga o led branco (white)
          if(tecla == 'w')
          {
              digitalWrite(ledPin5, HIGH);
          }
          else

            //Se pressionado "d" desliga todos os leds
            if(tecla == 'd')
            {
                digitalWrite(ledPin13, LOW);
                digitalWrite(ledPin11, LOW);
                digitalWrite(ledPin9, LOW);
                digitalWrite(ledPin7, LOW);
                digitalWrite(ledPin5, LOW);
            }
  delay(1000);
}

Confira o vídeo do projeto:

Agora você deve estar se perguntando: Mas no que isso pode contribuir? Ou O que esse projeto tem de tão especial?
Esse projeto realmente não contribui com nada se você estiver pensando em leds. Mas e se fossem lâmpadas no lugar de leds?? E se cada tecla que você pressionasse ligasse um lâmpada ou qualquer outro aparelho eletronico da sua casa? Bem cabe a você usar a imaginação e pensar nas diferentes formas de aplicação de simples projetos como esse.

Até a próxima!

Anúncios

21 comentários em “Arduino: Controlando leds pelo teclado

  1. Gostei muito!
    Parabéns para o blog.
    Muito boa a explicação.
    Tô pulando de alegria aqui com meu arduino.

  2. Cara nao tenho palavras para descrever quao nobre é sua iniciativa de fazer um blog tao bem explicado, vc ajuda muitos amantes do arduino, parabens por todos os projetos e continue assim generoso e paciente compartilhando conhecimentos, vou estar sempre aqui a espera de projetos novos, abraços.

  3. Acho que não ficou muito claro, pelo menos para mim, como você fez para conectar o teclado com o arduino (ou seja, de onde vem os dados da porta serial?). O arduino está conectado no computador ou diretamente no teclado?

    • Olá Paulo! O arduino esta conectado a porta USB do computador, os comando para ligar e desligar os leds ou faço através da IDE do arduino com a opção Serial Monitor.

      Já no código arduino eu tenho a função Serial.read() que le um caracter digitado na serial monitor!…..Simples assim

  4. amigos preciso de ajuda de voces, sou iniciante em automação , preciso saber como posso ligar o relay, existe um relay especifico para o arduino , pois o que tenho em casa veio em um kit da minha moto, talvez por isso que nao ativa ele talvez a voltagem desse meu relay seja maior, existe um relay que é ativado com 5v?

  5. Cara..tem como eu fazer este mesmo controle, mas sem apertar a tecla ‘ENTER’?
    Tipo..aperto a tecla ‘d’ e os leds altomaticamente já desligam..ao inves de ter de apertar o ENTER?

  6. Ficou muito legal esse projeto!
    Tirou muitas dúvidas! Mas ao motar o meu acabou surgindo mais duas:
    O meu projeto é trabalhar ativar três mini-bombas e uma válvula solenoide, sendo que os condicionais seriam inseridos para que a ordem e tempo de execução sejam alteradas a meu gosto.
    Vamos as dúvidas:
    1º_ troquei a variável char por int para poder trabalhar com um faixa de valores mais ampla. Quando dou início ao serial monitor, ao invés de, só executar uma condicional quando for inserido a tecla comando, a primeira condicional (iniciada com o “if” ) é lido e executado no momento que é aberto o serial monitor. Como contornar esse problema?
    2º_ na última condicional do seu tutorial, como eu poderia modifica-la para que mesmo quando umas das condicionais anteriores esteja em execução (digo isso para os casos em que haja uma série de sub-funções que demore até ser executada completamente) possa para esse processo e desligar (completamente ou parcial) os componentes?
    Falou!

  7. Gostei desse tutorial ajudou bastante.
    Tentei aplicar a ideia para controlar três mini-bombas e uma válvula peristáltica e ocorreu como o previsto, porém surgiu um imprevisto e duas dúvidas.
    O imprevisto é toda vez que abro o Serial monitor o setup é executado novamente.
    As dúvidas são: como e porque isso ocorreu (dúvida lógica) e como eu poderia incrementar o código do programa para que, mesmo se o programa estiver em processo de execução, haja um comando que cesse todas as atividades, mesmo as não terminadas, possibilitando executar outras ou refazer a que estava até em tão!?

  8. Meu amigo, você não faz idéia do quanto você me ajudou com este simples exemplo.
    A partir dele, pretendo construir o hardware de parte do painel de uma aeronave para o Flight Simulator e parte das dúvidas que restaram tirei aqui no seu blog.

    Obrigado!

  9. O meu da o erro “avrdude: stk500_getsync(): not in sync: resp=0x00” uso teclado PS/2 sera que é por causa disso?

  10. Olá amigo, perfeito o tutorial, estou gostando muito do blog. Agora fiquei curioso se eu fosse usar as teclas direcionais por exemplo. Tem alguma tabela com os codigos para isso?

  11. Boa noite amigo.

    Estou tentando executar este mesmo projeto (1 led) porém com uma única diferença…

    por exemplo, eu gostaria de ligar e desligar o led com a tecla L.

    Se L for pressionado Liga o Led;
    Se L for pressionado novamente Desliga o Led;

    Como posso fazer isso?

  12. ei amigo
    quando vc aperta l de da enter
    e aonde isso?
    dentro do lugar aonde coloca os codicos do arduino ??

  13. Ótimo, parabéns foi a primeira vez que vi meu arduino funcionar( acabou de chegar) mas antes tive que ler a duvida do Paulo(q era a minha tambem ) sobre Serial Monitor, aí funcionou legal. obrigado!

  14. Ferpineiro e como seria o código para invés de teclar L ou D… ter uma especie de BOTÃO na tela do computador ? tem como ?
    OBS: shield ehternet ainda não chegou.

    grato

  15. o cara muito legal
    queria contolar um motor de passo com teclado de 4×4 controlando grau por grau
    to todo enrolado
    eu aperto o qualquer valor (4) digitos ele fica rotacionando

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s