Autor Tema: Problema con Sensor de movimiento  (Leído 7691 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jumu

  • PIC12
  • **
  • Mensajes: 83
Re: Problema con Sensor de movimiento
« Respuesta #15 en: 27 de Septiembre de 2012, 19:37:45 »
pregunta fantaxmax...cuando pongo a contar una variable...lo hace cada segundo??

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: Problema con Sensor de movimiento
« Respuesta #16 en: 27 de Septiembre de 2012, 19:45:53 »
pregunta fantaxmax...cuando pongo a contar una variable...lo hace cada segundo??

muestrame el codigo que usas para contar la variable
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado jumu

  • PIC12
  • **
  • Mensajes: 83
Re: Problema con Sensor de movimiento
« Respuesta #17 en: 27 de Septiembre de 2012, 19:53:23 »
Código: [Seleccionar]
void main(void)
{
   lcd_init();
   saludo();
   LCD_PUTC("\fSensor Motion");
   lcd_gotoxy(1,2);
   LCD_PUTC("Presencia:");
   
   while(true)
   {
      if(input(pin_a0)==1)
      { 
         cont++;
         output_high(pin_a1);
         lcd_gotoxy(11,2);
         LCD_PUTC("ON ");
         do
         {
            cont=0;
         }while(input(pin_a0)==1);
      }
      if(cont>=3)
      {
         output_low(pin_a1);
         lcd_gotoxy(11,2);
         LCD_PUTC("OFF");
      }
     
   }
}

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: Problema con Sensor de movimiento
« Respuesta #18 en: 27 de Septiembre de 2012, 20:25:59 »
probe el programa en mi pic, y como sospeche el led queda encendido. te recomiendo cambiar de posicion el cont++; junto al cont=0; intercambiar lugares, respecto al do no le veo mucho uso, cambialo por un while, de hecho el mismo while que esta al final del do, hazle los cambios que te digo y avisame
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado jumu

  • PIC12
  • **
  • Mensajes: 83
Re: Problema con Sensor de movimiento
« Respuesta #19 en: 27 de Septiembre de 2012, 20:33:10 »
pues intercambie el cont=0 con el cont++ y solo me encendia cuando habia 5V del sensor...y en ves de poner while puse if y me queda encendido...lo que quiero es que cuando el cont sea igual a 3 se apague...

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: Problema con Sensor de movimiento
« Respuesta #20 en: 27 de Septiembre de 2012, 20:40:54 »
Código: C
  1. void main(void)
  2. {
  3.    lcd_init();
  4.    saludo();
  5.    LCD_PUTC("\fSensor Motion");
  6.    lcd_gotoxy(1,2);
  7.    LCD_PUTC("Presencia:");
  8.    
  9.    while(true)
  10.    {
  11.       if(input(pin_a0)==1)
  12.       {  
  13.          cont=0;
  14.          output_high(pin_a1);
  15.          lcd_gotoxy(11,2);
  16.          LCD_PUTC("ON ");
  17.          while(input(pin_a0)==1)
  18.          {
  19.             cont++; // incrementa la variable cont
  20.             delay_ms(1000); // con este delay haces que cuente cada 1 segundo
  21.             if(cont==3)
  22.       {
  23.          output_low(pin_a1);
  24.          lcd_gotoxy(11,2);
  25.          LCD_PUTC("OFF");
  26.       }
  27.        
  28.       }
  29.       }
  30.      
  31.    }
  32. }

prueba con esa modificacion, voy a pasarlo al pic para probarlo tambien.
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: Problema con Sensor de movimiento
« Respuesta #21 en: 27 de Septiembre de 2012, 20:51:03 »
pues lo probe, y una vez que se activa el sensor, inicia el conteo y al llegar a tres lo apaga, y si el pulso desaparece antes de los tres segundos queda activado, hasta que se vuelve a activar durante tres segundos y se apaga, y no creo que quieras que funcione asi, al parecer quieres dejar el nombre sensor motion en la pantalla, modifico el programa que presente antes para que esccriba en la pantalla como lo quieres en este ultimo.

Código: C
  1. void main(void)
  2. {
  3.    lcd_init();
  4.    LCD_PUTC("\fSensor Motion"); //escribes en pantalla
  5.    lcd_gotoxy(1,2);
  6.    LCD_PUTC("Presencia:");
  7.    while(true) //entras a un bucle infinito
  8.    {      
  9.       if(input(pin_a0)==1)//al detectar movimiento entra aqui, la salida del sensor subio a uno
  10.       {
  11.          output_high(pin_a1);//encendemos el led
  12.          lcd_gotoxy(11,2);
  13.          LCD_PUTC("ON");//escribimos en la pantalla
  14.          while(input(pin_a0)){if(!input(pin_a0)){break;}}/*con esto el pic dejara encendido el led el tiempo que el sensor este en alto, una vez que baje, iniciara una cuenta regresiva para apagar el led*/
  15.          delay_ms(5000);//creamos la demora del led, para que se mantenga encendido durante x segundos, este tiempo debes editar para cambiar el tiempo de encendido del led
  16.          output_low(pin_a1);//apagamos el led
  17.       }
  18.       else //si la salida del sensor es 0 entra aqui
  19.       {
  20.          lcd_gotoxy(11,2);
  21.          LCD_PUTC("OFF");//escribe en la pantalla
  22.          delay_ms(200);//crea una demora de 200 milisegundos mucho tiempo resta fiabilidad al sensado
  23.       }
  24.       //al terminar las operaciones anteriores, vuelve al inicio, a comprobar el estado del sensor
  25.    }
  26. }

recuerda que en este programa si deseas que el led este encendido 3 segundos debes cambiar el 5000(5 seg) por 3000(3 seg) o la cantidad de segundos que desees por 1000.
« Última modificación: 27 de Septiembre de 2012, 20:53:38 por fantaxmax »
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado jumu

  • PIC12
  • **
  • Mensajes: 83
Re: Problema con Sensor de movimiento
« Respuesta #22 en: 28 de Septiembre de 2012, 00:14:00 »
bueno me has ayudado bastante fantaxmax de verdad hay varias formas de hacer esto...pero no se si tienes la idea bn clara...yo no quiero que dure el tiempo del delay...porque ya lo hice y asi no es como lo queria...yo lo que quiero es que cada ves que haya movimiento un contador vuelta a 0 y cuando no haya movimiento va a seguir el contador a cierto numero contado el led se apaga...eso es lo que quiero pero no se que tengo mal o no se...voy a seguir probando muchas gracias por tu tiempo :D y pues a ver si conseguimos eso :D

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: Problema con Sensor de movimiento
« Respuesta #23 en: 28 de Septiembre de 2012, 00:57:49 »
con esa explicacion puedo traducirlo a codigo de programa

Código: C
  1. void main(void)
  2. {
  3.    lcd_init();
  4.    saludo();
  5.    LCD_PUTC("\fSensor Motion");
  6.    lcd_gotoxy(1,2);
  7.    LCD_PUTC("Presencia:");
  8.    
  9.    while(true)
  10.    {
  11.       if(input(pin_a0)==1)
  12.       {  
  13.          cont=1;
  14.          output_high(pin_a1);
  15.          lcd_gotoxy(11,2);
  16.          LCD_PUTC("ON ");
  17.        }
  18.        
  19.        while(cont!=0) // este while funciona de contador
  20.          {
  21.             cont++; // incrementa la variable cont
  22.             delay_ms(1000); // con este delay haces que cuente cada 1 segundo, tambien puede ser una medida menor, como tu quieras
  23.             if(cont==x) // x= numero de segundos del contador, ya que hay un delay de un segundo arriba, si ese delay no esta, el led se apagara inmediatamente al bajar la salida del sensor
  24.                   {
  25.                    output_low(pin_a1);
  26.                    lcd_gotoxy(11,2);
  27.                    LCD_PUTC("OFF");
  28.                    cont=0;
  29.                    break;
  30.                    }
  31.          }
  32.      
  33.    }
  34. }

creo que eso es lo que quieres, pruebalo en tu placa haber que tal
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado jumu

  • PIC12
  • **
  • Mensajes: 83
Re: Problema con Sensor de movimiento
« Respuesta #24 en: 28 de Septiembre de 2012, 01:13:52 »
mucha gracias fantaxmax me sirvio...pero no se si me podrias explicar un poco la ultima parque porque lo mandas a cero el cont??...perdon por la ignorancia x_x

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: Problema con Sensor de movimiento
« Respuesta #25 en: 28 de Septiembre de 2012, 12:43:49 »
mucha gracias fantaxmax me sirvio...pero no se si me podrias explicar un poco la ultima parque porque lo mandas a cero el cont??...perdon por la ignorancia x_x

te explico el programa, y no te disculpes por no saber, nadie nace sabiendo, y la unica manera de aprender es preguntando, y haciendo

Código: C
  1. void main(void)
  2. {
  3.    lcd_init();
  4.    saludo();
  5.    LCD_PUTC("\fSensor Motion");
  6.    lcd_gotoxy(1,2);
  7.    LCD_PUTC("Presencia:");
  8.    
  9.    while(true)
  10.    {
  11.       if(input(pin_a0)==1)
  12.       {  
  13.          cont=1; //con esto le idicamos al while que debe comenzar a contar, ya que va a contar solo cuando cont no sea cero
  14.          output_high(pin_a1); //encendemos el led
  15.          lcd_gotoxy(11,2);
  16.          LCD_PUTC("ON ");
  17.        }
  18.        
  19.        while(cont!=0) // este while funciona de contador
  20.          {
  21.             cont++; // incrementa la variable cont
  22.             delay_ms(1000); // con este delay haces que cuente cada 1 segundo, tambien puede ser una medida menor, como tu quieras
  23.             if(cont==x) // x= numero de segundos del contador, ya que hay un delay de un segundo arriba, si ese delay no esta, el led se apagara inmediatamente al bajar la salida del sensor
  24.                   {
  25.                    output_low(pin_a1); //apagamos el led
  26.                    lcd_gotoxy(11,2);
  27.                    LCD_PUTC("OFF");
  28.                    cont=0; //al colocar el cont a 0 le decimos el while que debe dejar de contar, y que debe dejar a la cpu seguir sensando
  29.                    break;
  30.                    }
  31.          }
  32.      
  33.    }
  34. }

como vez el contador solo comenzara a contar una vez que la cpu detecte la salida del sensor y coloque cont a 1, con ese uno en el cont, el contador (while) comprobo que conto ya no es cero, entonces esa es la orden para comenzar a contar, el while cuenta normalmente y va verificando que el numero que lleva contado sea igual al que tu definiste en x, cuando se cumple el contador debe apagar el led, y debe detenerse a si mismo, entonces, el pone a cont a 0, y se termina el conteo, y la cpu puede seguir sensando, si cont no la pusieramos a cero, la cpu al salir del contador volveria a entrar al while del contador, pero en este caso, no se cumpliria la que cont==x, porque nunca volvio a empezar desde 1 en este caso, y tu pic dejaria de responder, se quedaria "colgado".
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado jumu

  • PIC12
  • **
  • Mensajes: 83
Re: Problema con Sensor de movimiento
« Respuesta #26 en: 28 de Septiembre de 2012, 14:40:34 »
ya entendi :D muchas gracias fantaxmax por tu ayuda...entendi todo perfecto...ahora ya se un poco mas :D de verdad muchas gracias por tu tiempo y explicarme :D

Desconectado jumu

  • PIC12
  • **
  • Mensajes: 83
Re: Problema con Sensor de movimiento
« Respuesta #27 en: 28 de Septiembre de 2012, 19:23:14 »
bueno ahora tengo otro problema x_x...quiero cambiar el pic a un 16f84a...y solo cambio la parte de arriba de include en proteus me funciona la simulacion...pero en real no...le puse un oscilador de 4MHz con dos capacitores de 33pF...y no me agarra no hace lo que tiene que hacer es el mismo codigo...y aqui lo pongo...no se si tengo algo mal en los fuses o que...
Código: [Seleccionar]
#include <16F84A.h>
#Fuses XT,NOWDT,NOPROTECT,PUT
#Use delay(clock=4000000)

int cont;

void main(void)
{

   while(true)
   {
      if(input(pin_a2)==1)
      {
         cont=1;
         output_high(pin_a3);
      }
      while(cont!=0)
      {
         cont++;
         delay_ms(1000);
         if(cont==5)
         {
            output_low(pin_a3);
            cont=0;
            break;
         }
      }
   }
}

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: Problema con Sensor de movimiento
« Respuesta #28 en: 28 de Septiembre de 2012, 19:39:53 »
los condensadores son los mismos que usaste con el otro pic?, probaste a colocarle condensadores de 22pf?, en los fuses no creo que este el error, prueba a cambiarle los condensadores
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado jumu

  • PIC12
  • **
  • Mensajes: 83
Re: Problema con Sensor de movimiento
« Respuesta #29 en: 28 de Septiembre de 2012, 20:24:56 »
sii son los mismos...estube leyendo que podia poner un oscilador de 10MHz que tengo varios aqui y con los capacitores de 33pf...y pense que podia usar esos capacitores con un oscilador de 4MHz...el problema es que no tengo capacitores de 22pf...probare ponerle el oscilador de 10 y cambiar en los fuses el XT por el HS