Me explico: Estoy aprendiendo a programar un Arduino:http://www.arduino.cc/es/ (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
(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?
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
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... ^^
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);
}
}
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
Y que valores devuelve la lectura analogica? porque 400? no era 255?
Lo digo por esto:
int movimiento = analogRead(pinentrada);
if (movimiento>400)
Saludos
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:
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
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:
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
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