.. meta:: :language: it :description language=it: Embedded Systems Architecture: Esercitazione pilotare un SERVo :description language=en: Embedded Systems Architecture: Practice drive SERVO :keywords: Embedded Systems Architecture, Drive Servo :author: Luciano De Falco Alfano Sheet Arduino n.14 (Drive SERVO) ================================= .. contents:: :local: [*Lezione del xx yyy 2019*] Drive servo prima parte ------------------------- La `scheda della esercitazione n.14 `_, richiede di pilotare un servo. Abbiamo due parti. Nella prima, si forza il servo ad assumere gradualmente tutte le posizioni (angoli) possibili. Sia in senso crescente che decrescente. Non avendo il Grove starter kit, ho adattato l'esercizio utilizzando il servo del kit Arduino, come indicato nel seguente video: .. raw:: html Lo schetch è semplice: .. literalinclude:: ./exercises/sketch_sh14_1.ino :language: c :linenos: Alla ln 23 inizializzo l'istanza ``servo`` della classe ``Servo``, che uso per comandare il servomotore. E alla ln 28 indico il pin PWM 5 per pilotare il servomotore. Dopo di che lo porto in posizione 0° (ln 30) e attendo il tempo più sfavorevole per eseguire il comando precedente (ln 31). Dopo di che si entra in loop ordinando in sequenza di assumere gli angoli da 0 a 120 e viceversa. Mi ha deluso la funzione ``servo.read()`` in quanto pensavo avesse modo di conoscere l'effettiva posizione del servo. Non è così: riporta solo l'ultima posizione *richiesta* e non quella effettiva. Drive servo seconda parte --------------------------- Nella seconda parte, dobbiamo asservire il servo ad un potenziometro. Quindi dobbiamo leggere la tensione del potenziometro per poi *rovesciarla* sul servomotore facendo l'opportuna proporzione. .. raw:: html Lo schetch è il seguente: .. literalinclude:: ./exercises/sketch_sh14_2.ino :language: c :linenos: In questo caso il nucleo è alle linee 25, dove leggo la tensione del potenziometro, e 26 dove mappo linearmente la tensione letta all'angolo richiesto al servomotore.