Programação arduino para iniciantes: the traffic light controller

controlador de semáforoNa semana passada, nós aprendemos sobre a estrutura básica de um programa Arduino e tomou um olhar mais atento ao exemplo `piscar`. Esperamos que você teve a oportunidade de experimentar com código, ajustando os horários. Desta vez, vamos estar escrevendo algo do zero. Na verdade, vamos fazer um semáforo.

Além do Arduino básico, você vai precisar de:

  • Um LED vermelho, amarelo e verde.
  • A placa de ensaio.
  • resistores 3 x adequados para os LEDs que você tem (provavelmente 220 Ohms é bom).
  • Fios de ligação.
  • Um interruptor de botão de pressão.
  • A resistência de alto valor (10k).

Nota: Este é o mais recente de uma série de tutoriais de nível iniciante para Arduino, a plataforma de prototipagem eletrônica código aberto. Aqui está uma lista dos artigos anteriores da série:

Você também pode querer baixar e instalar Fritzing, a ferramenta que eu usei para desenhar os diagramas de fiação para estes projectos.

Fiação

Aqui está um esquema rápido eu fiz em Fritzing. É muito simples - apenas os três LEDs com fio com resistências de três pinos de entrada separadas, e tudo ligado ao chão.

controlador de semáforo

Programação

Vamos começar por variáveis ​​que definem para que possamos abordar as luzes por nome em vez de um número. Inicie um novo projeto Arduino, e começar com estas linhas:

int vermelho amarelo = 13-int = 12-int verde = 11-

Em seguida, vamos adicionar a função de configuração, where`ll definimos os LEDs vermelhos, amarelos e verdes para ser o modo de saída. Desde que criamos variáveis ​​para representar os números de pinos, podemos agora referem-se aos pinos por nomes em vez disso.

void setup () {pinMode (vermelho, OUTPUT) -pinMode (amarelo, OUTPUT) -pinMode (verde, OUTPUT) -}

Essa foi fácil. Agora, a parte difícil - a lógica real de um semáforo. Eu estou indo para criar uma função separada para mudar as luzes, e você verá porque mais tarde.

Quando você começar a programação, o código em si é muito rudimentar - é descobrir os detalhes minuciosos lógica que apresenta o maior problema. A chave para ser um bom programador é ser capaz de olhar para qualquer processo, e dividi-la em suas etapas fundamentais.

vazio loop () {changeLights () - Atraso (15000) -} changeLights void () {// verde off, amarelo para 3 secondsdigitalWrite (verde, HIGH) -digitalWrite (amarelo, LOW) -delay (3000) - // sua vez off amarelo, em seguida, vire vermelho por 5 secondsdigitalWrite (amarelo, LOW) -digitalWrite (vermelho, HIGH) -delay (5000) - // vermelho e amarelo por 2 segundos (vermelho já está no embora) digitalWrite (amarelo, HIGH) -delay (2000) - // desligue vermelho e amarelo, em seguida, ligue greendigitalWrite (amarelo, LOW) -digitalWrite (vermelho, LOW) -digitalWrite (verde, HIGH) -}

Feito! Agora, carregar e executar. Você deve ter um semáforo de trabalho que muda a cada 15 segundos. No entanto, eu acho que é um pouco básico agora, então vamos adicionar um botão para pedestres para mudar a luz sempre que quiserem. Consulte o diagrama do circuito atualizada abaixo:

controlador de semáforo

Você notará que o interruptor tem um resistor de 10k de alta impedância ligado a ele, e pode estar se perguntando o porquê. Isso é chamado de resistor suspenso. É um conceito difícil de entender no início, mas paciência comigo.

Um interruptor quer permite o fluxo de corrente, ou não faz. Isso parece bastante simples, mas em um circuito lógico, a corrente deve ser sempre fluindo em qualquer uma alta ou baixa estado (lembre-se - 0 ou 1, de alta ou baixa). Você pode supor que um interruptor de botão de pressão que não está realmente sendo empurrado seria definido como estando em um estado de baixo, mas na verdade ele é dito ser "flutuante", porque nenhuma corrente está sendo desenhado em tudo.

Neste estado flutuante, é possível que uma leitura falsa irá ocorrer como ele flutua com interferência elétrica. Em outras palavras, um interruptor flutuante está dando nem uma alta confiança, nem baixo a leitura do estado. Um pull down resistor mantém uma pequena quantidade de corrente que flui quando o interruptor está fechado, garantindo assim uma leitura precisa baixo Estado. Em outros circuitos lógicos, você pode encontrar um resistor pull-up em vez - isso funciona com o mesmo princípio, mas em sentido inverso, certificando-se que determinada porta lógica padrão para alta.

Agora, na parte de loop do código, em vez de mudar as luzes a cada 15 segundos, vamos ler o estado do interruptor de tecla em vez disso, e apenas mudar as luzes quando ele é ativado.

Comece adicionando algumas novas variáveis ​​para o início do app:

botão int = 2- // switch é no pino 2INT buttonValue = 0- // mudar o padrão é 0 ou LOW

Agora, na função de configuração, adicionar uma nova linha para declarar o interruptor como uma entrada. Eu também acrescentou uma única linha para iniciar os semáforos no estágio verde. Sem essa configuração inicial, eles seriam desligados, até a primeira vez que um changeLights () foi iniciado usando uma função.

pinMode (switch, ENTRADA) -digitalWrite (verde, HIGH) -

Mudar toda a função loop para o seguinte em vez disso:

vazio loop () {// ler o valor da switchswitchValue = digitalRead (botão) -
// Se o interruptor é alta, ou seja. empurrado para baixo - mudar as luzes se (buttonValue == HIGH) {changeLights () - atraso (15000) - // aguarde 15 segundos}}

Isso deve fazê-lo. Ao esperar dentro do "if" por 15 segundos, podemos garantir os semáforos não pode mudar, pelo menos, que a duração. Uma vez que 15 segundos é para cima, o ciclo reinicia. Cada reinício do loop, vamos ler o estado do botão novamente, mas se não for pressionada em seguida, o "if" nunca mais ativa, as luzes nunca mudam, e ele simplesmente reinicia novamente.

Isso é tudo por esse tempo, então eu espero que você aprendeu lotes e tinha escrito o divertimento do risco. Você tem as mãos sujas com alguns LEDs e resistores, bem como a adição de um interruptor com um resistor pull down - espero que você entendeu por que precisamos de um. Brincar com o código, ajustá-lo e, mais importante se divertir. Se você fizer quaisquer aditamentos ou alterações, por que não deixe-nos saber sobre isso nos comentários?

» » Programação arduino para iniciantes: the traffic light controller