Andamento del servo con Arduino

pilotare un servo con Arduino lo hai già imparato in alcuni dei miei precedenti articoli, ti mostro il risultato di alcuni esperimenti condotti sul controllo dell’andamento del servo, esperimenti condotti in collaborazione con Federico Ciccarese, amico, appassionato di innovazione e tecnologia.

andamento del servo

Hai già avuto modo di vedere alcuni dei progetti nati dalla mente di Federico e dalla nostra collaborazione:

  • Robot sfera presentato a Roma in occasione dell’Arduino Day 2012;
  • Umanoide lo studio delle matematiche che potrebbero consentire ad un robot di simulare la camminata umana;
  • Mano biomeccanica lo studio 3D di una mano riproducibile con una stampante 3D tipo RepRap;

Gli ultimi due progetti hanno ispirato anche il sito http://techtomove.com curato da Federico e sempre aggiornato sull’evoluzione dei nostri lavori insieme.

Controllare l’andamento del servo con Arduino

Il progetto parte da una premessa che ti invito a testare con un

Esercizio: apri e chiudi un dito e osserva la velocità che assume all’inizio, al momento di massima estensione e poco prima di completare la chiusura, avrai notato che non è costante ossia non si sposta sempre a velocità ed accellerazione uniforme.

Osservazione: da quanto hai osservato hai dedotto che l’andamento del servo a cui colleghi il dito della tua mano non può far variare il proprio andamento in modo costante ma dovrà avere un andamento più lento in partenza la cui velocità aumenta progressivamente per rallentare in prossimità del della massima estensione in cui inverte il verso di rotazione ed ricomincia ad aumentare fino a metà della chiusura per rallentare e fermarsi quando il dito è chiuso.

Il fenomeno che hai osservato ed ho provato a descriverti è un andamento del servo di tipo sinusoidale:

andamento del servo

per ottenerlo devi sconfinare nel mondo della trigonometria, ecco a cosa serve la trigonometria, a parte gli scherzi quella che stai per applicare è trigonometria applicata ala robotica.

Lo scopo di gestire l’andamento del servo

a cosa serve tutto questo ragionamento?

a parte ad aver trovato un’applicazione della trigonometria in robotica, lo scopo vero è poter programmare un robot perché i suoi movimenti siano più naturali possibili, stiamo parlando di Umanoidi.

Per calcolare la sinusoide che renda il controllo dell’andamento del servo tale da permettere un movimento abbastanza veritiero, Federico ha pensato alla funzione sin( X ) in cui X è l’angolo variabile.

Il vantaggio è che la funzione sin( X ) al variare di restituisce un valore compreso tra -1 ed 1 ( trigonometria ) per cui la velocità con cui ambia X ti consente di definire velocità del movimento ed intervallo di accelerazione e decelerazione in prossimità dei cambi di andamento sinusoidale.

Il servo che ho utilizzato per i miei esperimenti lo hai già visto in tanti altri:

andamento del servo

Le formule per pilotare l’andamento del servo

il solo valore di sin( X ) non è sufficiente ad essere utilizzato per controllare l’andamento del servo, in quanto il risultato varia tra -1 ed 1 ed otterresti un sevo che cambia da 0 a 1° perchè il grado -1 non è in grado di eseguirlo.

Il primo passo è calcolare il valore dell’angolo da inviare al servo, sai che un servo può ruotare da 0° a 180° e per sicurezza io evito di utilizzare gli estremi, almeno che non ne abbia bisogno, per cui considera l’escursione 10-170°; il punto centrale ossia quello della massima estensione del dito sarà (170-10)/2 = 160/2 = 80; puoi scrivere la formula come:

grado = (sin( X ) *80);

in cui al variare di sin( X ) da -1 a 1 otterrai un grado che varia da -80 a +80 gradi.

Sai che il servo non può riprodurre gradi inferiori a 0 ed inoltre che vorrei evitare di arrivare a 0° rimanendo a 10° per cui puoi sommare 90 al valore ottenuto e scrivere la formula come:

grado = (( sin(X) * 80 ) + 90 );

la cui variazione sarà 10° ….. 170° proprio quella che volevi ottenere per regolare l’andamento del servo.

Ho messo in un excel questa formula incrementando il valore di X di 0,5° ad ogni loop:

angolo sin(X) gradi
0,00 0,00 90,00
0,50 0,01 90,70
1,00 0,02 91,40
1,50 0,03 92,09
2,00 0,03 92,79
2,50 0,04 93,49
3,00 0,05 94,19
3,50 0,06 94,88
4,00 0,07 95,58
4,50 0,08 96,28
5,00 0,09 96,97
5,50 0,10 97,67
6,00 0,10 98,36
6,50 0,11 99,06
7,00 0,12 99,75
7,50 0,13 100,44
8,00 0,14 101,13
8,50 0,15 101,82
9,00 0,16 102,51
9,50 0,17 103,20
10,00 0,17 103,89
10,50 0,18 104,58
11,00 0,19 105,26
11,50 0,20 105,95
12,00 0,21 106,63
12,50 0,22 107,32
13,00 0,22 108,00
13,50 0,23 108,68
14,00 0,24 109,35
14,50 0,25 110,03
15,00 0,26 110,71
15,50 0,27 111,38
16,00 0,28 112,05
16,50 0,28 112,72
17,00 0,29 113,39
17,50 0,30 114,06
18,00 0,31 114,72
18,50 0,32 115,38
19,00 0,33 116,05
19,50 0,33 116,70
20,00 0,34 117,36
20,50 0,35 118,02
21,00 0,36 118,67
21,50 0,37 119,32
22,00 0,37 119,97
22,50 0,38 120,61
23,00 0,39 121,26
23,50 0,40 121,90
24,00 0,41 122,54
24,50 0,41 123,18
25,00 0,42 123,81
25,50 0,43 124,44
26,00 0,44 125,07
26,50 0,45 125,70
27,00 0,45 126,32
27,50 0,46 126,94
28,00 0,47 127,56
28,50 0,48 128,17
29,00 0,48 128,78
29,50 0,49 129,39
30,00 0,50 130,00
30,50 0,51 130,60
31,00 0,52 131,20
31,50 0,52 131,80
32,00 0,53 132,39
32,50 0,54 132,98
33,00 0,54 133,57
33,50 0,55 134,15
34,00 0,56 134,74
34,50 0,57 135,31
35,00 0,57 135,89
35,50 0,58 136,46
36,00 0,59 137,02
36,50 0,59 137,59
37,00 0,60 138,15
37,50 0,61 138,70
38,00 0,62 139,25
38,50 0,62 139,80
39,00 0,63 140,35
39,50 0,64 140,89
40,00 0,64 141,42
40,50 0,65 141,96
41,00 0,66 142,48
41,50 0,66 143,01
42,00 0,67 143,53
42,50 0,68 144,05
43,00 0,68 144,56
43,50 0,69 145,07
44,00 0,69 145,57
44,50 0,70 146,07
45,00 0,71 146,57
45,50 0,71 147,06
46,00 0,72 147,55
46,50 0,73 148,03
47,00 0,73 148,51
47,50 0,74 148,98
48,00 0,74 149,45
48,50 0,75 149,92
49,00 0,75 150,38
49,50 0,76 150,83
50,00 0,77 151,28
50,50 0,77 151,73
51,00 0,78 152,17
51,50 0,78 152,61
52,00 0,79 153,04
52,50 0,79 153,47
53,00 0,80 153,89
53,50 0,80 154,31
54,00 0,81 154,72
54,50 0,81 155,13
55,00 0,82 155,53
55,50 0,82 155,93
56,00 0,83 156,32
56,50 0,83 156,71
57,00 0,84 157,09
57,50 0,84 157,47
58,00 0,85 157,84
58,50 0,85 158,21
59,00 0,86 158,57
59,50 0,86 158,93
60,00 0,87 159,28
60,50 0,87 159,63
61,00 0,87 159,97
61,50 0,88 160,31
62,00 0,88 160,64
62,50 0,89 160,96
63,00 0,89 161,28
63,50 0,89 161,59
64,00 0,90 161,90
64,50 0,90 162,21
65,00 0,91 162,50
65,50 0,91 162,80
66,00 0,91 163,08
66,50 0,92 163,36
67,00 0,92 163,64
67,50 0,92 163,91
68,00 0,93 164,17
68,50 0,93 164,43
69,00 0,93 164,69
69,50 0,94 164,93
70,00 0,94 165,18
70,50 0,94 165,41
71,00 0,95 165,64
71,50 0,95 165,87
72,00 0,95 166,08
72,50 0,95 166,30
73,00 0,96 166,50
73,50 0,96 166,71
74,00 0,96 166,90
74,50 0,96 167,09
75,00 0,97 167,27
75,50 0,97 167,45
76,00 0,97 167,62
76,50 0,97 167,79
77,00 0,97 167,95
77,50 0,98 168,10
78,00 0,98 168,25
78,50 0,98 168,39
79,00 0,98 168,53
79,50 0,98 168,66
80,00 0,98 168,78
80,50 0,99 168,90
81,00 0,99 169,02
81,50 0,99 169,12
82,00 0,99 169,22
82,50 0,99 169,32
83,00 0,99 169,40
83,50 0,99 169,49
84,00 0,99 169,56
84,50 1,00 169,63
85,00 1,00 169,70
85,50 1,00 169,75
86,00 1,00 169,81
86,50 1,00 169,85
87,00 1,00 169,89
87,50 1,00 169,92
88,00 1,00 169,95
88,50 1,00 169,97
89,00 1,00 169,99
89,50 1,00 170,00
90,00 1,00 170,00
90,50 1,00 170,00
91,00 1,00 169,99
91,50 1,00 169,97
92,00 1,00 169,95
92,50 1,00 169,92
93,00 1,00 169,89
93,50 1,00 169,85
94,00 1,00 169,81
94,50 1,00 169,75
95,00 1,00 169,70
95,50 1,00 169,63
96,00 0,99 169,56
96,50 0,99 169,49
97,00 0,99 169,40
97,50 0,99 169,32
98,00 0,99 169,22
98,50 0,99 169,12
99,00 0,99 169,02
99,50 0,99 168,90
100,00 0,98 168,78
100,50 0,98 168,66
101,00 0,98 168,53
101,50 0,98 168,39
102,00 0,98 168,25
102,50 0,98 168,10
103,00 0,97 167,95
103,50 0,97 167,79
104,00 0,97 167,62
104,50 0,97 167,45
105,00 0,97 167,27
105,50 0,96 167,09
106,00 0,96 166,90
106,50 0,96 166,71
107,00 0,96 166,50
107,50 0,95 166,30
108,00 0,95 166,08
108,50 0,95 165,87
109,00 0,95 165,64
109,50 0,94 165,41
110,00 0,94 165,18
110,50 0,94 164,93
111,00 0,93 164,69
111,50 0,93 164,43
112,00 0,93 164,17
112,50 0,92 163,91
113,00 0,92 163,64
113,50 0,92 163,36
114,00 0,91 163,08
114,50 0,91 162,80
115,00 0,91 162,50
115,50 0,90 162,21
116,00 0,90 161,90
116,50 0,89 161,59
117,00 0,89 161,28
117,50 0,89 160,96
118,00 0,88 160,64
118,50 0,88 160,31
119,00 0,87 159,97
119,50 0,87 159,63
120,00 0,87 159,28
120,50 0,86 158,93
121,00 0,86 158,57
121,50 0,85 158,21
122,00 0,85 157,84
122,50 0,84 157,47
123,00 0,84 157,09
123,50 0,83 156,71
124,00 0,83 156,32
124,50 0,82 155,93
125,00 0,82 155,53
125,50 0,81 155,13
126,00 0,81 154,72
126,50 0,80 154,31
127,00 0,80 153,89
127,50 0,79 153,47
128,00 0,79 153,04
128,50 0,78 152,61
129,00 0,78 152,17
129,50 0,77 151,73
130,00 0,77 151,28
130,50 0,76 150,83
131,00 0,75 150,38
131,50 0,75 149,92
132,00 0,74 149,45
132,50 0,74 148,98
133,00 0,73 148,51
133,50 0,73 148,03
134,00 0,72 147,55
134,50 0,71 147,06
135,00 0,71 146,57
135,50 0,70 146,07
136,00 0,69 145,57
136,50 0,69 145,07
137,00 0,68 144,56
137,50 0,68 144,05
138,00 0,67 143,53
138,50 0,66 143,01
139,00 0,66 142,48
139,50 0,65 141,96
140,00 0,64 141,42
140,50 0,64 140,89
141,00 0,63 140,35
141,50 0,62 139,80
142,00 0,62 139,25
142,50 0,61 138,70
143,00 0,60 138,15
143,50 0,59 137,59
144,00 0,59 137,02
144,50 0,58 136,46
145,00 0,57 135,89
145,50 0,57 135,31
146,00 0,56 134,74
146,50 0,55 134,15
147,00 0,54 133,57
147,50 0,54 132,98
148,00 0,53 132,39
148,50 0,52 131,80
149,00 0,52 131,20
149,50 0,51 130,60
150,00 0,50 130,00
150,50 0,49 129,39
151,00 0,48 128,78
151,50 0,48 128,17
152,00 0,47 127,56
152,50 0,46 126,94
153,00 0,45 126,32
153,50 0,45 125,70
154,00 0,44 125,07
154,50 0,43 124,44
155,00 0,42 123,81
155,50 0,41 123,18
156,00 0,41 122,54
156,50 0,40 121,90
157,00 0,39 121,26
157,50 0,38 120,61
158,00 0,37 119,97
158,50 0,37 119,32
159,00 0,36 118,67
159,50 0,35 118,02
160,00 0,34 117,36
160,50 0,33 116,70
161,00 0,33 116,05
161,50 0,32 115,38
162,00 0,31 114,72
162,50 0,30 114,06
163,00 0,29 113,39
163,50 0,28 112,72
164,00 0,28 112,05
164,50 0,27 111,38
165,00 0,26 110,71
165,50 0,25 110,03
166,00 0,24 109,35
166,50 0,23 108,68
167,00 0,22 108,00
167,50 0,22 107,32
168,00 0,21 106,63
168,50 0,20 105,95
169,00 0,19 105,26
169,50 0,18 104,58
170,00 0,17 103,89
170,50 0,17 103,20
171,00 0,16 102,51
171,50 0,15 101,82
172,00 0,14 101,13
172,50 0,13 100,44
173,00 0,12 99,75
173,50 0,11 99,06
174,00 0,10 98,36
174,50 0,10 97,67
175,00 0,09 96,97
175,50 0,08 96,28
176,00 0,07 95,58
176,50 0,06 94,88
177,00 0,05 94,19
177,50 0,04 93,49
178,00 0,03 92,79
178,50 0,03 92,09
179,00 0,02 91,40
179,50 0,01 90,70
180,00 0,00 90,00
180,50 -0,01 89,30
181,00 -0,02 88,60
181,50 -0,03 87,91
182,00 -0,03 87,21
182,50 -0,04 86,51
183,00 -0,05 85,81
183,50 -0,06 85,12
184,00 -0,07 84,42
184,50 -0,08 83,72
185,00 -0,09 83,03
185,50 -0,10 82,33
186,00 -0,10 81,64
186,50 -0,11 80,94
187,00 -0,12 80,25
187,50 -0,13 79,56
188,00 -0,14 78,87
188,50 -0,15 78,18
189,00 -0,16 77,49
189,50 -0,17 76,80
190,00 -0,17 76,11
190,50 -0,18 75,42
191,00 -0,19 74,74
191,50 -0,20 74,05
192,00 -0,21 73,37
192,50 -0,22 72,68
193,00 -0,22 72,00
193,50 -0,23 71,32
194,00 -0,24 70,65
194,50 -0,25 69,97
195,00 -0,26 69,29
195,50 -0,27 68,62
196,00 -0,28 67,95
196,50 -0,28 67,28
197,00 -0,29 66,61
197,50 -0,30 65,94
198,00 -0,31 65,28
198,50 -0,32 64,62
199,00 -0,33 63,95
199,50 -0,33 63,30
200,00 -0,34 62,64
200,50 -0,35 61,98
201,00 -0,36 61,33
201,50 -0,37 60,68
202,00 -0,37 60,03
202,50 -0,38 59,39
203,00 -0,39 58,74
203,50 -0,40 58,10
204,00 -0,41 57,46
204,50 -0,41 56,82
205,00 -0,42 56,19
205,50 -0,43 55,56
206,00 -0,44 54,93
206,50 -0,45 54,30
207,00 -0,45 53,68
207,50 -0,46 53,06
208,00 -0,47 52,44
208,50 -0,48 51,83
209,00 -0,48 51,22
209,50 -0,49 50,61
210,00 -0,50 50,00
210,50 -0,51 49,40
211,00 -0,52 48,80
211,50 -0,52 48,20
212,00 -0,53 47,61
212,50 -0,54 47,02
213,00 -0,54 46,43
213,50 -0,55 45,85
214,00 -0,56 45,26
214,50 -0,57 44,69
215,00 -0,57 44,11
215,50 -0,58 43,54
216,00 -0,59 42,98
216,50 -0,59 42,41
217,00 -0,60 41,85
217,50 -0,61 41,30
218,00 -0,62 40,75
218,50 -0,62 40,20
219,00 -0,63 39,65
219,50 -0,64 39,11
220,00 -0,64 38,58
220,50 -0,65 38,04
221,00 -0,66 37,52
221,50 -0,66 36,99
222,00 -0,67 36,47
222,50 -0,68 35,95
223,00 -0,68 35,44
223,50 -0,69 34,93
224,00 -0,69 34,43
224,50 -0,70 33,93
225,00 -0,71 33,43
225,50 -0,71 32,94
226,00 -0,72 32,45
226,50 -0,73 31,97
227,00 -0,73 31,49
227,50 -0,74 31,02
228,00 -0,74 30,55
228,50 -0,75 30,08
229,00 -0,75 29,62
229,50 -0,76 29,17
230,00 -0,77 28,72
230,50 -0,77 28,27
231,00 -0,78 27,83
231,50 -0,78 27,39
232,00 -0,79 26,96
232,50 -0,79 26,53
233,00 -0,80 26,11
233,50 -0,80 25,69
234,00 -0,81 25,28
234,50 -0,81 24,87
235,00 -0,82 24,47
235,50 -0,82 24,07
236,00 -0,83 23,68
236,50 -0,83 23,29
237,00 -0,84 22,91
237,50 -0,84 22,53
238,00 -0,85 22,16
238,50 -0,85 21,79
239,00 -0,86 21,43
239,50 -0,86 21,07
240,00 -0,87 20,72
240,50 -0,87 20,37
241,00 -0,87 20,03
241,50 -0,88 19,69
242,00 -0,88 19,36
242,50 -0,89 19,04
243,00 -0,89 18,72
243,50 -0,89 18,41
244,00 -0,90 18,10
244,50 -0,90 17,79
245,00 -0,91 17,50
245,50 -0,91 17,20
246,00 -0,91 16,92
246,50 -0,92 16,64
247,00 -0,92 16,36
247,50 -0,92 16,09
248,00 -0,93 15,83
248,50 -0,93 15,57
249,00 -0,93 15,31
249,50 -0,94 15,07
250,00 -0,94 14,82
250,50 -0,94 14,59
251,00 -0,95 14,36
251,50 -0,95 14,13
252,00 -0,95 13,92
252,50 -0,95 13,70
253,00 -0,96 13,50
253,50 -0,96 13,29
254,00 -0,96 13,10
254,50 -0,96 12,91
255,00 -0,97 12,73
255,50 -0,97 12,55
256,00 -0,97 12,38
256,50 -0,97 12,21
257,00 -0,97 12,05
257,50 -0,98 11,90
258,00 -0,98 11,75
258,50 -0,98 11,61
259,00 -0,98 11,47
259,50 -0,98 11,34
260,00 -0,98 11,22
260,50 -0,99 11,10
261,00 -0,99 10,98
261,50 -0,99 10,88
262,00 -0,99 10,78
262,50 -0,99 10,68
263,00 -0,99 10,60
263,50 -0,99 10,51
264,00 -0,99 10,44
264,50 -1,00 10,37
265,00 -1,00 10,30
265,50 -1,00 10,25
266,00 -1,00 10,19
266,50 -1,00 10,15
267,00 -1,00 10,11
267,50 -1,00 10,08
268,00 -1,00 10,05
268,50 -1,00 10,03
269,00 -1,00 10,01
269,50 -1,00 10,00
270,00 -1,00 10,00

leggendo i valori ti sarai reso conto che l’ultima colonna passa da 90 a 170 a 10 gradi con un andamento che excel stesso mostra come:

andamento del servo

ho fatto anche test con valori differenti di incremento per rendere la variazione dell’andamento del servo più o meno veloce, ottenendo variazioni della sinusoide in frequenza, trovi un’utile spiegazione dei fenomeni che interessano l’andamento della sinusoide su wikipedia.

Lo sketch

per complicarti un po la vita ho realizzato uno sketch in cui la variazione dell’incremento di X è regolata da un potenziometro, al variare del valore letto sulpin analogico A5 ( 0-1023 ) fai variare il valore moltiplicatore da 0 a 8:

#include <Servo.h>

#define pinServo 3
#define rad2grad 57.295779513

float angolo = 0;
double sen   = 0;
float grado  = 0;
int pinPot   = A5;

Servo servoA;

void setup() {
  Serial.begin( 9600 );
  Serial.println( " ------------------ Avvio ------------------------" );

  pinMode( pinPot, INPUT );
  digitalWrite( pinPot, LOW );

  servoA.attach( pinServo );
  servoA.write( grado );
}

void loop() {

  int pot = ( analogRead( pinPot ) / 127 );

  Serial.print( "Potenziometro: " );
  Serial.print( pot );

  Serial.print( "angoloK: " );
  Serial.print( angolo );

  sen = sin( (angolo/rad2grad) );

  Serial.print( " sin(K): " );
  Serial.print( sen );

  grado = (( sen * 80 ) + 90 );

  Serial.print( " grado: " );
  Serial.println( grado );

  servoA.write( grado );

  angolo = (angolo + pot );
}

lo sketch è semplice, se hai bisogno di chiarimenti sul funzionamento commenta l’articolo.

Tuttavia voglio fare una precisazione all’uso della funzione sin(X) in quanto X deve essere specificato in radianti e non in gradi, per cui devi convertire gradi in radianti prima di passarli alla funzione sin().

La costante di conversione è:

57.295779513

che imposti alla linea 04 come rad2grad;

linea 26: rimappi il valore letto su A5 nel fattore di incremnto da 0 a 8, infatti 1023 /127 = 8…. arrotondato ad 8 essendo pot una variabile integer ( intero );

linea 34: calcoli il valore dell’angolo da gradi in radianti dividendo i gradi per la costante di conversione;

linea 46: ricalcoli il valore dell’angolo ( in gradi ) sommando il valore precedente con il valore calcolato alla linea 26.

Il video dell’andamento del servo

Per darti meglio l’idea di cosa significa tutto questo ho realizzato il seguente video:

in cui vedi che il valore di moltiplicazione passa da 0 a 8 mentre io ruoto il potenziometro con un momento di pausa quando il fattore di incremento vale 4.

Buon lavoro !!!

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/andamento-del-servo.html

22 comments

2 pings

Skip to comment form

    • gabriele on 12 ottobre 2013 at 08:19
    • Reply

    Ciao Mauro,
    Ti chiedo scusa se ho pubblicato lo sketch sul tuo sito, ti ringrazio per avermi risposto, ti volevo chiedere se eri d’accordo per darmi una mano per un mio progetto, che vorrei portare all’esame di maturità ?

    1. Ciao Gabriele,
      darti una mano mi fa piacere, questo non significa che io ti scriverò lo sketch o parte di esso, altrimenti la promozione la devono dare a me 🙂 io già l’ho avuta anni fa 😀

      Ti aiuto in questo modo, tu mi descrivi i problemi che incontri di natura procedurale ed io ti consiglio che articoli leggere o come uscirne, poi tu scrivi lo sketch.

      Mauro

    • Gabriele Carluccio on 12 ottobre 2013 at 11:45
    • Reply

    Va benissimo 😉 grazie mille …a me piacerebbe portare all’esame un prototipo di testa mobile tipo quelle che si usano in discoteca … Io fino ad oggi sono riuscito solo a controllare due servo da 180 gradi comandandoli da un joystick, poi guardando i vari progetti con i servo presenti sul suo sito ho deciso di modificare il funzionamento della testa mobile , aggiungendo allo sketch già fatto un’altro programma che mi faccia muove la testa in modo automatico, selezionando questo effetto con il pulsante presente nello stesso joystick . Comunque se per lei va bene e se non disturbo le posso inviare gli sketch tramite Facebook o mail …

    1. Ciao Gabriele,
      ti ringrazio per la proposta di invio sketch ma come ti ho scritto il progetto é tuo come l’esame e sarebbe scorretto se te lo facessi io.

      Cosa vuoi fare mi é chiaro, lo hai descritto più volte e bene.

      Su cosa ti sei bloccato? Che prove hai fatto e non riesci a superare?
      Hai provato a leggere il valore del pulsante e definire un’azione semplice dopo la pressione del pulsante?

      Io proverei a ottenere che premendo il pulsante i servo smettano di seguire il joystick e si posizionino a 0 gradi anche se sposto il joystick.

      Mauro

    • Gabriele Carluccio on 13 ottobre 2013 at 10:58
    • Reply

    Ciao e buongiorno Mauro,
    e bene , io mi sono bloccato proprio nel scrivere il codice, ciò avviene perche non ho mai fatto sketch dove si adoperavano pulsanti , ma anche perche a scuola nessuno mi ha mai dato una mano , infatti conosco poco di programmazione con arduino , e a proseguire questa passione in classe siamo solo in due . Comunque proverò a scrivere da solo uno sketch per pilotare un servo da 180° sia con un un potenziometro da 10k che automaticamente usando un pulsante e una resistenza da 330 ohm, le manderò poi qualche sketch su facebook cosi sempre se lei vuole … mi può dare qualche consiglio o dirmi dove sbaglio .
    In tanto mi metto già all’opera 😉

    Cordiali saluti e ringraziamenti,

    Gabriele.

    1. Ciao Gabrile,
      comincia con cose semplici, premere un pulsante e accendere un led.
      Continua con accendo e spengo un led con lo stesso pulsante, significa usare gli strati del led e ti servirà nel tuo progetto.

      In merito agli sketch prova ad inviarmeli in posta non su FB, tuttavia non posso garantirti di riuscire a guardarli spesso a causa degli impegni di lavoro.

      Mauro

    • Gabriele Carluccio on 26 ottobre 2013 at 19:00
    • Reply

    Ciao Mauro ,
    Sono riuscito a compilare lo sketch , e a farlo funzionare perfettamente.
    Sono contentissimo di essere riuscito di fare tutto ciò … non avrei mai pensato di poterci riuscire da solo .
    Ci terrei tanto a inviarti lo sketch , se mi dai la tua mail te lo invio 😉 !!!

    Cordiali saluti .

    Gabriele.

    1. Ciao Gabriele,
      perdonami ma non ricordo il progetto a cui stai lavorando.
      La mia email la trovi nella sezione contatti del blog.

      Mauro

    • Gabriele Carluccio on 30 ottobre 2013 at 17:31
    • Reply

    Ciao Mauro,
    Io ero intento nel realizzare una testa mobile con movimento sull’asse x e y grazie a due servo. … comunque :)… io non riesco a trovare il tuo indirizzo mail , nella sezione contatti del blog mi esce solo il tuo account su Facebook dove ti ho già scritto , e quello su Twitter … http://www.facebook.com/alfieri.maurohttp://twitter.com/#!/mauroalfieri … ma della tua mail non c’è traccia :/ …

    1. Ciao Gabriele,
      la mia email è scritta nella forma con la @ sostituito dall’at e il punto sostituito dalla parola dot.
      In ogni caso è la casella info del blog.

      Mauro

    • Gabriele Carluccio on 1 novembre 2013 at 20:28
    • Reply

    Aaaah in inglese 😉 mi sembrava strano … tradotta sarebbe @mauroalfieri.it …. ti chiedo scusa per la mia disattenzione, avevo notato solo Facebook e Twitter !!!

    • Gabriele Carluccio on 1 novembre 2013 at 21:30
    • Reply

    Mauro ,
    mi era venuta la curiosità di chiederti una cosa … con arduino è possibile registrare i valori di un potenziometro in modo tale da poter far ripetere al servo quante volte voglio io gli stessi movimenti senza dover eseguire ciclicamente gli stessi movimenti manualmente, ovvero senza usare sempre il potenziamento ? … usando un pulsante per “registrare” i valori , e un secondo per deselezionare tutto ciò .

    1. Ciao Gabriele,
      certo é possibile farlo, potresti usare la EEPROM o una SDCard su cui salvare il dato.

      La curiosità mi spinge a chiederti come mai non realizzi già le sequenze del servo in uno sketch, magari con due array uno per i gradi del servo ed uno per i tempi di pausa e poi usi quelli.

      Dovresti fare la medesima cosa in fase di registrazione tuttavia se sei tu a realizzare la sequenza con il potenziometro saprai già cosa desideri ottenere per ciascun movimento.

      Mauro

    • Giorgio on 12 agosto 2014 at 19:12
    • Reply

    Buongiorno, Mauro.

    Io sono giorgio e studio Meccatronica al I.T.I.S G. Vallauri a Fossano (CN), ed ho una vera e propria passione per i robot in particolare per la costruzione di protesi o altri modelli robot di natura antropomorfa.
    Ho ottime conoscenze in meccanica idraulica e altro che serve coi robot ma essendo un meccanico ho lacune in programmazione sopratutto a codice perchè per quanto riguarda la stesura di algoritmi o di formule matematiche o la decodifica di algoritmi in programmi quali Scretch o S4A (che serve anche per programmare arduino) non ho problemi.
    Io ho intenzione di costruire una mano meccanica con controllata da Arduino tramite Imput inviati da potenziometri collegati sul mio braccio. Le mie domande sono: Come devo modificare un codice scritto per controllare un solo servomotore per fargli controllare 16 servomotori e i rispettivi 16 potenziometri?
    Aggiungo una cosa che prima ho omesso cio non mi serve per test esami o concorsi e per mia pura passione .
    Attendo risposta cordiali saluti Giorgio

    1. Ciao Giorgio,
      sono confuso, mi scrivi
      “per quanto riguarda la stesura di algoritmi o di formule matematiche o la decodifica di algoritmi in programmi quali Scretch o S4A (che serve anche per programmare arduino) non ho problemi.”
      poi mi chiedi
      “Come devo modificare un codice scritto per controllare un solo servomotore per fargli controllare 16 servomotori e i rispettivi 16 potenziometri?”
      Probabilmente ho inteso io male quello che volevi esprimere.

      Cerco di rispondere alla tua domanda sui sedici potenziometri e servocomandi: innanzitutto Arduino Uno non ha sufficienti input ed output dovrai forse utilizzare un’arduino Mega o una shield servo tipo quella dell’adafruit di cui ho scritto un articolo.
      In merito al codice non ci sono grandi differenze se usi la Mega, puoi duplicare le righe di gestione dei servo e cambiare i parametri per adattarli ai 16 servo. Differente è l’approccio con la shield dell’adafruit che ha una sua libreria se non ricordo male.

        • Giorgio on 13 agosto 2014 at 20:18
        • Reply

        Ciao Mauro
        Grazie mille per la risposta volevo proprio sapere se potevo duplicare le righe o se dovevo fare altro.
        Riguardo l’utilizzo di Arduino Mega mi chiedevo se era uguale utilizzare più schede Arduino e se secondo te è meglio per ciò che devo fare io usare Arduino Mega o una Shield servo.

        1. Ciao Giorgio,
          per la scelta tra le due soluzioni mi servirebbe capire meglio cosa devi fare tu.
          Francamente sono entrambe buone soluzioni, tuttavia se hai anche 16 input penso che l’Arduino Mega sia ideale perché la servo shield non varia il numero di input analogici sulla uno e poi il codice resta il medesimo come struttura logica.

            • Giorgio on 14 agosto 2014 at 12:52

            Ciao Mauro
            Grazie mille per la risposta

    • Luca on 3 aprile 2017 at 14:52
    • Reply

    Buongiorno, per l’esame di maturità sto costruendo un inseguitore solare con Arduino. Le scrivo perché il mio unico problema è la velocità con la quale i servi si muovono (sono molto lenti). Può essere per un valore delle resistenze troppo alto ? Perché comunque dal mio programma provo a variare il delay ma nulla da fare.
    Per resistenze intendo quelle che ci sono in serie alle fotoresistenze per far leggere il valore.
    Grazie mille dell’attenzione.

    1. Ciao Luca,
      non ho compreso il tuo dubbio: riguarda la velocità dei servo? cosa c’entrano le resistenze? e a quali resistenze ti riferisci? In un inseguitore solare non ci sono resistenze sui sensori sono già essi delle fotoresistenze.

    • Vittorio Casacci on 13 novembre 2018 at 00:38
    • Reply

    Salve
    Ho poca dimestichezza con arduino, ma ho necessità di fare una piccola tavola vibrante (sismica) a scopo didattico, con variazione manuale delle frequenze e se possibile anche con variazione automatica secondo un incremento automatico predefinito .
    Intendo utilizzare un servo con coppia da 55kgcm, ovviamente con alimentazione esterna.
    Ho visto lo sketch e mi sembra molto interessante, che va bene come controllo manuale.
    Ho necessità inoltre di vedere su un display il valore della frequenza in cui si muove la tavola.
    Ora Le chiedo, ci sono degli sketch già predisposti che fanno questo?
    La ringrazio

    1. Ciao Vittorio,
      con l’esigenza specifica che hai non ho scritto nulla, puoi unire gli sketch di gestione del display con questo per ricavare il risultato desiderato.

  1. […] Una settimana prima avevamo pubblicato, sullo stesso sito, l’articolo con il codice  che rende armonico il movimento di un servo e sul quale sto ancora lavorando con lo scopo di realizzare uno sketch in grado do dare a tutta la mano un movimento armonico. […]

  2. […] ottenere i servo con movimento armonico puoi partire dalla teoria descritta in questo articolo e proseguire la lettura di questo articolo in cui oltre ad un singolo servo ne aggiungi 4, so che […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.