¿La pantalla LCD del proyecto Arduino muestra errores cuando la bomba de agua está activada? [cerrado]

0

LaLaconfiguraciónesqueheconectadolabateríade9ValmotoryheintentadousarMosfetyambosfuncionanbien.UtilicélatapaentrelospasadoresVyVdelapantallaLCDqueresolvió,perolosvaloresson20porcientomásaltosquelosoriginales.ElLCDdelproyectodeArduinosemuestrabiencuandolabombadeaguaestáconectada,cuandoseactiva.LapantallaLCDmuestraalgodegalimatías.EstoesaurduinoseactivaLabombadeaguacomovalordehumedadcaecomoenelprograma.Elprogramaes

#include<LiquidCrystal.h>//initializevariablesforsensorpinsintmoistPin=0;inttempPin=1;intlightPin=2;//initializevariablestostorereadingsfromsensorsintmoistVal=0;inttempVal=0;intlightVal=0;//initializevariablesforLEDpinsintredPin=11;intgreenPin=10;intbluePin=9;intwaterPump=13;//initializethelibrarywiththenumbersoftheinterfacepinsLiquidCrystallcd(7,6,5,4,3,2);voidsetup(){//initializetheserialportSerial.begin(9600);//setLEDpinstooutputmodepinMode(redPin,OUTPUT);pinMode(greenPin,OUTPUT);pinMode(bluePin,OUTPUT);pinMode(waterPump,OUTPUT);//setLEDpinstooffdigitalWrite(redPin,LOW);digitalWrite(greenPin,LOW);digitalWrite(bluePin,LOW);//setuptheLCD'snumberofcolumnsandrows:lcd.begin(16,2);}voidloop(){inthumidityRaw=analogRead(A0);//1023to0===>0to100%inthumidityReal=map(humidityRaw,1023,0,0,100);//displaymoisturereadingonlcdlcd.clear();lcd.print("moisture %   ");
  lcd.print(humidityReal);


  Serial.println(humidityReal);

  delay(100);

  if (humidityReal < 60)
  {
    digitalWrite(waterPump, HIGH);
  }else{
    digitalWrite(waterPump, LOW);
  }
  //turn on LED to blue, others off if moisture pins are touching together
  if (humidityReal > 60)
  {
    blue();
  }
  else 
  { 
    off();
  }

  //wait 4 seconds 
  delay(4000);
   //display moisture reading on lcd

  tempVal = analogRead(tempPin);

float mv = ( tempVal/1024.0)*5000; 
float cel = mv/10;
float farh = (cel*9)/5 + 32;

  lcd.clear();
  lcd.print("temperature ");
  lcd.print(cel);

  if (cel >29)
  {
    red();
  }
  else 
  { 
    off();
  }

  delay(4000);

  lightVal = analogRead(lightPin);
   //display moisture reading on lcd
  lcd.clear();
  lcd.print("light ");
  lcd.print(lightVal);

  //turn on green if light sensor reads 600 or brighter
  if (lightVal > 20)
  {
    green();
  }
  else 
  { 
    off();
  }

  delay(4000);

}

void blue()
{
  digitalWrite(redPin, LOW);
  digitalWrite(greenPin, LOW);
  digitalWrite(bluePin,HIGH);
}

void red()
{
  digitalWrite(redPin, HIGH);
  digitalWrite(greenPin, LOW);
  digitalWrite(bluePin, LOW);
}

void green()
{
  digitalWrite(redPin, LOW);
  digitalWrite(greenPin, HIGH);
  digitalWrite(bluePin, LOW);
}

void off()
{
  digitalWrite(redPin, LOW);
  digitalWrite(greenPin, LOW);
  digitalWrite(bluePin, LOW);

}

void on()
{
  digitalWrite(redPin,HIGH);
  digitalWrite(greenPin, HIGH);
  digitalWrite(bluePin, HIGH);
}
    

2 respuestas

1

Es difícil responder sin esquemas. Sospecho que su pompa de agua es un motor universal de CA y está encendido con algún tipo de relé o triac. He visto tales problemas con lcd cuando el motor eléctrico está encendido sin el detector de cruz cero. El motor eléctrico genera una emi alta cuando se enciende con una fase aleatoria y esta emi daña la pantalla lcd.

Intentaría agregar un detector de cruce de cero, ¿tal vez optotriaco con detección de cruce de cero? Como moc306x.

    
respondido por el dmz
0

No podemos saber, qué tipo de bomba de motor está utilizando o cualquier cosa, las imágenes, esquemas y modelos (y, especialmente, ¡la potencia de la bomba de motor!) son las cosas más deseadas, tendríamos que saber para seguir hablando.

Como una patada en la oscuridad, diría algo como esto: supongo que su bomba tiene más de unos pocos vatios, por lo que eso puede causar alguna influencia en la red eléctrica, por lo que la principal causa de su LCD El problema es que podría haber un gran campo electromagnético procedente de la bomba que influye en el arduino.

    
respondido por el Jakey

Lea otras preguntas en las etiquetas