terça-feira, 22 de novembro de 2011

Projeto 4 - Semáforo interativo

Neste projeto iremos trabalhar com um novo componente, um botão.
Essa é a primeira vez que iremos interagir com o hardware, ou seja, iremos enviar uma informação ao Arduino que irá receber essa informação e gerar um resultado.
Este projeto ainda é bem simples mas, mesmo assim, é bem interessante. Utilizaremos o botão para fazer o papel de "resitor pull-down". 
O autor explicou de forma bem simples o conceito: "Se o botão for pressionado, a eletricidade tomará o caminho de menor resistência, e fluirá entre os 5V e o pino de entrada (há um resistor de 100k Ω no pino de entrada e um resistor de 10k Ω no terra)". 
Abaixo um esquema de um circuito de resistor pull-down:

Note que não há nenhum resistor entre o o botão e o pino (5v), logo, ao pressionarmos o botão a corrente fluirá por este caminho.
Quando pressionamos o botão, desempenhamos o papel de um pedestre, solicitando que o sinal feche para poder atravessar a rua, como mostra o vídeo abaixo:


Abaixo temos o esquema do hardware e o código utilizado:


//Project 4 - Semaforo interativo
int carRed = 12; // definindo os leds dos carros
int carYellow = 11;
int carGreen = 10;
int pedRed = 9; // definindo os leds de pedestres
int pedGreen = 8;
int button = 2; // pino do botao
int crossTime = 10000; // tempo de travessia
unsigned long changeTime; // tempo desde a ultima vez que o botao foi pressionado

void setup() {
  pinMode(carRed, OUTPUT);
  pinMode(carYellow, OUTPUT);
  pinMode(carGreen, OUTPUT);
  pinMode(pedRed, OUTPUT);
  pinMode(pedGreen, OUTPUT);
  pinMode(button, INPUT);
  digitalWrite(carGreen, HIGH);
  digitalWrite(pedRed, HIGH);
}

void loop() {
  int state = digitalRead(button);
  /*verifica se o botao foi pressionado e se faz mais de 5 seg desde a ultima vez*/
  if (state == HIGH && (millis() - changeTime) > 5000) {
    //chama a funcao que altera as luzes
    delay(4000);
    changeLights();
  }
}

void changeLights(){
  digitalWrite(carGreen, LOW); //apaga carGreen
  digitalWrite(carYellow, HIGH); //acende carYellow
  delay(4000);
  digitalWrite(carYellow, LOW); //apaga carYellow
  digitalWrite(carRed, HIGH); //acende carRed
  digitalWrite(pedRed, LOW); //apaga pedRed
  digitalWrite(pedGreen, HIGH); //acende pedGreen
  delay(crossTime); //aguarda crossTime
  
  //pisca pedGreen
  for (int x=0; x<10; x++) {
    digitalWrite(pedGreen, HIGH);
    delay(250);
    digitalWrite(pedGreen, LOW);
    delay(250);
  }
  
  digitalWrite(pedRed, HIGH); //acende pedRed
  digitalWrite(carRed, LOW); //apaga carRed
  digitalWrite(carGreen, HIGH); //acende carGreen
  
  changeTime = millis();
}

7 comentários:

  1. Muito interessante o seu blog amigo.
    Eu estou de olho nesse livro "Arduino Básico", mas como estou com pouca grana para comprá-lo agora, estava procurando material na internet.
    Acabei achando o seu blog e achei bem legal cara.
    Já fiz o projetinho do semáforo. Amanhã vou ver se faço esse do semáforo interativo.

    Tenta fazer novos posts cara. Está bem legal!

    Um abraço!

    ResponderExcluir
  2. Opa blz. parou de postar mais videos? to me jogando em uns projetos arduinos tb e to aprendendo gostaria de umas dicas ate mesmo contato para trocarmos ideias. meu email e andersondborges@gmail.com atualmente tenho arduino adk e uno estou tentando fazer conecao com um fluxo de agua e android.

    ResponderExcluir
  3. cara engraçado q os códigos do livro parecem estar errado..tem vezes q n funciona..tive q colocar o teu codigo ai..vlw.

    ResponderExcluir
  4. Olá, gostaria de saber se tem como o Modulo Bluetooth enviar uma mensagem para o celular e o fazer vibrar?
    Se tiver, me responde, por favor.
    Obrigada!

    ResponderExcluir
  5. Olá, gostaria de saber se tem como o Modulo Bluetooth enviar uma mensagem para o celular e o fazer vibrar?
    Se tiver, me responde, por favor.
    Obrigada!

    ResponderExcluir