Comandare un servo motore con un sensore IR

Ciao a tutti.

Vorrei utilizzare arduino per poter creare un piccolo progetto di passaggio a livello per treno lego.
Ho acquistato arduino uno, un servo motore g90, e un sensore di prossimità ir che dovrebbe attivarmi il servo motore al passaggio del treno (simulando le sbarre che scendono) e una volta passato, riportare il servo in posizione iniziale (sbarre aperte).

Ho acquistato un sensore di prossimità ir 2850 infraredpro che ,oltre alle alimentazioni, ha due pin aout e dout. Purtroppo da alcune guide trovate in rete i sensori avevano solo un solo pin oltre alla alimentazione.

Quindi nasce già un problema … quale utilizzare? E fattibile quello che voglio fare?

Grazie del vostro aiuto.

stefano71:
Ho acquistato un sensore di prossimità ir 2850 infraredpro che ,oltre alle alimentazioni, ha due pin aout e dout. Purtroppo da alcune guide trovate in rete i sensori avevano solo un solo pin oltre alla alimentazione.

Usa dout (digital out, livello HIGH o LOW), l'altro porta un segnale analogico (probabilmente prima del discriminatore che, sicuramente, è a bordo delle schedine che hai aquistato).

Guglielmo

Grazie mille Guglielmo.

Qualche dritta anche su come impostare il tutto via software?

Buonasera.

Sono riuscito, recuperandolo in rete, a ricostruire un circuito che faccia propio al mio caso , ma che utilizza due
microswitch a leva per comandare il servo che alza e abbassa le sbarre del passaggio a livello.
Il tutto funziona, ma la mia idea era quello di sostituire i microswitch a leva con i sensori ir di prossimità.
Ecco lo sketch:

#include <Servo.h>

#define servoPin 5
#define swClose 2
#define swOpen 3
#define ledSemaf 4

#define posMin 0
#define posMax 90
#define timePL 10

boolean statoPL=false;
int currentGrad=posMax;

Servo myservo;

void setup()
{
pinMode( swClose,INPUT );
pinMode( swOpen,INPUT );
pinMode( ledSemaf,OUTPUT );

myservo.attach(servoPin);
myservo.write(currentGrad);
digitalWrite( ledSemaf,LOW );
}

void loop()
{
if ( digitalRead(swClose) == HIGH ) { statoPL = true; }
if ( digitalRead(swOpen) == HIGH ) { statoPL = false; }

if ( statoPL == true && currentGrad > posMin) {
digitalWrite( ledSemaf,HIGH );
while (currentGrad > posMin) {
currentGrad--;
myservo.write(currentGrad);
delay(timePL);
}
}

if ( statoPL == false && currentGrad < posMax) {
while (currentGrad < posMax) {
currentGrad++;
myservo.write(currentGrad);
delay(timePL);
}
digitalWrite( ledSemaf,LOW );
}

}

Qualcuno mi può dare una mano?

Grazie

>stefano71: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo