Robô sem fio de monitoramento de gás industrial e controlado por teclado

Robô sem fio de monitoramento de gás industrial e controlado por teclado

Nas fábricas e indústrias é comum lidar com o uso de gases nocivos e venenosos. Existem situações em que a concentração e o volume deste tipo de gases precisam ser monitorados em um aparelho. Dado que estes gases podem ser prejudiciais aos seres humanos, não é seguro empregar seres humanos para tais tarefas. Assim, robôs podem ser utilizados para monitorar diferentes parâmetros relacionados ao uso de tais gases em um aparelho ou câmara cheia de gás. Neste tutorial, é projetado um robô sem fio que pode se mover dentro de uma câmara ou poço e detectar o nível de concentração do gás no local.
Os módulos X-bee são usados ​​para conectar o robô sem fio com um controle remoto. X-bee é um módulo Zigbee da Digi International. Zig-Bee é uma tecnologia de comunicação sem fio padrão que transfere dados em bandas de rádio ISM. Opera em 2,4 GHz em todo o mundo e em outras frequências ISM em países selecionados. O protocolo de comunicação é comumente usado para criar redes de área pessoal para aplicações como automação residencial, redes de escritório sem fio e redes de dados baseadas em sensores. Os módulos Zig-Bee são comumente usados ​​para conectar dispositivos embarcados de baixo consumo de energia que precisam operar em uma área pequena com baixas taxas de dados. Um módulo Zig-Bee operando na banda de 2,4 GHz tem taxa de dados de 250 Kbps. Com o X-bee usado para conectividade sem fio, o robô pode ser movido de 30 a 100 metros de distância do controle remoto. O controle remoto possui um teclado que permite controlar o movimento do robô e enviar instruções para realizar medições do nível de concentração. Há também um display LCD no controle remoto que permite monitorar as medições realizadas. O robô é um robô que se move em superfície com um rodízio e um corpo de duas rodas. O robô está equipado com sensores de gás MQ-135 e MQ-7 para monitorar a presença e concentração de gases. O MQ-7 é usado para medir a concentração de monóxido de carbono no ar, enquanto o MQ-135 é usado para monitorar a concentração de gases combustíveis. O robô é acionado sobre duas rodas com um IC de driver de motor L293D usado para controlar os motores CC com engrenagens conectadas. O módulo X-bee é usado para conectar o robô ao controle remoto.
Protótipo de robô Arduino sem fio controlado por teclado baseado em X-bee para monitoramento de gás
Fig. 1: Protótipo de robô Arduino sem fio controlado por teclado baseado em X-bee para monitoramento de gás
Componentes necessários:
Lista de componentes necessários para robô Arduino sem fio controlado por teclado baseado em X-bee para monitoramento de gás
Fig. 2: Lista de componentes necessários para o robô Arduino sem fio controlado por teclado baseado em X-bee para monitoramento de gás
Diagrama de bloco :
O circuito do controle remoto do robô pode ser representado pelo seguinte diagrama de blocos –
Diagrama de blocos de controle remoto para robô Arduino sem fio com monitoramento de gás controlado por teclado baseado em X-bee
Fig. 3: Diagrama de blocos de controle remoto para robô Arduino sem fio de monitoramento de gás controlado por teclado baseado em X-bee

O circuito de controle do robô (montado nele) pode ser representado pelo seguinte diagrama de blocos –

Diagrama de blocos de circuito de controle para robô Arduino sem fio de monitoramento de gás controlado por teclado baseado em X-bee
4: Diagrama de blocos do circuito de controle para robô Arduino sem fio de monitoramento de gás controlado por teclado baseado em X-bee
Conexões de Circuito –
Existem dois circuitos utilizados no projeto – um é o circuito de controle remoto e o outro é o circuito de controle montado no robô. O circuito remoto é construído usando Arduino Mega, teclado 4X3, LCD de 16X2 caracteres e módulo X-bee. O circuito de controle do robô montado em seu corpo é composto por Arduino UNO, sensor MQ-135, sensor MQ-7, módulo X-bee, IC de driver de motor L293D e motores DC redutores.
O circuito remoto tem as seguintes conexões de circuito –
Imagem do controle remoto para robô Arduino sem fio de monitoramento de gás controlado por teclado baseado em X-bee
5: Imagem do controle remoto para robô Arduino sem fio de monitoramento de gás controlado por teclado baseado em X-bee

Arduino Mega – Arduino Mega é uma das placas microcontroladoras disponíveis na plataforma Arduino. Esta placa controladora possui Atmega 1280 como MCU sentado e possui memória flash de 128 Kb, EEPROM de 4 Kb, SRAM de 8 Kb, interfaces UART, SPI e I2C integradas. A placa possui 56 pinos GPIO, dos quais 15 pinos podem ser usados ​​para saída PWM de 8 bits. Existem 16 pinos de entrada analógica disponíveis na placa também. Esta é uma placa controladora maior disponível no Arduino e geralmente é usada quando o número de sensores ou componentes necessários para a interface é grande. No circuito remoto, 15 pinos da placa são utilizados, onde 6 pinos são usados ​​para fazer a interface do LCD de caracteres, 7 pinos são usados ​​para fazer a interface do teclado e os pinos Rx e Tx são usados ​​para conectar com o módulo X-bee.

Teclado 4X3 – Um teclado 4X3 é usado no projeto. O teclado possui 12 botões dispostos em 4 linhas e 3 colunas. Este é um teclado numérico que serve para controlar o movimento do robô e enviar instruções para medir a concentração do gás. As linhas e colunas do teclado fazem interface com o Arduino no seguinte esquema –
Tabela de listagem de conexões de circuito entre Arduino Mega e teclado
Fig. 6: Tabela listando as conexões do circuito entre o Arduino Mega e o teclado
Esse teclado matricial opera conduzindo entre uma única linha e coluna ao pressionar um botão. Qualquer uma das linhas ou colunas é transformada em saída digital, enquanto as outras restantes (linhas ou colunas) são transformadas em entrada digital. Suponha que as linhas sejam definidas como saída digital e as colunas como entrada digital. Agora, o controlador percorre as linhas geradas na saída digital, configurando-as em HIGH ou LOW uma após a outra e verifica simultaneamente a recepção da mesma lógica nas colunas. Assim, por vez, uma linha única é definida como HIGH ou LOW enquanto outras linhas são definidas inversamente e ao pressionar uma tecla a mesma lógica é recebida em uma coluna única. Esta combinação única de linha e coluna permite identificar a tecla pressionada.
LCD de caracteres 16X2 – O display LCD 16X2 é utilizado para monitorar os valores dos sensores enviados pelo robô sem fio. Ele faz interface com o Arduino MEGA conectando seus pinos de dados D4 a D5 com os pinos 6 até 3 do controlador, respectivamente. Os pinos RS e E do LCD estão conectados aos pinos 13 e 12 do controlador, respectivamente. O pino RW do módulo LCD está conectado ao terra. As conexões do circuito do LCD de caracteres com a placa Arduino estão resumidas na tabela a seguir – Tabela de listagem de conexões de circuito entre Arduino Uno e LCD de caracteres
Fig. 7: Tabela listando conexões de circuito entre Arduino Uno e Character LCD
Módulo X-bee – X-Bee é um módulo Zigbee da Digi internacional. Zigbee é um módulo de comunicação sem fio que utiliza o padrão IEEE 802.15.4. O 802.15.4 é um padrão IEEE para aplicações de baixa potência de radiofrequência. É usado em muitos produtos para funcionalidade de comunicação sem fio. Ele pode ser usado como transmissor e receptor. Ele usa comunicação serial para enviar e receber dados. Possui duas séries, série 1 e série 2. A série 1 é comparativamente fácil de usar e é recomendada para iniciantes. Neste projeto é usado o módulo X-bee Série 1. O módulo Zigbee Série 1 não pode funcionar em rede mesh. Isso significa que ele não pode falar com mais de um Zigbee ao mesmo tempo. Aprender mais sobre Tecnologia Zigbee.
O X-bee série 1 é um módulo de 20 pinos com a seguinte configuração de pinos –
Tabela de listagem de configuração de pinos do módulo Xbee
Fig. 8: Tabela listando a configuração dos pinos do Módulo Xbee
O módulo pode ser conectado a uma placa controladora usando UART. O módulo pode ser conectado ao Arduino conectando seu pino DOUT (UART Data Out) ou TX com o pino RX do Arduino e DIN (UART Data In) ou pino RX com o pino TX do Arduino. Os pinos VCC e Terra do módulo devem ser conectados ao VCC comum e ao aterramento. O módulo X-Bee usado no circuito remoto é configurado para funcionar tanto como transmissor de dados RF quanto como receptor. O controle remoto precisa transmitir comandos de controle enquanto precisa receber dados do sensor do robô. Fonte de alimentação – Todos os componentes do circuito remoto requerem uma fonte de 5V DC. A placa Arduino é alimentada com 5V por um cabo USB. Os outros componentes consomem energia do pino Vout de 5V da placa Arduino. O circuito de controle montado no robô é montado a partir dos seguintes componentes –
Imagem do circuito de controle para robô Arduino sem fio de monitoramento de gás controlado por teclado baseado em X-bee
Fig. 9: Imagem do circuito de controle para robô Arduino sem fio de monitoramento de gás controlado por teclado baseado em X-bee

Arduino UNO – Arduino UNO é uma das placas de prototipagem mais populares. Ele é usado com frequência em aplicações robóticas porque é pequeno e repleto de recursos avançados. A placa vem com carregador de inicialização Arduino integrado. É uma placa controladora baseada em Atmega 328 que possui 14 pinos GPIO, 6 pinos PWM, 6 entradas analógicas e interfaces UART, SPI e TWI integradas. Neste circuito de controle são utilizados 8 pinos da placa. Existem 4 pinos usados ​​para conectar com os pinos de entrada do IC do driver do motor. Os dois pinos RX e TX da placa são usados ​​para fazer a interface do módulo X-bee e estabelecer comunicação serial via USART. Os pinos de entrada analógica A0 e A1 são usados ​​para fazer a interface dos sensores MQ-7 e MQ-135. Saiba mais sobre o Arduino UNO em aqui.

Sensor de gás MQ-7 – MQ-7 é um sensor de monóxido de carbono usado para medir a concentração de gás CO no ar entre a faixa de 20 PPM a 2.000 PPM. O sensor usa SnO2 como material sensível que possui baixa condutividade em ar limpo, mas possui alta condutividade quando a concentração de monóxido de carbono é maior no ar. O sensor é usado como alarme de gás CO industrial e detector portátil de gás CO.
Gráfico mostrando a curva de sensibilidade do sensor MQ-7 CO
Fig. 10: Gráfico mostrando a curva de sensibilidade do sensor MQ-7 CO

A partir da curva de sensibilidade do sensor, pode-se observar que a resistência do sensor diminui à medida que a concentração do gás alvo aumenta em PPM, enquanto para o ar limpo sua resistência permanece constante. No gráfico, Rs é a resistência no gás alvo e Ro é a resistência no ar limpo. O gráfico é mostrado para os gases CO, CH4 e H2.

Gráfico mostrando a curva de saída de tensão analógica do sensor MQ-7 CO
Fig. 11: Gráfico mostrando a curva de saída de tensão analógica do sensor MQ-7 CO
Pode-se observar que à medida que a concentração do gás alvo aumenta, a saída de tensão também aumenta. O gráfico acima foi obtido para uma resistência de carga de 4,7 KΩ. O sensor possui quatro terminais – Terra, VCC, Saída Digital e Saída Analógica. Os terminais VCC e Terra do sensor são conectados ao VCC e Terra comuns. O pino de saída analógica do sensor está conectado ao pino A0 do Arduino. A tensão de saída analógica do sensor pode ser assumida diretamente proporcional à concentração de gás CO em PPM sob condições padrão. A tensão analógica é detectada pelo sensor e convertida em um valor digital na faixa de 0 a 1023 pelo canal ADC integrado do controlador. O valor digitalizado é, portanto, igual à concentração de gás em PPM.
Sensor MQ-135 – MQ-135 é outro sensor de gás usado para medir a concentração de gases combustíveis. Possui menor condutividade em ar limpo, enquanto sua condutividade aumenta com a presença de gases combustíveis no ar. O sensor é altamente sensível a gases como amônia, sulfeto e vapor de benzeno. O sensor pode detectar a concentração de gases combustíveis na faixa de 100 PPM a 1000 PPM. Gráfico mostrando a curva de sensibilidade do sensor MQ-135
Fig. 12: Gráfico mostrando a Curva de Sensibilidade do Sensor MQ-135
A partir da curva de sensibilidade do sensor, pode-se observar que a resistência do sensor diminui à medida que a concentração do gás alvo aumenta em PPM, enquanto para o ar limpo sua resistência permanece constante. No gráfico, Rs é a resistência no gás alvo e Ro é a resistência no ar limpo. O gráfico é mostrado para Dióxido de Carbono, Monóxido de Carbono e Amônia. A sensibilidade deste sensor pode ser ajustada e calibrada para detectar um nível de concentração específico de um gás alvo. O sensor possui quatro terminais – Terra, VCC, Saída Digital e Saída Analógica. Os terminais VCC e Terra do sensor são conectados ao VCC e Terra comuns. O pino de saída analógica do sensor está conectado ao pino A1 do Arduino. A tensão de saída analógica do sensor pode ser assumida diretamente proporcional à concentração de gás CO2 em PPM sob condições padrão. A tensão analógica é detectada pelo sensor e convertida em um valor digital na faixa de 0 a 1023 pelo canal ADC integrado do controlador. O valor digitalizado é, portanto, igual à concentração de gás em PPM. Módulo X-Bee – O módulo X-Bee utilizado no circuito de controle do robô também está configurado para funcionar tanto como receptor quanto como transmissor de dados RF. O módulo faz interface com o Arduino conectando seu pino DOUT (UART Data Out) ou TX com o pino RX do Arduino e DIN (UART Data In) ou pino RX com o pino TX do Arduino. Os pinos VCC e Terra do módulo são conectados ao VCC comum e ao aterramento. IC do driver do motor L293D – O L293D é um circuito integrado (IC) de driver de motor com ponte H dupla. Os drivers do motor atuam como amplificadores de corrente, pois recebem um sinal de controle de baixa corrente e fornecem um sinal de corrente mais alta. Este sinal de corrente mais alto é usado para acionar os motores. Possui 16 pinos com a seguinte configuração de pinos:

Tabela de listagem de configuração de pinos do IC do driver do motor L293D

Fig. 13: Tabela listando a configuração dos pinos do IC do driver do motor L293D

Existem dois motores DC usados ​​para fazer o carro robótico. Os motores DC fazem interface entre os pinos 3 e 6 e os pinos 14 e 11 do IC do driver do motor.
O IC L293D controla os motores DC de acordo com as seguintes tabelas verdade:
Tabela verdade do IC do driver do motor L293D
Fig. 14: Tabela verdade do IC do driver do motor L293D
Os pinos 4, 5, 13 e 12 do L293D são aterrados enquanto os pinos 1, 16 e 9 estão conectados a 5 Vcc e o pino 8 está conectado a 12 Vcc. Os pinos 15, 2, 7 e 10 do IC do driver do motor estão conectados aos pinos 5, 2, 3 e 4 da placa Arduino. O motor DC conectado à roda direita está conectado aos pinos 11 e 14, enquanto o motor conectado à roda esquerda está conectado aos pinos 3 e 6 do IC do driver do motor. Os pinos de habilitação do IC (pinos 1 e 9) são conectados fisicamente à fonte de 5 Vcc.
Motores DC engrenados – Neste robô, motores redutores DC de 12V são acoplados às rodas. Os motores DC com engrenagens estão disponíveis com uma ampla faixa de RPM e Torque, o que permite que um robô se mova com base no sinal de controle que recebe do IC do driver do motor.
Fonte de energia – O Arduino UNO, módulo X-Bee, sensores de gás e pinos de alimentação lógica do IC do driver do motor requerem 5V DC, enquanto o pino de alimentação do IC do driver requer 12V DC. Uma bateria de 12 V é usada para alimentar o robô. A alimentação da bateria é regulada para 5V e 12V usando CIs 7805 e 7812. O pino 1 de ambos os CIs reguladores de tensão está conectado ao ânodo da bateria e o pino 2 de ambos os CIs está conectado ao terra. As respectivas saídas de tensão são extraídas do pino 3 dos respectivos CIs reguladores de tensão. Um LED junto com um resistor pull-up de 10K Ω também é conectado entre o terra comum e o pino de saída para obter uma dica visual da continuidade da alimentação. Apesar de usar bateria de 12 V, o 7812 é usado para fornecer uma alimentação regulada e estável ao IC do driver do motor.
Como funciona o circuito –
À medida que a bateria é acoplada ao robô, ele se prepara para receber comandos do controle remoto. O controle remoto é alimentado conectando-o a uma conexão USB ou a uma fonte regulada de 5 V de uma bateria. À medida que o controle remoto é ligado, algumas mensagens iniciais piscam nele indicando a aplicação do projeto. Do controle remoto, os comandos podem ser transmitidos pressionando as teclas do teclado. As seguintes chaves são atribuídas para as respectivas tarefas no projeto –
Tabela listando atribuições de teclas remotas para robô
Fig. 15: Tabela listando atribuições de teclas remotas para o Robô
Quando o usuário pressiona uma tecla, um comando de string é passado pelo controle remoto para o circuito de controle do robô usando a interface X-bee. Os seguintes caracteres de string são passados ​​pelo circuito remoto para o circuito receptor do robô ao pressionar as respectivas teclas –
Tabela listando strings de comando para controle remoto do robô
Fig. 16: Tabela listando sequências de comandos para controle remoto do robô
As strings de comando são lidas pela placa Arduino do circuito receptor com a ajuda de outro módulo X-bee. Ao receber um comando, a placa Arduino o compara com as strings de comando mencionadas acima e altera a lógica digital nos pinos conectados aos pinos de entrada do IC do driver do motor para realizar a operação desejada. O robô é movido para frente, para trás, para a esquerda ou para a direita implementando a seguinte lógica de entrada nos pinos do driver do motor –
Tabela lógica do IC do driver do motor L293D para o robô Arduino
Fig. 17: Tabela lógica do IC do driver do motor L293D para o robô Arduino
Os pinos de entrada do IC do driver do motor são conectados aos pinos do Arduino e alterando a lógica digital nos pinos do Arduino, a respectiva lógica é implementada nos pinos de entrada do IC do driver do motor.
Assim, o usuário pode navegar o robô até o local onde deverá medir os níveis de gás. Assim que o robô chegar a esse ponto, o usuário precisa pressionar a tecla 1 ou 3 para passar o comando de medição da concentração de CO ou CO2 respectivamente. Quando o comando para medir a concentração de gás do sensor MQ-7 ou MQ-135 é recebido, a placa Arduino detecta a tensão no pino A0 ou A1 respectivamente. A tensão é convertida em uma leitura digital usando o canal ADC integrado e enviada como string de volta ao circuito remoto. O circuito remoto recebe o nível de gás medido como dados seriais do módulo X-bee. O esboço do circuito remoto do Arduino converte essa string em um valor inteiro e a exibe no display LCD.
Imagem do robô Arduino sem fio controlado por teclado baseado em X-bee para monitoramento de gás
Fig. 18: Imagem do robô Arduino sem fio controlado por teclado baseado em X-bee para monitoramento de gás

Para ativar a conexão wireless entre o robô e o circuito remoto, é importante configurar os módulos X-Bee em ambos os lados. O aplicativo de terminal CoolTerm é usado para configurar os módulos X-Bee. Para fazer com que o PC se comunique diretamente com o Xbee, até mesmo a placa Arduino pode ser usada removendo o IC do controlador ou um simples esboço pode ser carregado nas placas Arduino, o que torna o Xbee habilitado para se comunicar diretamente com o computador e não com a placa Arduino . Primeiramente as conexões do circuito entre o módulo X-Bee e o Arduino devem ser feitas conforme mencionado acima.

Agora siga as seguintes etapas –
Abra o aplicativo CoolTerm e navegue até conexão -> opções -> porta serial e selecione a porta COM. Defina a taxa de transmissão e vá para a opção Terminal e marque a caixa de seleção Eco local para exibir os comandos digitados e clique em OK para salvar as alterações.
Captura de tela do aplicativo CoolTerm
Fig. 19: Captura de tela do aplicativo CoolTerm
Captura de tela das opções de conexão no aplicativo Coolterm
Fig. 20: Captura de tela das opções de conexão no aplicativo Coolterm
Para configurar o X-Bee, os seguintes comandos AT devem ser usados.
Primeiro faça o X-Bee entrar em modo de comando digitando +++ no terminal, quando estiver OK, siga com os outros comandos AT
Em primeiro lugar, os rádios XBEE operam apenas a uma determinada taxa de transmissão, que é o número de bits por segundo que o X-Bee pode enviar. Um X-Bee totalmente novo tem taxa de transmissão padrão de 9600 bps, o que é bastante lento. A taxa de transmissão pode ser alterada alterando o registro ATBD. Ambos os módulos X-Bee devem ter a mesma taxa de transmissão para se comunicarem entre si. As taxas de transmissão disponíveis (e o valor ATBD correspondente) são as seguintes –

Tabela listando comandos ATBD para diferentes taxas de transmissão

Fig. 21: Tabela listando comandos ATBD para diferentes taxas de transmissão

Portanto, para definir a taxa de transmissão em 9600, o seguinte comando deve ser passado –
ATBD3
O próximo parâmetro importante é o ID da rede de área pessoal. Este é um número compartilhado entre cada XBEE em uma rede. Aqui, existem apenas 2 módulos X-Bee, mas pode haver muitos módulos X-Bee em uma rede (para os quais os módulos X-Bee Série 2 devem ser usados). Os módulos X-Bee em redes diferentes não “vêem” uns aos outros. O PAN padrão é 3332, portanto evite usar esse número. O PAN ID é armazenado no registro ATID. O registro pode ser alterado passando o seguinte comando –
ATID1001
Uma vez que ambos os módulos X-Bee estejam na mesma rede, cada um deles deve receber um número de endereço indicado pelo registro ATMY. O endereço de destino também pode ser definido, que é o número de endereço com o qual se deve comunicar e é indicado pelo registro ATDL (para destino baixo, não há necessidade de usar os bytes altos se os números de endereço tiverem menos de 16 bits de comprimento). Um exemplo de configuração de dois módulos X-Bee que se comunicarão diretamente entre si a 38,4 kbps pode ser feito passando os seguintes comandos –
ATMY10
ATDL11
Portanto, ambos os módulos X-Bee são configurados passando os seguintes comandos AT –
XBEE1:
ATID1001
ATMY10
ATDL11
ATBD3
XBEE2:
ATID1001
ATMY11
ATDL10
ATBD3
Uma coisa importante a notar é que as alterações feitas são armazenadas na memória temporária. se os módulos X-Bee forem desligados, as configurações serão perdidas. Envie ATWR para gravar as alterações na memória não volátil, para que não sejam perdidas durante o desligamento.
Captura de tela do aplicativo CoolTerm mostrando comandos AT passados ​​para o módulo Xbee
Fig. 22: Captura de tela do aplicativo CoolTerm mostrando comandos AT passados ​​para o módulo Xbee
Uma vez configurados os módulos X-Bee, o esboço do Arduino para o circuito remoto e o circuito receptor pode ser carregado na respectiva placa controladora.
Verifique o esboço do Arduino de ambos os controladores laterais para saber como as placas Arduino gerenciam toda a operação em coordenação e fornecem inteligência de software tanto para o circuito remoto quanto para o circuito de controle do robô.
Guia de programação –
Programa de controle remoto: A placa-alvo para este programa é o Arduino MEGA. O código Arduino para o controle remoto importa primeiro LiquidCrystal.h para lidar com o display LCD e Keypad.h para lidar com a entrada do teclado. As variáveis ​​para indicar o número de linhas e colunas no teclado matricial são definidas e um objeto do tipo LCD é instanciado. As teclas do teclado matricial são representadas como uma matriz multidimensional e um objeto de teclado é instanciado. A função setup é chamada na qual a taxa de transmissão para comunicação serial com o módulo X-bee é definida como 9600 e o LCD é inicializado no modo LCD de 16X2 caracteres usando o método start no objeto LCD. Algumas mensagens iniciais piscam no display LCD indicando a aplicação do projeto.
Captura de tela da inicialização no código Arduino para robô Arduino de monitoramento de gás baseado em Xbee
Fig. 23: Captura de tela da inicialização no código Arduino para robô Arduino de monitoramento de gás baseado em Xbee
A função loop é chamada na qual o pressionamento de tecla é detectado usando o método useKey do objeto Keypad. A tecla pressionada é armazenada em uma variável e comparada com as teclas mencionadas na tabela acima usando instruções if. Para cada tecla pressionada, uma única sequência de caracteres é passada ao módulo X-bee para transmissão usando a função println . As funções gravam o caractere string no buffer serial do qual ele é transmitido via módulo X-bee.
Captura de tela da função Loop no código Arduino para robô Arduino de monitoramento de gás baseado em Xbee
Fig. 24: Captura de tela da função de loop no código Arduino para robô Arduino de monitoramento de gás baseado em Xbee
Na função loop , ao pressionar a tecla 1 ou 3 envia o comando para medir a concentração do gás CO ou CO2 respectivamente. O comando de string usado para medição de gás CO é 'C' enquanto o comando de string usado para medição de gás CO2 é 'A'. A concentração de gás é recebida como um valor de string do módulo X-bee que é convertido em um valor inteiro usando a função atoi e é exibido na tela LCD.
Captura de tela da função Loop no código Arduino para robô Arduino de monitoramento de gás baseado em Xbee
Fig. 25: Captura de tela da função de loop no código Arduino para robô Arduino de monitoramento de gás baseado em Xbee
Isso completa o esboço do Arduino no circuito remoto. Por favor, verifique o esboço completo na seção de código.
Programa de circuito de controle do robô: – A placa-alvo para este esboço é o Arduino UNO. O código do Arduino define primeiro variáveis ​​que representam as conexões dos pinos do Arduino com os pinos de entrada do IC do driver do motor. Uma variável é declarada para armazenar o valor do sensor e uma variável é declarada para armazenar a mensagem contendo a leitura do sensor. As funções para mover o robô em diferentes direções são declaradas. Isso é seguido pela função setup que deve ser executada uma vez quando o robô é ligado. Na função setup , a taxa de transmissão para comunicação serial com o módulo X-bee é definida como 9600 e os pinos conectados ao IC do driver do motor são configurados como saída digital usando a função pinMode .
Captura de tela da inicialização no código Arduino do lado do robô
Fig. 26: Captura de tela da inicialização no código Arduino do lado do robô
A função loop é chamada e verifica continuamente os dados seriais recebidos. Se os dados seriais estiverem disponíveis, os dados são lidos usando a função serial.read e armazenados em uma variável. Em seguida, os dados armazenados são verificados com as condições mencionadas. Então, com relação às condições, as respectivas funções são chamadas para mover o robô ou medir a concentração de gás dos sensores MQ-7 ou MQ-135.
Captura de tela da função Loop no código Arduino do lado do robô
Fig. 27: Captura de tela da função de loop no código Arduino do lado do robô
Quando o comando é recebido para medir a concentração de gás, os valores são medidos utilizando a função analogRead e o valor medido é enviado ao circuito remoto em forma de string via módulo X-bee. Quando o comando para mover o robô é recebido, a lógica digital nos pinos de entrada do IC do driver do motor é alterada para mover o robô na respectiva direção.
Isso completa o esboço do Arduino para o circuito de controle do robô. Confira o esboço completo na seção de código.

Código fonte do projeto

###



//Program to
 
#include 

#include 

const byte ROWS = 4;  //four rows

const byte COLS = 3;  //four columns

LiquidCrystal lcd(13, 12, 6, 5, 4, 3);

char hexaKeys(ROWS)(COLS) = {

  {'1','2','3'},

  {'4','5','6'},

  {'7','8','9'},

  {'*','0','#'}

};

byte rowPins(ROWS) = {41, 43, 45, 47};               //connect to the row pinouts of the keypad

byte colPins(COLS) = {49, 51, 53};                   //connect to the column pinouts of the keypad

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);   //initialize an instance of class NewKeypad

void setup 

{

  Serial.begin(9600);

  lcd.begin(16, 2);


  lcd.setCursor(0,0); 

  lcd.print("Engineers Garage");

  lcd.setCursor(0,1);

  lcd.print("               "); 

  delay(3000);

  lcd.setCursor(0,0);

  lcd.print("INDSL MONITORING");

  lcd.setCursor(0,1);

  lcd.print(" WIRELESS ROBOT");  

  delay(3000); 

}

  

void loop 

{

  char customKey = customKeypad.getKey ;  

  

  if(customKey == '2')

  {

        Serial.println("F");

        lcd.clear ;

        lcd.setCursor(0, 0);

        lcd.print("<--Direction-->");

        lcd.setCursor(0, 1);

        lcd.print("    FORWARD");

  }

  

   if(customKey == '8')

  {

        Serial.println("B");

        lcd.clear ;

        lcd.setCursor(0, 0);

        lcd.print("<--Direction-->");

        lcd.setCursor(0, 1);

        lcd.print("   BACKWARD");

  }


  if(customKey == '4')

  {

        Serial.print("L");

        lcd.clear ;

        lcd.setCursor(0, 0);

        lcd.print("<--Direction-->");

        lcd.setCursor(0, 1);

        lcd.print("     LEFT");

  }

  

  if(customKey == '6')

  {

        Serial.println("R");

        lcd.clear ;

        lcd.setCursor(0, 0);

        lcd.print("<--Direction-->");

        lcd.setCursor(0, 1);

        lcd.print("     RIGHT");

  }

  

  if(customKey ==  '5')

  {

        Serial.println("S");

        lcd.clear ;

        lcd.setCursor(0, 0);

        lcd.print("<--Direction-->");

        lcd.setCursor(0, 1);

        lcd.print("     STOP");

  }     

  

  if(customKey ==  '1')

  {

        Serial.println("C");

        lcd.clear ;

        lcd.setCursor(0, 0);

        lcd.print("  CarbonMonoxide");

        lcd.setCursor(0, 1);

        lcd.print("   Reading"); 

        delay(500);

        char buffer  = {' ',' ',' ',' ',' '};

        while (!Serial.available );

        //when serial is available read the data till newline and store to buffer

        Serial.readBytesUntil('n', buffer, 10);

        //converting the charcter to integer

        int incomingValue = atoi(buffer);

       // Serial.println(incomingValue);

        lcd.clear ;

        lcd.setCursor(0, 0);

        lcd.print("Measured value");

        lcd.setCursor(0, 1);

        lcd.print(incomingValue);

  }     

  if(customKey == '3')

    {

        Serial.println("A");

        lcd.clear ;

        lcd.setCursor(0, 0);

        lcd.print("  AirQuality");

        lcd.setCursor(0, 1);

        lcd.print("   Reading");

        delay(500);

        char buffer  = {' ', ' ', ' '};

        while(!Serial.available );

        Serial.readBytesUntil('n', buffer, 10);

        int incomingValue = atoi(buffer);

        lcd.clear ;

        lcd.setCursor(0, 0);

        lcd.print("Measured value");

        lcd.setCursor(0, 1);

        lcd.print(incomingValue);

  }

}

###

Diagramas de circuito

Diagrama de Circuito-Controle Remoto-Xbee-Monitoramento de Gás-Arduino-Robô
Diagrama de Circuito-Xbee-Monitoramento de Gás-Arduino-Robô

Vídeo do projeto

블로그로 돌아가기

댓글을 남겨주세요

게시하기 전에 댓글의 승인을 받아야 합니다.