O Projeto Elevador Arduino foi desenvolvido com o intuito de explorar as funcionalidades do Elevador MDF, um produto interessante para quem deseja desenvolver as suas habilidades em programação e desenvolvimentos mecânicos. A sua montagem é bastante simplificada e o seu código possui alguns desafios bastante interessantes para os que desejam desenvolvê-lo.
Neste projeto, desenvolve-se o esquema de ligação e código de um elevador que tem como intuito reconhecer um dado andar solicitado e deslocar-se até este, um projeto que necessita de funções simultâneas entre motor, sensor de posição e botões de localização.
Como sensor base para o reconhecimento de posição do Projeto Elevador Arduino, utilizou-se um Módulo Reed Switch que em conjunto com um imã de neodímio fixado no case de deslocamento tinha a função de identificar o andar em que se encontrava e interagir com os demais componentes do projeto.
Teste Prático do Elevador Arduino
Driver Duplo Ponte H para Motor DC
A base de funcionamento do Projeto Elevador Arduino é o Motor DC responsável por deslocar o case para cima e para baixo, porém como sabemos, este não pode ser conectado diretamente ao Arduino e para auxiliar em procedimentos como controle de velocidade e inversão de direção está normalmente associados a Drivers como o modelos L9110s.
A conexão dos motores é extremamente simples, como não possuem uma polaridade estabelecida de instalação, podem ser conectados da melhor maneira à qual se adaptam ao projeto. Lembrando que a troca de polos resulta apenas na inversão da direção de movimento do motor.
Quanto aos pinos de alimentação, estes podem estar associados aos 5V do Arduino, porém como a corrente dos motores geralmente é maior que a fornecida pelo microcontrolador, é necessária a inclusão de uma fonte de alimentação externa. Podendo ser alimentado com 5V, os motores utilizam a mesma tensão necessária para alimentação através do pino Vin, um recurso que iremos utilizar.
Como vemos, o esquema de ligação do módulo de alimentação é bastante simples, porém algumas observações podem ser consideradas, no desenvolvimento do projeto foram soldados ao Jack P4 positivo (VCC) e negativo (GND) um jumper fêmea para alimentação do módulo e um jumper macho para alimentação do Arduino, veja:
Quanto aos pinos de controle do Drive Utilizado no Projeto Elevador Arduino, estes podem ser atribuídos a qualquer pino PWM do microcontrolador de acordo com o projeto que esteja sendo desenvolvido.
Comunicação PWM
A Modulação por Largura de Pulso é a tradução da sigla PWM (Pulse Width Modulation) é uma técnica que possibilita ao Arduino uma saída analógica através de meios digitais, bastante utilizado para o controle de intensidade de LEDs e também controle de rotação de motores DC.
Os pinos digitais do Arduino fornecem uma senoidal de onda quadrada com 5V em nível HIGH (alto) e 0V em nível LOW (baixo), o que torna impossível a redução de tensão para valores entre seus mínimos e máximos através dos pinos digitais, desta maneira é necessário alterar o tempo entre os níveis de onda do pino para obter tal controle, ou seja, se alternarmos o estado de funcionamento rápido o suficiente, a velocidade do motor será alterada, por exemplo.
O ciclo de trabalho da comunicação PWM é definido pela porcentagem de tempo em que o sinal está em HIGH, ou seja, para um ciclo de trabalho de 50%, a senoidal ficará meio segundo em nível alto e meio segundo em nível baixo. Na imagem abaixo vemos através do exemplo de 40% as inscrições “T on” e “T off”, que representam consequentemente Tempo ligado e Tempo desligado.
Para facilitar o funcionamento dos pinos digitais como elementos de controle PWM, o Arduino possui uma função incorporada, a “analogWrite ();” que aceita valores entre 0 e 255 para determinar a porcentagem de funcionamento da onda, de uma maneira simplificada:
1 2 3 4 5 |
analogWrite (0); // Determina um ciclo de trabalho de 0% analogWrite (127); // Determina um ciclo de trabalho de 50% analogWrite (255); // Determina um ciclo de trabalho de 100% |
Em projetos com motores também é utilizado um tipo diferenciado de função para delimitação da velocidade, é a vSpeed, presente no desenvolvimento do presente projeto, os valores atribuídos a mesma por sua vez, seguem o mesmo padrão citado acima.
Diferentes modelos de Arduino possuem diferentes pinos específicos para controle PWM, no Arduino UNO, por exemplo, os pinos que suportam este controle são os 3, 5, 6, 9, 10 e 11 e estão representados por um “~” antes do numeral. A frequência de saída dos pinos PWM é normalmente de 490Hz, com exceção dos pinos 5 e 6 que possuem uma frequência de aproximadamente 980Hz.
Desta maneira, ao desenvolvermos projetos que necessitam de controle PWM, sempre devemos atribuir estes equipamentos aos pinos demonstrados na imagem acima, caso contrário as funções desejadas não serão executadas de acordo com as necessidades do projeto.
Produtos Utilizados no Projeto Elevador Arduino
Abaixo seguem todos produtos utilizados no desenvolvimento do projeto, os quais pode ser adquiridos de forma avulsa conforma listagem. Se você quiser, pode adquirir a versão do Elevador com Arduino Completo, o qual já possui todas as peças necessárias para montagem.
– 1 Arduino Uno R3 + Cabo USB;
– 1 Estrutura em MDF para Elevador com Arduino EA50;
– 1 Fonte de Alimentação Chaveada 5VDC 1A;
– 1 Driver Duplo Ponte H de motor DC ou Passo L9110s;
– 4 Módulo Sensor Magnético para Arduino;
– 4 Chave Push Button PBS-102 104 Preta NF 1A;
– 1 Jack P4 Plástico (2,1×5,5mm) para Paineis e Chassis;
– 1 Motor DC 3-6V 80RPM com Caixa de Redução 120:1;
– 1,5 Metros de Cabo flexível TiaFlex 5m – 0,14mm²;
– 0,5 Metros de Fio de Nylon 0,25mm;
– 1 Protoboard 50 Pontos para Montagem de Projetos;
– 1 Imã De Neodímio N50 Super Forte 10mm X 4mm;
– 8 Parafuso M3 x 6mm Metálico;
– 2 Parafuso Philips M3 x 25mm Metálico;
– 2 Porca M3 x 2,4mm Metálica;
– 26 Jumper Premium para Protoboard Macho-Fêmea 20 cm;
– 2 Jumper Premium para Protoboard Macho-Macho 30 cm.
Esquema de Ligação do Projeto Elevador Arduino
Para o Projeto Elevador Arduino, a quantia de equipamentos destaca-se uma vez que cada andar precisa de um elemento de indicação e um sensor de posição, a quantia de pinos utilizados do Arduino quase atinge o seu máximo, porém com exceção dos pinos do motor que necessitam serem conectados em lugares com suporte PWM, os demais equipamentos podem ser posicionados de acordo com o projeto.
Mesmo com uma quantia elevada de equipamentos e pinos utilizados pelo Arduino, o esquema de ligação não apresenta grandes dificuldades, fazendo-se necessária apenas a utilização de uma protoboard para uma central de distribuição de energia responsável por alimentar os Módulos Reed Switch e diminuir a necessidade de jumpers extensos.
Como vimos, os botões possuem seus pinos de referencia GND todos interligados e com apenas um fio saindo ao final, isto elimina a necessidade de outra protoboard e facilita a organização do projeto.
Outro detalhe bastante importante quanto a utilização deste botão, é que para sua utilização seria necessária a utilização de um resistor Pull Up, com o mesmo propósito anterior porém, utilizamos a função interna do Arduino que possibilita através de código eliminar a necessidade dos resistores.
Dicas para instalação de Componentes
Ao tratar-se de um produto com diversos equipamentos e com distâncias e limitações parcialmente visíveis, existem algumas dicas que podemos dar para facilitar a instalação e o funcionamento adequado do nosso projeto, além de melhor a sua parte estética.
Uma das principais facilidades que podem ser desenvolvidas neste projeto está na instalação dos botões para indicação de andar, para eliminar a necessidade de instalar um botão para cada um dos seus pinos, podemos realizar a soldagem de todos os pinos comuns e utilizar apenas uma porta do Arduino, para os pinos de sinal porém, é necessária a atribuição de jumpers individuais, veja:
Um fator que vale destacar é quanto a ligação dos Módulos Reed Switch mais elevados, infelizmente não ancontra-se Jumpers Premium em tamanho suficiente para satisfazer as necessidades, então recomenda-se utilizar dois dos modelos Macho-Fêmea em uma espécie de extensão, como podemos observar na imagem abaixo e salientar também o posicionamento e utilização da central de distribuição de energia via protoboard.
Outras dicas podem ser úteis quanto a organização dos cabos, abaixo do Arduino no seu case de fixação, temos disponível um orifício que pode ser utilizado para a passagem de fios, pode-se atribuir abraçadeiras para agrupamento de cabos como podemos ver na imagem acima e também realizar a passagem do fio do motor atrás do Módulo Reed Switch como visto na mesma imagem. A organização é a chave para o desenvolvimento de um projeto com acabamento de qualidade.
Cuidados ao Utilizar o Reed Switch
Manuseie o Reed Switch com cautela, pois seu material de vidro é bastante sensível. Para testar o funcionamento do sensor, aproxime um ímã e observe se o LED acende. Durante o teste, você pode baixar manualmente o elevador para facilitar o processo após a montagem. Se o LED acender ao aproximar o ímã, o sensor está funcionando corretamente.
Código de Funcionamento do Projeto Elevador Arduino
Uma facilidade que encontramos no Projeto Elevador Arduino é a capacidade de executar todas as suas funções sem a necessidade de bibliotecas, todos os seus comandos são comandos padrões do Software Arduino. A linguagem utilizada é basante simples e de fácil compreensão, veja:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
// corrigido dia 31/05 // por: Gustavo Rodolfo Stroschon // Projeto Elevador Arduino com Reed Switch e botões // Acionando Motor DC e controlando Andar // Define os pinos de utilização do Driver L298. const int motorB1 = 5;// Pino 5 no B1 do L293. const int motorB2 = 3;// Pino 3 no B2 do L293. // Define os pinos do Sensor Reed Switch. const int reedswitch1 = 8;// Pino 8 - Terreo const int reedswitch2 = 7;// Pino 7 - Andar 1 const int reedswitch3 = 6;// Pino 6 - Andar 2 const int reedswitch4 = 4;// Pino 4 - Andar 3 // Define os pinos dos botões de posição const int bterreo = 12;// Botão Pino 12 - Terreo const int bandar1 = 11;// Botão Pino 11 - Andar 1 const int bandar2 = 10;// Botão Pino 10 - Andar 2 const int bandar3 = 9;// Botão Pino 9 - Andar 3 // Define o estado lógico dos botões int terreo = 0;// Botão Terreo LOW int andar1 = 0;// Botão Andar 1 LOW int andar2 = 0;// Botão Andar 2 LOW int andar3 = 0;// Botão Andar 3 LOW int vSpeed = 255;// Define a velocidade do motor byte botaoandar = 4;// Define andar base byte andar();// Chama o valor da variável andar unsigned long delayTempo; void setup(){ // Define os pinos do Drive como saída de sinal pinMode(motorB1, OUTPUT); pinMode(motorB2, OUTPUT); // Define os pinos dos Reed Switchs como entrada de sinal pinMode(reedswitch1, INPUT); pinMode(reedswitch2, INPUT); pinMode(reedswitch3, INPUT); pinMode(reedswitch4, INPUT); // Define os pinos dos Botãos como entrada de sinal em pull up pinMode(bterreo, INPUT_PULLUP); pinMode(bandar1, INPUT_PULLUP); pinMode(bandar2, INPUT_PULLUP); pinMode(bandar3, INPUT_PULLUP); Serial.begin(9600); } void loop(){ // Se o não tiver nenhum botão pressionado executa if (botaoandar == 4){ // Se o bterreo for precioando atribui valor 0 ao botão terreo = digitalRead(bterreo); if (terreo == HIGH){ botaoandar = 0; delayTempo = millis(); } // Se o bandar1 for precioando atribui valor 1 ao botão andar1 = digitalRead(bandar1); if (andar1 == HIGH){ botaoandar = 1; delayTempo = millis(); } // Se o bandar1 for precioando atribui valor 2 ao botão andar2 = digitalRead(bandar2); if (andar2 == HIGH){ botaoandar = 2; delayTempo = millis(); } // Se o bandar1 for precioando atribui valor 3 ao botão andar3 = digitalRead(bandar3); if (andar3 == HIGH){ botaoandar = 3; delayTempo = millis(); } // Se o andar for diferente de 4 motor fica parado if (andar() != 4){ parado(); } // Se o andar for igual a 4 motor desce if (andar() == 4){ desce(); } } else{ // Se o Andar for diferente de 4 ... if (andar() != 4){ // E o botão do andar maior que o andar if (botaoandar > andar()){ while (botaoandar != andar()){ sobe(); } } // E o botão do andar menor que o andar if (botaoandar < andar()){ while (botaoandar != andar()){ desce(); } } // E o botão do andar igual ao andar if (botaoandar == andar()){ parado(); botaoandar = 4; } } } delay(100); } // Verifica os sensores Reed Switch e indica em que andar está o elevador byte andar(){ if (digitalRead(reedswitch1) == LOW){ return 0; }else if (digitalRead(reedswitch2) == LOW){ return 1; }else if (digitalRead(reedswitch3) == LOW){ return 2; }else if (digitalRead(reedswitch4) == LOW){ return 3; }else{ return 4; } } // Inicia o motor com o comando descer void desce(){ analogWrite(motorB1, vSpeed); analogWrite(motorB2, 0); } // Inicia o motor com o comando subir void sobe(){ analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed); } // Inicia o motor com o comando parar void parado(){ analogWrite(motorB1, 0); analogWrite(motorB2, 0); } |
As variáveis e funções do Projeto Elevador Arduino dificilmente sofrem alteração uma vez que suas ações são fixas e continuadas, porém para quem deseja, é possível realizar a alteração da velocidade do motor através da seguinte definição:
1 |
int vSpeed = 200; // Define a velocidade do motor |
Ao alterar no início este valor, todos os locais com definição de velocidade serão ajustados automaticamente para o valor expresso. Vale ter cuidado com velocidades muito baixas que podem ser insuficiente uma vez que o motor está atribuído a uma carga com torque parcialmente elevado.
Conclusão
O projeto é facilmente desenvolvido, alguns fatores quanto a instalação dos seus componentes podem ser um pouco confusos uma vez que são diversos conectores envolvidos, porém o código está pronto para uso e com todas as funções prontas, não sendo necessário qualquer tipo de alteração.
Com uma finalidade didática e totalmente interativa, o Projeto Elevador Arduino mostra-se bastante interessante uma vez que para os que aceitarem o desafio, a programação possui uma lógica bastante complexa para realizar corretamente todas as suas funções, excelente para desenvolver os conhecimentos prévios.
Além disto, o Elevador Arduino é um projeto que possibilita diversas outras melhorias, como a inclusão de displays, LEDs, Buzzers e até mesmo dispositivos de reprodução MP3 como o que encontramos no seguinte projeto:
Existem muitas melhorias para incrementar no Projeto Elevador Arduino, vai da criatividade de quem estiver realizando o projeto, se você montou este elevador, teve alguma dificuldade ou tem alguma dica para os demais, não se esqueça de comentar e deixar sua opinião logo abaixo.
Boa noite, encontrei um erro na linha 98 onde if (andar !=4) está sem o parenteses sendo if (andar() !=4), com os parenteses, para dar certo…
Mas mesmo assim não consigo fazer o programa rodar corretamente. Os botões não reconhecem os andares.
Podes me ajudar?
ola boa tarde
eu baixei a programaçao.
apenas tentei fazer a compilaçao antes mesmo de tentar entender e resulta em diversos erros que nao consegui achar.
error: stray ‘\302’ in program
tentei descobri que erro é este e nao achei referencia.
fui comentado as linhas e vao aparecendo outras.
o que esta acontecendo ? podem me ajudar ?
Boa Tarde Jose! Este erro acontece em alguns momentos quando copiamos o código da internet, é possível que haja algum caractere inválido ou algo do tipo, tente copiar o código e passar o mesmo pelo bloco de notas antes de inseri-lo na IDE Arduino.
na fiz tudo isso e ainda nao esta funcionando ele não reconhece os botao pode me ajudar?
Boa tarde Hygor, realmente havia problemas no código, corrigimos no dia de hoje, 31/05/22.
Boa tarde! Montei exatamente como está no tutorial, más ao acionar os botões nada acontece. Alguém poderia me ajudar?
Boa Tarde Israel! Ao configurar o código, tudo estava ok? Não encontrou nenhum erro na hora de gravar? Verifique a instalação dos pinos e também a alimentação do dispositivo se estão ok, principalmente a soldagem no conector P4, que possui 3 pinos e em apenas dois destes irá funcionar.
bom dia , digitei todos os codigos conferi linha por linha , foi identificado umn erro na linha 116 ( parado();
pergunta qual é o erro ai?
desde ja grato
Excellent 😍
bom dia, onde encontro o esquema de ligação dos componentes?
sou iniciante desde ja grato
Olá Agnaldo! Nesta mesma página você encontra tudo o que é necessário para a conclusão do seu projeto, tanto código quanto esquema de ligação.
fiz a montagem td ok, porem o motor fica girando d, as vzes ele muda a rotacao.
Olá Caio! Parece que o elevador não está identificando o imã através dos sensores magnéticos, sugiro verificar se os sensores estão acionando com a aproximação do imã.
Bom dia, montei conforme manual e o trabalho. Rodou mais ele não entende o terrio só fica no 1° andar aí faz 2° e 3° e volta pro primeiro. Não vai pro terrio.
Olá Jonathan! Recomendo verificar a posição do sensor no Arduino, se não está invertida a instalação, acredito que esse possa ser o problema.
Boa tarde, nunca programei a placa de srduino no caso o elevador tem que colocar ridos esse comandos na placa?
Desde ja grato , sou o que se chama de marinheiro de primeira viagem
Olá Agnaldo! Segue um artigo de apoio que auxilia na programação com Arduino: https://www.usinainfo.com.br/blog/como-programar-arduino-gravando-codigos-em-diferentes-modelos-arduino/
Boa tarde , como é feito os trilhos para a cabine? eu fiz todo em mdf que tinha aqui mas o trilho não tive ideia de como fazer
grato pela ajuda
boa tarde, liguei a placa mas o elevador não funcionou , o qUE sera? a placa liga , ja testei os cabos , tudo em ordem
o que pode ser?
Boa tarde Agnaldo, havia um erro no código, revisamos no dia de hoje, já esta corrigido.
bom dia , copiei os códigos mas esta aparecendo um erro na linha 35 PINMODE(MOTORB1, OUTPUT); ja olhei e esta correto ( falo como copiei ) aparece a informação EXIT STATUS 1 PIMODE WAS NOT DECLARED IN THIS SCOPE e ai oque fazer?????
Boa noite, ainda tem este kit elevador para venda?
Boa tarde , sim, acesse o link: https://www.usinainfo.com.br/robotica-educacional/elevador-com-arduino-altum-completo-manual-de-montagem-5845.html
Vcs poderiam revisar o codigo de funcionamento do elevador, pq mesmo copiando o código e colando no bloco de notas está dando erro stray ‘\302’ in program.
Boa tarde Gustavo, realmente havia problemas no código, corrigimos no dia de hoje, 31/05/22.
Não pegou nada troquei até o arduino uno e nada ainda será q pode ser motor
Bom dia Jonathan!
Você pode ir verificando por partes, verificar as conexões, os botões se o Arduino está reconhecendo, depois os sensores magnéticos se estão respondendo conforme o imã se aproxima e por fim a ponte H que controla o motor para movimentar.
Se acha ainda que pode ser o motor, ligue ele com uma fonte externa, entre 3 a 6 volts, pode ser duas pilhas, uma bateria ou ainda diretamente na fonte do projeto, ele deve rotacionar sem problemas indicando seu bom funcionamento.
no meu projeto de elevador, na caixa venho um link pra acessar o blog mas quando eu digitei, peguei um vírus , so gostaria de alertar, não entre no link, melhor ir pelo Google e digitar usinando / blog.
Bom dia!
Nosso envio do kit contempla um manual com as instruções e link para o blog, porém o mesmo não está incorreto e não possui vírus, pode ter acontecido algum erro de digitação do domínio. Caso você tenha problemas pode nos enviar uma imagem do link incorreto em nosso e-mail contato@usinainfo.com.br, informando o seu problema que iremos verificar de forma mais minuciosa.
Montei meu projeto e funciona somente as mudanças de terreo e 1 andar.
Troquei botoes e sensores, tudo funciona, mas colocados nas posiões 2 e 3 não funcionam as subidas e descidas.