Olá Pessoal! Estou montando um projeto com o sensor de Monóxido de Carbono (CO) MQ7.

Nesse projeto vou detecta o nível do CO no ar e conforme o nível enviar um sms com o shield gsm.

Porém estou enfrentando alguns problemas.

O sensor MQ7 capta um valor, está capturando o valor 22 num ambiente com ar pura, mas quero transformar esses valores da detecção em ppm(partes por milhão). Como poderia fazer essa calibragem?

Estou usando um tela lcd para apresentar os valores lido pelo sensor, mas se ajuntar a tela e o shield gsm o shield não manda a mensagem. Testei, o shield só manda mensagem se eu não incluir a tela lcd no código. Estou fazendo assim:

#include <LiquidCrystal.h>

#include<SIM.900.h>

#include<SoftwareSerial.h>

#include"sms.h"

void setup() {

 Serial.begin(9600);

lcd.begin(16, 2); //inicia a tela lcd

if(gsm.begin(9600))//inicia o shield gsm

  Serial.println("\nstatus=READY");

  else

   Serial.println("\nstatus=IDLE");

Penso que o erro esteja em iniciar o shield e a tela lcd juntos ou no 9600, mas não sei porque sou novo com Arduino.

Agradecido!

Exibições: 1686

As respostas para este tópico estão encerradas.

Respostas a este tópico

Oi Admiltom, bom dia,

Lendo do datasheet do MQ7, verifiquei que a  leitura dele já é em partes/milhão.

Este valor que voce está encontrando é muito próximo do inicio da escala de medida dele (de 20 a 2000ppm),

e deve ser ou dentro do erro de medida, ou um mínimo imperceptivel de CO2 no ar medido.

Qto ao LCD/Shield:

Qual LCD voce está utilizando?

Voce configurou o LCD para os Pinos 16 e 2?

Eu  não tenho este shield, mas pelo esquema dele que vi, ele utiliza os pinos de "D0 até D19" do Arduino.

Com isto acho que ele interfere no LCD.

Rui

Obrigado pela resposta Rui!

Perguntei como converte em ppm os dados capturados pelo MQ7 porque encontre discusões e vários foruns sobre isso, só que lendo essas discussões eu não consegui chegar a nenhuma conclusão de como faz. Acho que o MQ7 não lê em ppm e sim em valóres analógicos. Nos foruns uns falam que tenho que medir a tensão e pra calibrar, ou tenho que pegar um valor de CO conhecido para calibrar.

Esses são osprincipais links que acessei:

http://forum.arduino.cc/index.php?topic=215585.0

http://forum.arduino.cc/index.php?topic=77958.0

https://www.youtube.com/watch?v=fBo3Yq9LK1U

Sobre o LCD, sim configurei para os pinos 16 e 2:

lcd.begin(16, 2);

Como outros shields ele deixa as entradas digitais disponíveis, não sei o motivo de não funcionar, na execução ele fala uma mensagem que força o inicio do shield para iniciar o 9600 bauds mais ou menos isso.

Se eu não incluir a tela ele envia o sms perfeitamente.

Oi Ademilton,

realmente a saída é analógica, 

eu me equivoquei ao ler o datasheet.

Rui

quais pinos teu shield sim900 usa para se comunicar via softserial?

Se forem usados os pinos 2 e 3 para rx/tx, então está explicado o conflito, pois vc disse que o lcd usa os pinos 16 e 2

Como eu disse sou novo nesse mundo Arduino, então não sei ao certo quais pinos o shield usa, eu só conectei o shield no Arduino como mostra a imagem, e depois coloquei os jumpers nos pinos equivalentes. 

Não é assim que se faz? Quando vc coloca o shield não fica livre os pinos do arduino?

Por favor,  cole teu sketch completo,  pois ali no início vc suprimiu diversas linhas que seriam importantes para avaliarmos onde há erro.  Na foto,  dá pra perceber que vc usa os pinos 2,3,4,5,11 e 12 pro seu LCD. 

É possível que o conflito com o gsm  shield esteja realmente ocorrendo por causa do uso dos mesmos  pinos,  como os pinos 2 e 3, muito comuns em grande parte dos gsm shields.

Além do sketch,  aproveite para informar também o modelo do seu gsm shield para termos chance de estudar o datasheet  dele

Segue o código que estou fazendo testes, lembrando que esse código só é pra teste, não está envolvendo o sensor mq7 com shield.

#include "SIM900.h" //Carrega a biblioteca SMS
#include <SoftwareSerial.h>
#include "sms.h"
#include <LiquidCrystal.h>//biblioteca para tela lcd
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int valores_sensor = A0;
SMSGSM sms;
boolean started=true;

void setup() {

Serial.begin(9600);
lcd.begin(16, 2);
if (gsm.begin(2400))
Serial.println("nstatus=READY");
else Serial.println("nstatus=IDLE");

}

void loop() {

if(started)
{
if (sms.SendSMS("986759697", "Teste do Arduino"))
Serial.println("Mensagem Enviada");
started=false;
}
int mq7 = analogRead(valores_sensor);
Serial.print(mq7);
lcd.setCursor(0,0);//imprimir na tela
lcd.print(mq7);



delay(900);
}

Aqui vai como se fosse um datasheet do shield http://www.seeedstudio.com/wiki/GPRS_Shield_V1.0

E esse é o link da loja aonde eu comprei o shield 

http://pt.aliexpress.com/item/GSM-GPRS-Shield-For-Arduino/733792647...

Acho que é isso, se não for me fale, sou novo com o Arduino e não tao familiarizado com as nomeclaturas, mas desde já muito obrigado voces estao me ajudando muito.

amigo, se vc comprou o shield gsm do aliexpress, seu shield é da marca tinysine. Vá no site deles e obtenha o datasheet apropriado. Não use o datasheet da seeedstudio, pois cada fabricante faz as coisas do seu próprio jeito.

Por exemplo, o shield da seeedstudio usa softserial nos pinos 7/8. E a tinysite usa nos pinos 2/3

Então, se seu shield fosse da seeedstudio, não haveria conflito, pois o shield gsm usa os pinos 7 e 8 pra comunicação softserial e o lcd usa os pinos 2,3,4,5,11 e 12

Já se seu shield for da tinysite, o conflito estaria ocorrendo nos pinos 2 e 3, pois ambos (lcd e shield gsm) estariam tentando usar esses 2 pinos

Agora sim encontrei o datasheet apropriado, na verdade não sabia qual era o fabricante

http://www.tinyosshop.com/index.php?route=product/product&produ...

Vou dar uma estudada e tentar resolver o problema por aqui.

Obrigado imhugo e Rui Viana

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço