Índice:

Use 1 entrada analógica para 6 botões para Arduino: 6 etapas
Use 1 entrada analógica para 6 botões para Arduino: 6 etapas

Vídeo: Use 1 entrada analógica para 6 botões para Arduino: 6 etapas

Vídeo: Use 1 entrada analógica para 6 botões para Arduino: 6 etapas
Vídeo: Aula 6 - Entradas Analógicas e Comunicação Serial Arduino UNO (Curso Arduino Iniciantes) 2024, Novembro
Anonim
Use 1 entrada analógica para 6 botões para Arduino
Use 1 entrada analógica para 6 botões para Arduino

Muitas vezes me perguntei como poderia obter mais entradas digitais para meu Arduino. Recentemente, ocorreu-me que deveria ser capaz de usar uma das entradas analógicas para trazer várias entradas digitais. Fiz uma pesquisa rápida e descobri onde as pessoas podiam fazer isso, mas que só permitiam que um único botão fosse pressionado por vez. Quero poder ter qualquer combinação de botões para serem pressionados SIMULTANEAMENTE. Então, com a ajuda do TINKERCAD CIRCUITS, eu me propus a fazer isso acontecer.

Por que eu iria querer pressionamentos de botão simultâneos? Conforme ilustrado no projeto dos circuitos TinkerCad, ele pode ser usado para entradas de chave DIP para seleção de diferentes modos dentro do programa.

O circuito que criei usa a fonte de 5 V disponível no Arduino e usa 7 resistores e 6 botões ou interruptores.

Etapa 1: O circuito

O circuito
O circuito

Os Arduino têm entradas analógicas que aceitam uma entrada de 0 V a 5 V. Esta entrada tem uma resolução de 10 bits, o que significa que o sinal é dividido em 2 ^ 10 segmentos, ou 1.024 contagens. Com base nisso, o máximo que poderíamos inserir em uma entrada analógica, permitindo pressionamentos simultâneos, seria de 10 botões para 1 entrada analógica. Mas, este não é um mundo perfeito. Há resistência nos condutores, ruído de fontes externas e energia imperfeita. Então, para me dar bastante flexibilidade, planejei projetar isso para 6 botões. Isso foi, em parte, influenciado pelo fato de que os Circuitos TinkerCAD tinham um objeto DIP Switch de 6 chaves, o que tornaria o teste mais fácil.

A primeira etapa do meu projeto foi garantir que cada botão, quando pressionado individualmente, forneceria uma voltagem exclusiva. Isso excluiu que todos os resistores tivessem o mesmo valor. A próxima etapa foi que os valores de resistência, quando adicionados em paralelo, não poderiam ter a mesma resistência que qualquer valor de resistor único. Quando os resistores são conectados em paralelo, a resistência resultante pode ser calculada por Rx = 1 / [(1 / R1) + (1 / R2)]. Portanto, se R1 = 2000 e R2 = 1000, Rx = 667. Eu especulei que, dobrando o tamanho de cada resistor, não veria a mesma resistência para nenhuma das combinações.

Então, meu circuito até este ponto era ter 6 interruptores, cada um com seu próprio resistor. Mas, há mais um resistor necessário para completar este circuito.

O último resistor tem 3 finalidades. Primeiro, ele atua como um resistor pull-down. Sem o resistor, quando nenhum botão é pressionado, o circuito está incompleto. Isso permitiria que a tensão na entrada analógica do Arduino flutuasse para qualquer potencial de tensão. Um resistor pull-down basicamente reduz a tensão para 0 V. O segundo objetivo é limitar a corrente deste circuito. A lei de Ohm afirma que V = IR, ou Tensão = Corrente multiplicada pela Resistência. Com uma dada fonte de tensão, quanto maior o resistor significa que a corrente seria menor. Portanto, se um sinal de 5 V fosse aplicado a um resistor de 500 ohms, a maior corrente que poderíamos ver seria 0,01 A ou 10 mA. O terceiro objetivo é fornecer a tensão do sinal. A corrente total fluindo através do último resistor seria: i = 5V / Rtotal, onde Rtotal = Rlast + {1 / [(1 / R1) + (1 / R2) + (1 / R3) + (1 / R4) + (1 / R5) + (1 / R6)]}. No entanto, inclua apenas 1 / Rx para cada resistor que tiver seu botão correspondente pressionado. Da corrente total, a tensão fornecida à entrada analógica seria i * Rlast ou i * 500.

Etapa 2: Prova - Excel

Prova - Excel
Prova - Excel

A maneira mais rápida e fácil de provar que eu obteria resistências exclusivas e, portanto, tensões exclusivas com este circuito era usar os recursos do Excel.

Eu configurei todas as combinações possíveis de entradas de switch e organizei essas sequencialmente seguindo padrões binários. Um valor de "1" indica que a chave está ligada, em branco indica que ela está desligada. No topo da planilha, coloco os valores de resistência para cada chave e para o resistor pull-down. Em seguida, calculei a resistência equivalente para cada uma das combinações, exceto quando todos os resistores estão desligados, uma vez que esses resistores não terão um efeito sem ter uma fonte de alimentação para fornecê-los. Para tornar meus cálculos fáceis de forma que eu pudesse copiar e colar em cada combinação, incluí todas as combinações no cálculo multiplicando cada valor de chave (0 ou 1) por seu valor de resistência invertido. Fazer isso eliminou sua resistência do cálculo se a chave estava desligada. A equação resultante pode ser vista na imagem da planilha, mas Req = Rx + 1 / (Sw1 / R1 + Sw2 / R2 + Sw3 / R3 + Sw4 / R4 + Sw5 / R5 + Sw6 / R6). Usando Itotal = 5V / Req, determinamos a corrente total através do circuito. Esta é a mesma corrente que passa pelo resistor pull-down e nos fornece a tensão para nossa entrada analógica. Isso é calculado como Vin = Itotal x Rx. Examinando os dados Req e os dados Vin, podemos ver que realmente temos valores únicos.

Neste ponto, parece que nosso circuito funcionará. Agora, para descobrir como programar o Arduino.

Etapa 3: Programação do Arduino

Programação Arduino
Programação Arduino
Programação Arduino
Programação Arduino
Programação Arduino
Programação Arduino

Quando comecei a pensar sobre como programar o Arduino, inicialmente planejei configurar faixas de tensão individuais para determinar se uma chave estava ligada ou desligada. Mas, certa noite, enquanto estava deitado na cama, ocorreu-me que deveria ser capaz de encontrar uma equação para fazer isso. Como? EXCEL. O Excel tem a capacidade de calcular equações para melhor ajustar os dados em um gráfico. Para fazer isso, vou querer uma equação do valor inteiro das chaves (binário) versus a entrada de tensão correspondente a esse valor. Na minha pasta de trabalho do Excel, coloquei o valor inteiro no lado esquerdo da planilha. Agora, para determinar minha equação.

Aqui está um rápido tutorial sobre como determinar a equação de uma linha no Excel.

1) Selecione uma célula que não contenha dados. Se você selecionou uma célula que contém dados, o Excel tentará adivinhar qual é a tendência que você deseja. Isso torna muito mais difícil configurar uma tendência, porque o Excel raramente prevê corretamente.

2) Selecione a guia "Inserir" e selecione um gráfico "Dispersão".

3) Clique com o botão direito na caixa do gráfico e clique em "Selecionar dados…". Isso abrirá a janela "Selecionar fonte de dados". Selecione o botão Adicionar para continuar a selecionar os dados.

4) Dê a ele um nome de série (opcional). Selecione o intervalo para o eixo X clicando na seta para cima e selecionando os dados de tensão. Selecione o intervalo para o eixo Y clicando na seta para cima e selecionando Dados inteiros (0-63).

5) Clique com o botão direito sobre os pontos de dados e selecione "Adicionar linha de tendência …" Na janela "Formatar linha de tendência", selecione o botão Polinomial. Olhando para a tendência, vemos que a Ordem de 2 não é exatamente igual. Selecionei uma Ordem de 3 e achei que era muito mais preciso. Marque a caixa de seleção para "Exibir equação no gráfico". A equação final agora é exibida no gráfico.

6) Feito.

OK. De volta ao programa Arduino. Agora que temos a equação, programar o Arduino é fácil. O número inteiro que representa as posições do switch é calculado em 1 linha de código. Usando a função "bitread", podemos pegar o valor de cada bit individual e assim saber o estado de cada botão. (VER FOTOS)

Etapa 4: Circuitos TinkerCAD

Circuitos TinkerCAD
Circuitos TinkerCAD

Se você ainda não verificou os circuitos do TinkerCAD, faça-o agora. ESPERAR!!!! Termine de ler meu Instructable e, em seguida, dê uma olhada. Os circuitos do TinkerCAD tornam o teste dos circuitos do Arduino muito fácil. Inclui vários objetos elétricos e Arduinos, permitindo inclusive que você programe o Arduino para teste.

Para testar meu circuito, configurei 6 chaves usando um pacote de chaves DIP e as vinculei aos resistores. Para provar que o valor da tensão em minha planilha do Excel estava correto, exibi um voltímetro na entrada do Arduino. Tudo isso funcionou conforme o esperado.

Para provar que a programação do Arduino funcionou, eu envio os estados dos interruptores para LEDs, usando as saídas digitais do Arduino.

Em seguida, mudei todos os interruptores para todas as combinações possíveis e tenho o orgulho de dizer "FUNCIONA" !!!

Etapa 5: "Até logo e obrigado por todos os peixes." (ref.1)

Ainda não experimentei usar equipamento real, pois estou viajando a trabalho. Mas, depois de provar isso com os Circuitos TinkerCAD, acredito que funcionará. O desafio é que os valores dos resistores que especifiquei não são todos valores padrão para resistores. Para contornar isso, pretendo usar potenciômetros e combinações de resistores para obter os valores de que preciso.

Obrigado por ler meu instrutível. Espero que isso ajude você com seus projetos.

Deixe um comentário se você tentou enfrentar esse mesmo obstáculo e como o solucionou. Eu adoraria aprender mais maneiras de fazer isso.

Etapa 6: Referências

Você não achou que eu faria uma citação sem fornecer uma referência à fonte, não é?

ref. 1: Adams, Douglas. Adeus e obrigado pelos peixes. (O quarto livro da "trilogia" do Guia do Mochileiro das Galáxias)

Recomendado: