Ir ao conteúdo
  • Cadastre-se

Thalysson Santana

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

Reputação

1
  1. olá de novo, pessoal. Levando em consideração a possibilidade de que o microcontrolador de 8 bits não teria capacidade de processar o programa, peguei emprestado um arduíno mega que tem um microcontrolador de 16 bits. Testei o primeiro programa(mais simples) e como sempre, funcionou; testei o segundo programa, mais complexo e dessa vez quando entrou no laço IF o motor deu um "passo" no sentido antihorário, e na saída do laço IF, ele deu um "passo" no sentido horário. Quando você clica no botão carregar da IDE ele mostra o quanto de memória está sendo consumida: "O sketch usa 5832 bytes (2%) de espaço de armazenamento para programas. O máximo são 253952 bytes. Variáveis globais usam 400 bytes (4%) de memória dinâmica, deixando 7792 bytes para variáveis locais. O máximo são 8192 bytes." Será que realmente o problema é processamento?
  2. @Isadora Ferraz Que partes eu poderia tirar, sem retirar essas funções e cálculos? diminuir o nome das variáveis e das funções ajudaria? Eu tenho certeza que não é problema de hardware, porque o circuito funciona com o primeiro programa. Testei os dois programas algumas vezes e quando o primeiro está carregado no microcontrolador, sempre funciona. Estou usando arduíno uno e o microcontrolador é o ATMega 328P, que tem 8 bits. Que placa de arduíno suportaria meu programa? adicionado 5 minutos depois @BloodCeltics Lopes Construí um protótipo de exaustor com cano PVC e um cooler de computador(motor DC de 12V), que é brushless, sem escova. Esse exaustor servirá para "sugar", dissipar o fumaça (fumo) resultante da solda Sn-Pb, usada em placas de circuito. O chumbo é muito prejudicial a nossa saúde. Sim, você não leu errado, o sensor reage a fumaça também e é ela que estou medindo. No datasheet tem lá a curva de sensibilidade a "smoke". A fumaça não é inflamável.
  3. Fiz um circuito com transistor e diodo para acionar um motor DC 12V através da resposta de um sensor analógico de gás MQ-2. Testei o programa simples abaixo e o motor funcionou bem. int Pincooler = 8; int PinA0 = A0; int leitura_sensor = 30; void setup() { pinMode(PinA0, INPUT); pinMode(Pincooler, OUTPUT); Serial.begin(9600); } void loop() { int valor_analogico = analogRead(PinA0); Serial.print("Leitura: "); Serial.println(valor_analogico); if (valor_analogico > leitura_sensor){ Serial.print("Limpando ambiente contaminado\n"); digitalWrite(Pincooler, HIGH); delay(10000); }else{ digitalWrite(Pincooler, LOW); } delay(100); } Quando carreguei outro programa no arduino, com mais linhas de programação, porém com o mesmo princípio de acionamento do motor, ele não funciona. Dá apenas um "click", ou um "passo". #define PIN_MQ2 (0) #define RL (5) #define FATOR_AR_LIMPO (9.62) #define ITERACOES_CALIBRACAO (50) #define ITERACOES_LEITURA (5) #define PinCooler (8) float CurvaFumaca[3] = {2.3,0.53,-0.44}; float Ro = 10; int Limiar_Acionamento = 5000; void setup() { Serial.begin(9600); Serial.print("Calibrando o sensor MQ2...\n"); Ro = Calibracao_Ro(PIN_MQ2); //calibra o sensor MQ2 Serial.print("Finalizando a calibracao...\n"); Serial.print("Calibracao concluida...\n"); Serial.print("Valor de Ro="); Serial.print(Ro); Serial.print("kohm"); Serial.print("\n"); } void loop() { float PPM = calculaPPMGas(leitura_MQ2(PIN_MQ2)/Ro,CurvaFumaca); Serial.print("Concentracao de Fumaca:"); Serial.print(PPM); Serial.print( "ppm " ); Serial.println(""); if (PPM > Limiar_Acionamento){ Serial.print("Ambiente contaminado\n"); Serial.print("Limpando ambiente contaminado\n"); digitalWrite(PinCooler, HIGH); delay(10000); }else{ digitalWrite(PinCooler, LOW); } delay(100); } float calcularRSArLimpo(int tensao_bits) //funcao que recebe o tensão (dado cru) e calcula a resistencia efetuada pelo sensor. O sensor e a resistência de carga forma um divisor de tensão. { return (((float)RL*(1023-tensao_bits)/tensao_bits)); } float Calibracao_Ro(int mq_pin) { int i; float valor=0; for (i=0;i<ITERACOES_CALIBRACAO;i++) { valor += calcularRSArLimpo(analogRead(mq_pin)); delay(500); } valor = valor/ITERACOES_CALIBRACAO; valor = valor/FATOR_AR_LIMPO; return valor; } float leitura_MQ2(int mq_pin) { int i; float rs=0; for (i=0;i<ITERACOES_LEITURA;i++) { rs += calcularRSArLimpo(analogRead(mq_pin)); delay(50); } rs = rs/ITERACOES_LEITURA; return rs; } int calculaPPMGas(float rs_ro, float *pcurve) { return (pow(10,( ((log(rs_ro)-pcurve[1])/pcurve[2]) + pcurve[0]))); } Onde vocês acham que está o erro?
  4. algum dos senhores poderia me explicar porque o valor obtido na leitura do sensor foi "jogado" nessa fórmula "transf=(100*(sensorValue-21))/114;" e de onde tiraram esta fórmula?

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...