Arduino y sensor

Iniciado por @synthesize, 23 Mayo 2010, 00:39 AM

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

@synthesize

Me explico: Estoy aprendiendo a programar un Arduino:http://www.arduino.cc/es/ Y mi problema es el siguiente:

Intento hacer un sensor de movimiento, reciclado, con esto: http://www.gutefrage.net/media/fragen/bilder/brise-sense-and-spray/0_big.jpg
(Un Brise Sensor)

El circuito del sensor envía una señal a un motor, el cual se mueve (Activando así el Brise).

Lo que intento hacer es conectar los cables del sensor al arduino, y si este detecta movimiento, que haga sonar un speaker como alarma (Eso ya lo tengo programado)

He probado con interrupciones, y me han dicho de probar con digitalRead()

¿Alguna idea?

SOMBRIO

#1
Ese sensor es de casa no? jaja mas economico o por que decidiste usar ese sensor y no un sensor convencional ¿?

primero a que voltaje trabaja

segundo en si cual es el problema digitalread lee cualquier variacion y la toma como un valor de 5v

int pinentrada=pindelsensor;

void setup() {
 pinMode(pinentrada, INPUT);      
}
void loop() {
 movimiento = digitalRead(pinentrada);  

if movimiento==HIGH {      
     digitalWrite(speakerOut, HIGH);
     delay(200);
     digitalWrite(speakerOut, LOW);
 
   }
}

recuerda que siempre es conveniente meter alguna resistencia a tierra si piensas leer valores positivos pues cualquier variacion del rose de una mosca puede ser leida como positiva

el arduino ya lleva una serie de resistencias pero si despues piensas desmontar el pic es mejor tener eso en cuenta  

si el sensor trabaja a mas de 5v necesitas meter un regulador para estabilizarlo a 5 y en caso de pequeños sobrepasos de voltaje un simple diodo puede hacer una reduccion de alrededor de .6v o tambien un zener podria ayudar

si el sensor envia variaiones de voltaje por el aire por las mosacas etc..

analogread >=255  asi eliminaras variaciones de 1,2,3,4 v solamente se activara al llegar a los 5v

Suerte Saludos
IRQL less or equal

@synthesize

Al final he conseguido hacerlo con analógico, este es el code;

int pinentrada =1;
int ledPin =13;

/* Sensor: Brise
* V = 3V
*/

void setup()
{
 
  Serial.begin(9600);

  pinMode(pinentrada, INPUT);
  pinMode(ledPin, OUTPUT); 
}

void loop()
{
  int movimiento = analogRead(pinentrada); 

  if (movimiento>400)
  {     
    Serial.println(movimiento);
    digitalWrite(ledPin, HIGH);
    delay(2000);
    digitalWrite(ledPin, LOW);
    delay(200);
  }
}


No me salía en Digital por el voltaje, creo... ^^

@synthesize

Estoy intentando mejorar un poco...

int pin =1;
int ledPin =13;
int spPin =3;

void setup()
{
  Serial.begin(300);
  pinMode(pin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(spPin, OUTPUT);
}

void loop()
{
  int vol =analogRead(pin);
 
  Serial.println(vol);
 
  if (vol>=400)
  {
      digitalWrite(ledPin, HIGH);
  }
 
  else
  {
    digitalWrite(ledPin, LOW);
  }
 
  if (vol>1022)
  {
    tone(spPin, 200, 10);
  }
 
}
 

SOMBRIO

Suerte con tu proyecto amigo cada mejora lo va a hacer mas llamativo

Se me ocurre que en vez de el led encienda y apague por ligeros movimientos y el beep cuando pasa alguien.. por que no mejor pones diferentes melodias estaba trabajando en un codigo para pasar cualquier melodia rttl a lenguaje arduino por sus coincidencias do -re -mi -fa -sol pero tiene fallos .......


tipo melodia rttl
Halloween:d=4,o=5,b=180:8d6,8g,8g,8d6,8g,8g,8d6,8g,8d#6,8g,8d6,8g,8g,8d6,8g,8g,8d6,8g,8d#6,8g,8c#6,8f#,8f#,8c#6,8f#,8f#,8c#6,8f#,8d6,8f#,8c#6,8f#,8f#,8c#6,8f#,8f#,8c#6,8f#,8d6,8f#


en melodias con tonos bajos y altos se vuelve un codigo grandisimo y no se por que la melodia no sale tan bien que digamos

Despues pongo el codigo a la mejor tu que programas mas a menudo encuentres la falla que en su tiempo yo no pude

Saludos


IRQL less or equal

Debci

Y que valores devuelve la lectura analogica? porque 400? no era 255?
Lo digo por esto:
Código (cpp) [Seleccionar]
int movimiento = analogRead(pinentrada); 

  if (movimiento>400)


Saludos


SOMBRIO

Cita de: ..::| D3Bć1 |::. en 30 Mayo 2010, 16:48 PM
Y que valores devuelve la lectura analogica? porque 400? no era 255?
Lo digo por esto:
Código (cpp) [Seleccionar]
int movimiento = analogRead(pinentrada); 

  if (movimiento>400)


Saludos



arduino lee valores de 0 a 1024      --------0 a 5v

y escribe valores o a 255  -----------0 a 5v
IRQL less or equal

@synthesize

Cita de: SOMBRIO en 30 Mayo 2010, 17:30 PM
Cita de: ..::| D3Bć1 |::. en 30 Mayo 2010, 16:48 PM
Y que valores devuelve la lectura analogica? porque 400? no era 255?
Lo digo por esto:
Código (cpp) [Seleccionar]
int movimiento = analogRead(pinentrada); 

  if (movimiento>400)


Saludos



arduino lee valores de 0 a 1024      --------0 a 5v

y escribe valores o a 255  -----------0 a 5v

Y a mi el sensor me devuelve, si detecta algo, varios pulsos de mas de 400... Por eso lo puse XD

@synthesize

Cita de: SOMBRIO en 30 Mayo 2010, 06:28 AM
Suerte con tu proyecto amigo cada mejora lo va a hacer mas llamativo

Se me ocurre que en vez de el led encienda y apague por ligeros movimientos y el beep cuando pasa alguien.. por que no mejor pones diferentes melodias estaba trabajando en un codigo para pasar cualquier melodia rttl a lenguaje arduino por sus coincidencias do -re -mi -fa -sol pero tiene fallos .......


tipo melodia rttl
Halloween:d=4,o=5,b=180:8d6,8g,8g,8d6,8g,8g,8d6,8g,8d#6,8g,8d6,8g,8g,8d6,8g,8g,8d6,8g,8d#6,8g,8c#6,8f#,8f#,8c#6,8f#,8f#,8c#6,8f#,8d6,8f#,8c#6,8f#,8f#,8c#6,8f#,8f#,8c#6,8f#,8d6,8f#


en melodias con tonos bajos y altos se vuelve un codigo grandisimo y no se por que la melodia no sale tan bien que digamos

Despues pongo el codigo a la mejor tu que programas mas a menudo encuentres la falla que en su tiempo yo no pude

Saludos


Para escribir canciones simples yo uso procedimientos...

por ejemplo

void do (int duracion, int silencio)
{
    tone (pin, frecuencia, duracion);
    delay(silencio);
}


No lo hago exactamente así, pero es un buen ejemplo XD