Proyecto con Arduino (Control de nivel de liquido en tanque con sensor ultrasonico)

Hola, tengo un problema con la señal para disparar el mosfet irfz44n. Cuando el sensor detecta que esta a la distancia deseada para que el solenoide se cierre, el mosfet no se dispara pero el arduino si manda la señal. Este es el circuito que tengo (la parte del LED es simulando el solenoide):

Ver el archivo adjunto 71195

Lo más extraño es que ayer estaba funcionando muy bien y hoy lo probé y presentó este problema :cry:
Bueno espero que me ayuden con esto. Y si alguien sabe como conectar los pines Rx, Tx y Gnd de un sony ericsson.
Saludos.
 
Última edición:
Hola:

¿Te funcionaba y todo?

¿Puedes poner esquemas,ejemplos y código de lo que haz hecho?

Saludo.
 
Hola, es un problema muy raro porque cuando lo conecto por usb a la pc, el arduino trabaja normal pero cuando le conecto la fuente de 12v empieza a generar problemas. Realmente ya no se ni que hacer.

Y en serio nadie sabe como se conectar un sony ericsson?? el que sea...
Saludos
 
Nos vendria bien que nos pusieras el esquema que sigues y el programa, sino poco podemos hacer. A que patillas del arduino conectas la fuente de 12V. Has medido que sean 12v seguros? continuos? Te lo comento porque alguna vez me he dado sorpresas pensando que eran 12v y en realidad estan saliendo 15V de la fuente y cosas asi... No obstante, lo que te comentaba antes, si nos das mas datos mejor.
 
Hola, aqui les dejo el esquema para que vean como esta conectado:

diagrama.png
La señal es la que sale hacia el gate del mosfet y el Led esta simulando el solenoide que debo ponerle.

y el arduino lo conecto en la parte que puse en rojo en la siguiente foto:


El codigo le hice una modificación, le hice un filtro para ver si no me da mas el problema y esta asi:
Código:
int trigpin = 8;
int ecopin = 9;
int agua = 13;
int tamarreglo = 9;
int rangovalor[]= {0,0,0,0,0,0,0,0,0};
unsigned long duracion;
int distancia;
int n=0;

void setup()
{
  pinMode(trigpin,OUTPUT);
  pinMode(ecopin,INPUT);
  pinMode(agua,OUTPUT);
  //Serial.begin(9600);
  //delay(500);
}

void loop()
{
  for(int i=0;i < tamarreglo;i++)
  {
    digitalWrite(trigpin,LOW);
    delayMicroseconds(2);
    digitalWrite(trigpin,HIGH);
    delayMicroseconds(10);
    digitalWrite(trigpin,LOW);
    duracion = pulseIn (ecopin,HIGH,30000);
    if (duracion == 0) {duracion = 30000;}
    rangovalor[i] = duracion/58;
    delay(10);
  }
  
  //Serial.print("Desarreglado: ");
  //printArray(rangovalor,tamarreglo);
  arreglar(rangovalor,tamarreglo);
  //Serial.print("Arreglado: ");
  //printArray(rangovalor,tamarreglo);
  distancia = moda(rangovalor,tamarreglo);
  
  if (distancia >=0 && distancia <= 400) 
  {
    /*Serial.print("La moda es: ");
    Serial.print(distancia);
    Serial.println (" cm");
    delay(10);*/
  
    if (distancia >= 50) {digitalWrite(agua,HIGH);}
    else if(distancia <= 10) {digitalWrite(agua,LOW);}
  }
  
  /*else
  {
    n++;
    if (n==5)
    {
      Serial.println ("Error");
      delay(10);
      n=0;
    }
  }*/
}

/*void printArray(int *a, int n)
{
  for (int i = 0; i < n; i++)
  {
    Serial.print(a[i], DEC);
    Serial.print(' ');
  }
  Serial.println();
}*/

void arreglar(int *a, int n)
{
  for (int i = 1; i < n; ++i)   
  {     
    int j = a[i];     
    int k;     
    for (k = i - 1; (k >= 0) && (j < a[k]); k--)
    {
      a[k + 1] = a[k];
    }
    a[k + 1] = j;
  }
}

int moda(int *x,int n){
  int i = 0;
  int conteo = 0;
  int maximo = 0;
  int moda = 0;
  int bimodal;
  int anterior = 0;
 
  while(anterior&conteo>maximo){
      moda=x[i];
      maximo=conteo;
      bimodal=0;
    }
    if(conteo==0){i++;}
    if(conteo==maximo){bimodal=1;}
    if(moda==0||bimodal==1) {moda=x[(n/2)];}
    return moda;
  }

Este codigo obtiene varios valores y le saca la moda

Bueno, espero me ayuden con esto.
Saludos.
 
Hola a todos,

este es mi primer post en el foro, y por favor no sean duros ya que apenas voy metiéndome al mundo de Arduino.

Tengo un problema con mi proyecto, el cual consiste en un sistema de purificación de agua donde tenemos dos tanques, uno donde se acumula el agua contaminada y el segundo donde se almacena el agua limpia.

Apenas voy comenzando con la programación y ya me ha surgido un problema, tengo un Ultrasónico HC-SR04 sensando mi primer tanque, lo he programado para que, cuando el nivel del agua del tanque disminuya al 30% se abra la válvula principal, y llene el tanque de nuevo, aun que (por este momento) mi válvula principal es un led smiley-sweat. El problema es que cuando tiene de 0 a 30% se prende el LED (válvula), pero al pasar el 30% se vuelve a desactivar. Y lo que yo quiero es que se active hasta que llegue al 100% de nuevo, y al vaciarse y llegar al 30% se vuelva a activar hasta de nuevo llenarse.

Estoy utilizando un IF para hacer esto, pero quizá ustedes saben una forma de lograr que esto suceda.

dejo esa parte del código.

/Se añade la libreria a utilizar
#include <NewPing.h>


/*Aqui se configuran los pines donde debemos conectar el sensor*/
#define TRIGGER_PIN 12 //trigger naranja
#define ECHO_PIN 11 //echo verde
#define MAX_DISTANCE 200

int const percent_pin = 8;

/*Crear el objeto de la clase NewPing*/
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {

pinMode(8,OUTPUT);
Serial.begin(9600);


}

void loop() {
// Esperar 1 segundo entre mediciones
delay(1000);
// Obtener medicion de tiempo de viaje del sonido y guardar en variable uS
int uS = sonar.ping_median();
//Declarar variable dis
int dis = uS / US_ROUNDTRIP_CM;
//declarar variable h
int h = 28 - dis;
//declarar variable vol
float vol = h * 1.63461538;
//declarar variable percent
int percent = (vol * 100) / (42.5);
// Imprimir porcentaje de llenado de tanque
Serial.print("Tanque al ");
Serial.print(percent);
Serial.print(" % ");
// Imprimir el volumen medido a la consola serial
Serial.print("Volumen: ");
// Calcular el volumen con base en una variable
Serial.print(vol);
Serial.println(" Litros");

//Si el porcentaje es menor a 30 se activa la válvula, si es un valor negativo se desactiva la válvula

if (percent <= 30)
{
digitalWrite(percent_pin,LOW);

}
else if (percent < 0)
{
digitalWrite(percent_pin,HIGH);
}
else
{
digitalWrite(percent_pin,HIGH);
}
}
 
Hazlo asi
En el bucle loop comprueba si percent es menor que 30. Si lo es, pones una variable, por ejemplo llenar a true y abres la válvula.

Luego pones otra condición, si llenar = true and percent>=100 entonces pones llenar a false y cierras la válvula.
 
Atrás
Arriba