Servo comando controllato da due potenziometri

Per muovere un puntatore laser o una videocamera in orizzontale (asse X) e in verticale (asse Y), è necessario agire su due controlli separati; è possibile utilizzare un joystick che agisce contemporaneamente su due potenziometri.

servo joystick

Il joystick è una apparecchiatura meccanica composta da un perno centrale che può essere spostato liberamente sul suo asse vincolato con uno snodo, in modo da controllare simultaneamente due potenziometri .

servo xy 1

3D System Panel

Aggiungo, nel 3D system panel, i nuovi oggetti necessari per gestire il movimento dell’asse Y:

  • Un servocomando -  “Standard_servo2
  • Un potenziometro - “Slider_plastic2”, che collego all’ingresso analogico “An1”, controllato dalla variabile ADC_inY.

Le luci verdi indicano i canali attivi.

Le frecce bianche identificano il collegamentoo al servocomando.

servo xy 2
servo xy 3

Nel 3D System Panel, seleziono il “ServoMotorController1” e attivo il secondo canale: Channel 1

  • Il Channel 0, controlla il servocomando “standard_servo1”.
  • Il Channel 1, controlla il servocomando “standard_servo2”.
  • Channel 0
  • Channel 1
  • standard_servo1
  • standard_servo2

Slider_plastic2

Slider_plastic1

standard_servo1

standard_servo2

Variabili

Recupero il programma di “visualizzazione dell’angolo del servocomando”, e aggiungo le nuove variabili necessarie per gestire l’asse Y.

Raddoppio le istruzioni utilizzate per gestire l’asse “X”, aggiungendo tre nuove variabili; due tipo Byte e una di tipo stringa.

Per distinguere le nuove variabili, rinomino le precedenti aggiungendo una “X” per differenziarle dalle nuove contrassegnate da una “Y”.

  • ADC_inX:
  • contiene il valore dell’ingresso An0
  • ADC_inY:
  • contiene il valore dell’ingresso An1
  • angoloX:
  • contiene il valore della posizione angolare di standard_servo1
  • angoloY:
  • contiene il valore della posizione angolare di standard_servo2
  • strX[4]:
  • stringa di contenente il valore angolare di standard_servo1
  • strY[4]:
  • stringa di contenente il valore angolare di standard_servo2

Il colore giallo rappresenta le variabili dell’asse X, il rosso indica le nuove variabili per l’asse Y.

Diagramma di flusso - inizializzazione

servo xy 4
  • Enable Servo:attiva sul “Chanel 1” lo standard_servo2.
  • Cursor (0,1): posiziona la stringa di testo contenuta, nella istruzionePrintString( “asse Y”), all’inizio della seconda riga del display LCD.

Le icone di colore rosso, rappresentano le nuove istruzioni per controllare l’asse Y.

Enable Servo

Cursor (0,1)

PrintString

 “asse Y”

Diagramma di flusso - ciclo principale

servo xy 5

Per controllare il secondo servocomando, standard_servo2, è necessario raddoppiare le istruzioni utilizzate per controllare lo standard_servo1.

Seleziono e copio le tre icone gialle è le incollo sotto cambiando il colore in rosso.

servo xy 6

Modifico le istruzioni sostituendo le variabili relative l’asse X con quelle per l’asse Y.

GetByte: acquisizione posizione potenziometro.

in

MoveToPosition:movimento del servocomando.

FloatToString$: conversione della posizione del servocomando in posizione angolare.

Visualizzazione dell’angolo dell’asse Y, sul display LCD.

Le istruzioni:

  • LCDI2C1::Cursor (10,1): stabilisce la posizione della stringa strY, sulla riga due del display.
  • LCDI2C1::PrintString(strY):visualizza alla posizione 10 della seconda riga, il valore di strY.

C Code

ADC_inX=slider_plastic1::getByte()

ADC_inY=slider_plastic2::getByte()

angoloX=servo_Controller1::MoveToPosition::(0,angoloX

angoloY=servo_Controller1::MoveToPosition::(1,angoloY)

in

ADC_inX = ADC_inX / 1.415

angoloX = ADC_inX * 1.415

strX =FloatTostring$ (ADC_inX)

ADC_inY = ADC_inY / 1.415

angoloY = ADC_inY * 1.415

strY =FloatTostring$ (ADC_inY)

in

rick 3Riccardo Monti