Programación de dos sensores distintos en el Arduino uno

Muy buenas tardes a todo el mundo, hoy como un novato en esta pagina y este tema vengo a pedirles ayuda.

PRIMERO que nada necesito explicarles el tema, estoy haciendo un proyecto que capta un objeto cuando vas andando en bicicleta y este objeto se acerca demasiado a ti como ciclista.
Para esto se nos ocurrió unir un sensor pir con un sensor ultrasonido, pero lo que no sabemos es como programar el Arduino uno para que cuando exista movimiento y ademas traspase cierta distancia de seguridad active la alarma. Pero en el caso de que solo uno se active nada debería pasar .
POR FAVOR NECESITO SU AYUDA LO ANTES POSIBLE.

¿que sensores usas exactamente? estaría bien saber qué modelos son, y sus datasheets...

El PIR no sirve. PIR mide diferencia de temperatura, y estando en movimiento se va a volver loco.
Ultrasónico no sirve. Mide distancia a un objeto pero es muy direccional asi que si tu objeto fuera una moto no sería detectado, o si fuera un persona que esta al costado del cono de medición del sensor tampoco lo va a detectar.
Eso que quieres hacer se hace con un ARM (potente) o una PC/MAC usando OpenCV que es una librería open sourse dedicada al procesamiento de imágnes. Yo he intentado hacer cosas con resultados diversos pero es programación compleja.
Requieres una WebCam
Lo que necesitas hacer se llama Visión Estereo y el Arduino no da en su capacidad computacional para hacerlo.
Si un ARM, el DUE no se si podrá (porque es un ARM)
Aca algunos links
Real time object detection

Aca con un Rasperry PI
lee bien la memoria y los dispositivos externos utilizados.

Aporto otro link que sirve
Distance determination using inverse perspective mapping

Estos temas son mi debilidad pero estan en mi límite de capacidad de programación.
Diseñar un sistema que detecte un objeto (Vehículo que esté a distancia segura y que pase a alarma cuando entre en zona de peligro por su distancia a mi vehículo y por mi velocidad es mi desafío)

Hola fibroso28

Si eres nuevo te recomiendo probar cada sensor por aparte.

Te recomiendo los tutoriales en esta pagina:

http://www.tdrobotica.co/tutoriales/arduino

Al estar probando mi Arduino Uno estuve probando varios sensores, que activara dos servomotores, este es el codigo que utilice:

/*

CONTROL DE 2 SERVOMOTOR con reed y ultrasonico

En este ejercicio al accionar el sensor reed, activara el
servomotor a 90° y encendera el LED 10 veces
luego el LED se apagara y el servomotor ira a la posicion 0°

reed = pin 2 //Pin asignado al reed switch + 1 R 1K a +
led= pin 13 //Pin asignado al LED
buzzer= pin 10 //Pin asignado al buzzer
servo1= pin 3 //agisnamos el servo en el pin 3
servo2= pin 5 //agisnamos el servo en el pin 5
trig= pin 9 //Pin asignado al trig del sensor ultrasonico
echo= pin 8 //Pin asignado al echo del sensor ultrasonico

conexion servo:
cafe:GND
rojo:+
naranja:señal(en este caso pin 3 y 5)

Javiertecteos

*/

//--------------------------------------------------
//Declara puertos de entradas y salidas y variables
//--------------------------------------------------

int reed = 2; //Pin asignado al reed switch
int led= 13; //Pin asignado al LED
int buzzer= 10; //Pin asignado al buzzer

#include <Servo.h> //Libreria Servo
Servo servo1; //crea un objeto servo en la libreria Servo.h
Servo servo2; //crea un objeto servo en la libreria Servo.h

//sensor ultrasonico
long distancia;
long tiempo;

//------------------------------------
//Funcion principal
//------------------------------------
void setup() //Se ejecuta cada vez que el Arduino se inicia
{
servo1.attach(3); //agisnamos el servo en el pin 3
servo2.attach(5); //agisnamos el servo en el pin 5
pinMode(reed,INPUT); //El reed switch como una entrada
pinMode(led, OUTPUT); //El LED como una salida
pinMode(buzzer, OUTPUT); //El buzzer como una salida
Serial.begin(9600);
pinMode(9, OUTPUT); /activación del pin 9 como salida: para el pulso ultrasónico/
pinMode(8, INPUT); /activación del pin 8 como entrada: tiempo del rebote del ultrasonido/

}

//------------------------------------
//Funcion ciclicla
//------------------------------------

void loop() //Esta funcion se mantiene ejecutando
{ //cuando este energizado el Arduino

//sensor ultrasonico
digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
delayMicroseconds(5);
digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
delayMicroseconds(10);
tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
deja de hacerlo, LOW, la longitud del pulso entrante*/
distancia= int(0.017*tiempo); /fórmula para calcular la distancia obteniendo un valor entero/
/Monitorización en centímetros por el monitor serial/
Serial.println(“Distancia”);
Serial.println(distancia);
Serial.println(" cm");
delay(1000);

// Si el iman se acerca al reed switch o el sensor ultrasonico
// detecta algo a menos de 30 cm
if (digitalRead(reed)==LOW || (distancia)<=30){
digitalWrite(buzzer,HIGH); //Apaga el buzzer
servo1.write(180); //Cargamos la funcion con el valor en grados de 0 a 179º
delay(1000); //Retardo entre coordenadas
digitalWrite(buzzer,LOW); //Apaga el buzzer

for(int a=0; a<3; a++){

digitalWrite(led,HIGH); //Prende el LED
servo1.write(90); //Cargamos la funcion con el valor en grados de 0 a 179º
servo2.write(90); //Cargamos la funcion con el valor en grados de 0 a 179º
delay(1000); //Retardo entre coordenadas
digitalWrite(led,LOW); //Apaga el LED
delay(300); //Tiempo

}

// Si el iman esta lejos del reed switch
}else{

digitalWrite(led,LOW); //Mantiene apagado el LED
servo1.write(0); //Cargamos la funcion con el valor en grados de 0 a 179º
servo2.write(180); //Cargamos la funcion con el valor en grados de 0 a 179º
delay(1000); //Retardo entre coordenadas
digitalWrite(buzzer,LOW); //Apaga el buzzer

}
}
//Fin programa

Pero me quedan dudas en tu proyecto, no entiendo cual es el otro sensor y como lo piensas usar.

javiertecteos, no has leído las Reglas del Foro. Te recomiendo hacerlo.
Codigos van usando el icono correspondiente para que quede asi

Codigo

Tu código no usa librería de algo que está mas que comprobado y recomendado.
Usa pulsein que es una función que tiene la mala fortuna (todo lo demás es bueno) que se queda esperando el cambio de pulso hasta completar una transicion 0 -> 1 -> 0 asi que eso demorará el escaneo que propones.
De todas formas el sonar ultrasónico tiene una distancia máxima de 1.52 metros si mal recuerdo a la velocidad de sonido eso es t = d / v donde d es distancia, v = velocidad del sonido o 343 m/seg a 20C.
eso da x 2 (ida y vuelta) 8863 useg
Supongamos 60 grados de cobertura 60 x 8863 useg mas algunos mas del programa digamos y tiro algo asi nomas 9000 useg solo para hacer numeros comodos
54000 useg o 54 mseg.
A que quiero llegar que algo detectado a los 1.52 mts en el peor caso demorará 54 mseg en ser detectado. Acto seguido para una bicicleta a 30 km/hora o 8.333 m/seg

distancia recorrida en 50mseg a 8.33 m/seg => d = v t = 8.33 m/seg* 54 mseg = 0.45 mts
guauu casi 1/3 de la distancia de la bicicleta

sigo diciendo que consideré el peor caso.. o sea mi servo esta en la posición tal que le tome todo el tiempo detectar el objeto que entra en su zona de detección.

Una vez detectado deberá seguirlo de algun modo, arrancando por la posicón angular en la que lo detecté y en caso de no encontrarlo perdere otros 9 mseg asi que moveré a la posicion opuesta y vuelta a detectarlo.
Cada fallo agrega 9 mseg x 8.33 m/seg = 7.5 cmts y ya estabamos a 1.52 - 0.45 = 1.07 menos esos 7 o sea 1 metro.

esto para probar si es o no posible hacerlo por ese método. Parece posible.

Yo usaría la librería para el sonar ultrasónico y estudiaría como seguir un objeto que se acerca.

gracias surbyte

Viste esto?
Este es de lo que yo hablaba, se llama Pixy y esun modulo con camara que usa un micro ARM que se puede conectar via SPI al arduino.
Detecta objetos en general asociados a colores.. pero miralo a ver si te sirve.
Dudo aunque es tremendo.

hola buenas necesito obtener las librerias del sensor pir para hacer un poryecto gracias por su colaboracion

Que tiene que ver esto con el hilo en cuestión?
Crea tu propio hilo pablozacca.

Un pir tiene una salida digital supongamos que entregue un contacto cuando hay un objeto y contacto abierto cuando no ve nada.
Simple. 0 librería.

Hola, planeo realizar un proyecto utilizando el arduino nano pero necesito ayuda en la programación, necesito también que me ayuden a determinar que componente me producira ultrasonido a una frecuencia de 3Mhz. Ya que esta es la frecuencia que necesito de ultrasonido de manera pulsatil esto es un diseño de una herramienta con ultrasonido terapeutico para pacientes que quieran rehabilitarse de manera mas.. portátil
Gracias

1.- Te recomiendo abrir un hilo nuevo con esta pregunta, lo que preguntas poco tiene que ver con el título original del autor.
2.- 3Mhz no es ultrasonido, eso ya está dentro de las frecuencias de radio.
Abrazos!