Baixe o app para aproveitar ainda mais
Prévia do material em texto
DEQ - Departamento de Eng. Qúımica Projeto de Sistemas Microcontrolados – 6688/02 Prof. Rubens Zenko Sakiyama Engenharia Elétrica Projeto Final: Sistema Embarcado de um Forno Microondas João Vı́tor Alécio Pinheiro RA. 116040 Lucas Iglesias Araujo RA. 113004 Luan Seiti Yugawa Sano RA. 112999 Maringá, 7 de dezembro de 2021 Conteúdo 1 Introdução 2 2 Revisão da Literatura 3 2.1 LiquidCrystal.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Keypad.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3 Materiais e Métodos 8 4 Resultados 16 5 Conclusão 17 1 Introdução Este documento descreve o funcionamento, operação e implementação de um sis- tema embarcado de forno microondas. Para tal, será vista uma descrição dos componentes utilizados e sua relação com o sistema, ou seja, qual função o componente desempenhará, além de diagramas de blocos e fluxogramas para fins didáticos, assim, torna-se mais fácil a compreensão do conteúdo deste artigo. Primeiramente, deve se notar que o sistema descrito neste documento será simu- lado no software de simulação TinkerCAD, baseado em web e dispońıvel em: <https://ww w.tinkercad.com>. Para simulação neste software espećıfico, alguns componentes que in- tegram um forno microondas foram substitúıdos, com devida indicação, pois o simulador não os continha em sua coleção de dispositivos. Os componentes utilizados e as substi- tuições realizadas serão vistas com mais profundidade no tópico Materiais e Métodos. 2 2 Revisão da Literatura Neste tópico, serão vistas as literaturas fundamentais para funcionamento do código do sistema. As informações aqui dispostas são retiradas das documentações das bibliotecas mencionadas. 2.1 LiquidCrystal.h Esta biblioteca permite controle de um display do tipo LCD (Liquid Crystal Display) à partir de uma placa Arduino. Pode operar no modo de 4 bits ou de 8 bits. Seus comandos são: LiquidCrystal() Cria uma variável de tipo LiquidCrystal, comando utilizado para configurar os pinos do display LCD. begin() Inicializa a interface do LCD e especifica as dimensões da tela. Este comando precisa ser utilizado antes de qualquer um abaixo dele, nesta lista. clear() Limpa a tela do LCD e posiciona o cursor na primeira coluna da primeira linha, à esquerda. home() Posiciona o cursor na primeira coluna da primeira linha, à esquerda. 3 setCursor() Escolhe um lugar espećıfico das colunas e linhas do display para posicionar o cursor. write() Escreve um caractere no LCD. print() Escreve texto no LCD. cursor() Indica a posição do cursor utilizando um caractere de underscore ou under- line ( ). noCursor() Não indica a posição do cursor. blink() Exibe o cursor piscando. noBlink() Desliga o cursor piscando. display() Liga o LCD, depois de ser desligado com o comando abaixo. O texto que estava escrito no display permanece armazenado, mesmo depois de desligada a tela. noDisplay() Desliga a tela do LCD. 4 scrollDisplayLeft() Passa o conteúdo da tela do LCD um espaço para a esquerda. scrollDisplayRight() Passa o conteúdo da tela do LCD um espaço para a direita. autoscroll() O LCD passa o conteúdo de sua tela tantos espaços para a esquerda ou direita, dependendo da forma de escrita do texto, automaticamente quando necessário. noAutoscroll() Desabilita a função descrita acima. leftToRight() Escolhe a direção em que o texto será escrito. Desta forma, o texto será escrito da maneira convencional, da esquerda para a direita. rightToLeft() Escolhe a direção em que o texto será escrito. Desta forma, o texto será escrito da direita para a esquerda. createChar() Cria um caractere especial para poder ser exibido na tela do LCD. Pode-se criar até 8 (oito) caracteres em uma matriz de 5x8 pixels. 5 2.2 Keypad.h A biblioteca Keypad.h é uma biblioteca para uso de teclados em estilo matricial em uma placa Arduino. Abaixo, estão dispostos seus comandos. Keypad(makeKeymap(userKeymap), row[], col[], rows, cols) Inicia um teclado numérico, onde row[] serão os pinos das linhas e col[] serão os pinos das colunas. O número de pinos de linhas multiplicado pelo número de linhas de colunas indica quantas teclas o teclado terá. void begin(makeKeymap(userKeymap)) Inicializa um mapa de teclas interno equivalente ao mapa de teclas do esco- lhido pelo usuário. char waitForKey() Este comando espera indefinidamente até que alguma tecla seja pressionada. Bloqueia todo o funcionamento do código até que um tecla seja pressionada. O tempo indefinido pelo qual este comando aguarda entrada do usuário é infinito se não houverem entradas inseridas pelo teclado. char getKey() Recebe e retorna a tecla pressionada, se alguma for. KeyState getState() Retorna o estado atual de qualquer uma das teclas. boolean keyStateChanged() Informa quando uma tecla passa de um estado para outro, seja de ociosa para pressionada ou o contrário. 6 setHoldTime(unsigned int time) Seleciona o tempo, em milisegundos, que o usuário deverá manter a tecla pressionada até que o sistema entenda a tecla em questão como em estado de HOLD (segurada). setDebounceTime(unsigned int time) Seleciona o tempo que o teclado aguardará depois de um d́ıgito ser pressio- nado até que possa receber outro d́ıgito. addEventListener(keypadEvent) Ativa um evento caso o teclado seja usado. Comandos de múltiplas teclas pressionadas ao mesmo tempo Com uma nova atualização, hoje a biblioteca Keypad.h permite que o usuário aperte mais de uma tecla por vez. Como em cenário de simulação é imposśıvel que isso ocorra, esta parte é considera leitura complementar. Os comandos que envolvem múltiplas teclas pressionadas ao mesmo tempo são: Key key[LIST MAX] bool getKeys() bool isPressed(char keyChar) int findInList(char keyChar) 7 3 Materiais e Métodos Os materiais utilizados se resumem ao conjunto de simulador e peças, compo- nentes e dispositivos empregados no sistema embarcado do forno microondas. Desta forma, totaliza-se os componentes reais: magnetron, ventilador, sensor da porta (switch), motor do prato, teclado matricial 4x3, placa Arduino, display LCD, dois módulos relé para arduino, buzzer e cabeamento. Para os componentes simulados, a explicação das substituições realizadas no ambiente simulado serão descritas em seguida. O objetivo do sistema completo é esquentar comida, atuando como um forno microondas, um eletrodoméstico já conhecido pela maioria dos brasileiros. O magnetron é responsável por gerar as microondas e o ventilador por dispersá-las no ambiente interno do forno. O motor do prato é responsável por girar o prato, para que a comida inserida no forno esquente de uma maneira mais uniforme. O sensor da porta é um switch simples que detecta quando a porta está fechada ou aberta. O buzzer apita para avisar o usuário do sistema do estado da operação do forno, enquanto o display LCD exerce função de exibir para o usuário os dados inseridos e o estado atual do forno microondas. O teclado matricial é a forma de entrada de dados, ponte de comunicação entre usuário e sistema. Além de tudo isso, há, ainda, a placa Arduino, que processará todos esses dados e controlará o sistema. A fim de cumprir estes objetivos, foi projetado um circuito (Figura 1) em que os componentes principais: o motor, a lâmpada, o ventilador e o magnetron são alimentados pela tensão de rede e seu funcionamento é controlado pelos relés 1 e 2. O relé 2 serve para acionar apenas a lâmpada interna do forno, enquanto o relé 1 aciona os componentes restantes, responsáveis, em conjunto, pelo aquecimento do alimento. 8 Figura 1: Diagrama de blocos do sistema. O sinal de acionamento dos relés, por sua vez, provém do microcontrolador e é determinado pelas entradas do usuário. Por exemplo, ao digitar 10 e CONFIRMAno teclado matricial, é gerada uma temporização de 10 segundos em que os dois relés são acionados. Durante este peŕıodo, o display LCD mostra a contagem até que ela chegue até zero. No final do processo, os relés são desligados e o buzzer é acionado, alertando o usuário que o alimento está pronto. Outro ponto importante para o funcionamento do forno é a interrupção do pro- 9 cesso caso a porta seja aberta. Para isso foi implementado um sensor que retorna sinal 1 caso ela esteja fechada. Esse sinal é utilizado para controlar o fluxo do programa principal a partir de uma interrupção externa. Figura 2: Montagem do circuito no simulador. 10 A fim de simular o sistema embarcado no Tinkercad, a tensão de entrada de 127 V CA foi substituida por uma fonte CC de 5 V. Os motores CA também foram substituidos por motores CC e o magnetron, por uma lâmpada. Outra substituição feita foi utilizar um relé comum ao invés do módulo relé para Arduino, no entanto, ao pensar no circuito real, considera-se a utilização do módulo com canal 5 V. Ainda que sejam feitas essas modificações, a lógica de controle é a mesma, já que o Arduino age apenas controlando o fluxo de corrente nestes componentes a partir dos relés. O controle das entradas e sáıdas do sistema foi realizado a partir do software implementado no Arduino e seu código fonte foi anexado com este trabalho escrito. A sua lógica de funcionamento está descrita pelo fluxograma a seguir (Figura 3). 11 Figura 3: Fluxograma do software embarcado. 12 A parte central do programa é o condicional switch-case na função loop. É com esse processo que as teclas lidas pela função getKey() da biblioteca Keypad.h são verificadas e as devidas decisões são tomadas. Caso o botão pressionado seja um d́ıgito, o seu valor numérico é armazenado em um array que representa a ordem em que os números são mostrados no display. Para produzir um melhor efeito visual, os outros d́ıgitos são deslocados à esquerda e o novo d́ıgito é inserido no final da sequência. A variável cursor pos, por sua vez, serve para limitar a quantidade de números digitados em quatro. default: //pressionado um numero: 0 1 2 3 4 5 6 7 8 9 if(cursor_pos <4){ tone(buzz_pin, 440, 100); if(!(cursor_pos == 0 && key == ’0’ )){//nao permite digitar 00:00 //adiciona o numero no display e desloca os outros tempo_array[3] = tempo_array[2]; tempo_array[2] = tempo_array[1]; tempo_array[1] = tempo_array[0]; tempo_array[0] = (int)key-48; lcd.setCursor(5,0); lcd.print(tempo_array[3]); lcd.setCursor(6,0); lcd.print(tempo_array[2]); lcd.setCursor(8,0); lcd.print(tempo_array[1]); lcd.setCursor(9,0); lcd.print(tempo_array[0]); cursor_pos++; } 13 Caso o botão CANCELA seja pressionado nesta etapa do programa, a array tempo[ ] é zerada e o display mostrará 00:00. //caso seja pressionado o botao CANCELA tone(buzz_pin, 440, 100); tempo = tempo_array[0]+10*tempo_array[1]+60*tempo_array[2]+600*tempo_array[3]; if(tempo>0){ //zera o timer tempo_array[0]=0; tempo_array[1]=0; tempo_array[2]=0; tempo_array[3]=0; mostra_timer(0); cursor_pos = 0; } break; Por final, caso o botão INICIA seja pressionado, os relés são acionados e é feita uma temporização a partir da função delay(). Nota-se que a partir de condicionais if são checadas se a porta está aberta ou o botão CANCELA é pressionado. Se isso acontecer, o programa é desviado para o inicio da função loop() a partir da diretiva goto. 14 //caso seja pressionado o botao INICIA case ’#’: tone(A5, 440, 100); porta = digitalRead(sensor_porta); tempo = tempo_array[0]+10*tempo_array[1]+ 60*tempo_array[2]+600*tempo_array[3]; tempo_aux = tempo; if(porta==0 || tempo==0){ //verifica se o tempo e zero ou a porta esta aberta goto inicio;// volta para o inicio do loop } //liga os reles digitalWrite(R1_pin,1); digitalWrite(R2_pin,1); //temporizacao for(int i=0;i<tempo_aux;i++){ for(int k=0;k<200;k++){ delay(5); //desliga caso a porta abra ou o botao CANCELA for pressionado if(keypad.getKey()==’*’ || digitalRead(sensor_porta)==0){ digitalWrite(R1_pin,0); digitalWrite(R2_pin,0); goto inicio; //retorna ao inicio do loop } } tempo--; mostra_timer(tempo); } //quando o timer chega a zero os reles sao desligados e o buzzer apita OBSERVAÇÃO: os códigos aqui inseridos são versões resumidas do programa original. Para verificar a lógica de programação final e completa, verifique o arquivo em anexo. 15 4 Resultados Os resultados obtidos são expressados principalmente na forma de um sistema funcional em ambientes de simulação. De acordo com o fluxograma da Figura 2 é que o sistema do forno microondas opera. A Figura 1 exibe o sistema embarcado do forno microondas dentro do ambiente de simulação TinkerCAD. Há, ainda, na Figura 3 um diagrama de blocos das conexões do sistema. As figuras 2 e 3 tem como função principal a didática de explicar o funcionamento do sistema da maneira mais simples posśıvel. O sistema embarcado de forno microondas é operacional, funcional e reage de forma esperada, continuamente e confiavelmente. Figura 4: Sistema embarcado em pleno funcionamento. 16 5 Conclusão Neste documento, foram vistos os componentes utilizados para se fazer um sis- tema embarcado de microondas, bem como o funcionamento do sistema e bibliotecas de comandos que devem ser adicionadas ao Arduino para pleno funcionamento de dois com- ponentes, teclado matricial e display LCD. A partir do resultados obtidos por simulação, podemos afirmar que o projeto cumpriu o que foi proposto, realizando o controle do forno microondas e seus acessórios. 17 Referências LIQUIDCRYSTAL Library. Dispońıvel em: ⟨https://www.arduino.cc/en/Reference/ LiquidCrystal⟩. Acesso em: 29 nov. 2021. Mark Stanley, A. Keypad Library for Arduino. 2009. Dispońıvel em: ⟨https: //playground.arduino.cc/Code/Keypad/⟩. Acesso em: 29 nov. 2021. SERVICE de fornos de microondas. 2019. Dispońıvel em: ⟨https://www.newtoncbraga. com.br/index.php/bancada-de-reparacao/52-artigos-tecnicos/artigos-diversos/ 2990-art410.html⟩. Acesso em: 21 de nov. de 2021. 18 https://www.arduino.cc/en/Reference/LiquidCrystal https://www.arduino.cc/en/Reference/LiquidCrystal https://playground.arduino.cc/Code/Keypad/ https://playground.arduino.cc/Code/Keypad/ https://www.newtoncbraga.com.br/index.php/bancada-de-reparacao/52-artigos-tecnicos/artigos-diversos/2990-art410.html https://www.newtoncbraga.com.br/index.php/bancada-de-reparacao/52-artigos-tecnicos/artigos-diversos/2990-art410.html https://www.newtoncbraga.com.br/index.php/bancada-de-reparacao/52-artigos-tecnicos/artigos-diversos/2990-art410.html Introdução Revisão da Literatura LiquidCrystal.h Keypad.h Materiais e Métodos Resultados Conclusão
Compartilhar