Muovere avanti e indietro un puntatore laser o una telecamera per video sorveglianza sono applicazioni tipiche dell’utilizzo di un meccanismo basculante, che fa oscillare l’oggetto, avanti e indietro in modo automatico intorno ad un asse.
Componenti da inserire nel 3D System panel.
Dal menu Inputs, seleziono il potenziometro (Slider), Dal menu Outputs, seleziono il Servo Motor Control e il Servo Motor (standard).
Diagramma di Flusso
“Canale 0”
Ciclo Principale
Movimento del servocomando dalla posizione “Angolo = 0” alla posizione “Angolo = 255”.
“Delay”, dipendente da ADC_in
Movimento del servocomando dalla posizione “Angolo = 255” alla posizione “Angolo = 0”.
Copio il ciclo Loop 256 times” e lo incollo sotto il ciclo precedente.
cambio la funzione Calcolo, sostituendo l’istruzione Angolo = Angolo +1, con l’istruzione Angolo = Angolo -1”, in questo modo la posizione del servocomando si sposta dalla posizione “Angolo = 255” alla posizione “Angolo = 0”.
Il movimento avanti e indietro si ripete finchè il programma è fermato manualmente.
C Code
Angolo
MoveToPosition
Angolo = Angolo - 1
La funzione Calcolo, con l’istruzione Angolo = 0, porto il servocomando nella posizione zero.
Con l’istruzione angolo = angolo + 1”, incremento il valore della variabile “Angolo da 0 a 255, ad ogni ciclo dei 256 definiti con “Loop 256 Times”.
“Delay”, dipendente da ADC_in
Il Component macro con l’istruzione ADC_in=slider_plastic1::Getbyte(), acquisisce il segnale analogico presente sulla porta An0 e lo converte in 256 Byte.
Il ciclo secondario “Loop 256 Times”, con Loop Count = 256, è ripetuto 256 volte.
Nel diagramma di flusso, inserisco il Component Macro per “inizializzare” il Servo Motor control, e il Component Macro per abilitare il controllo del servocomando sul “canale 0”.
Servo Enable
“Canale 0”
In Properties Panel:
servo Motor (Standard)
Variabili
Nel ciclo secondario, ripetuto 256 volte, inserisco la funzione “Delay”, dipendente da ADC_in; questa istruzione determina la velocita di movimento del servocomando.
Inserisco il Component Macro con l’istruzione:
Angolo=Servo_control1::MoveToPosition(0,Angolo);
muovo il servocomando collegato al “canale 0” in funzione del valore della variabile “Angolo”
Initialize
GetByte
ADC_in
Riccardo Monti