Der ein oder andere möchte vielleicht gern einmal einen Servo mittels Poti und einer ADC-Messung steuern.
Grundsätzlich ist das kein Problem.
Allerdings , sind die Wertebereiche beider etwas unterschiedlich !
Ein Servo kann i.d.R von 75 bis 225 und eine ADC-Messung von 0 bis 1023.
Würde man jetzt 1:1 die ADC-Werte übernehmen , müßte jetzt auch jeder Laie erkennen ,
das das so nicht gehen kann und unter Umständen sogar den Servo bzw. dessen Elektronik zerstören kann :!: :o
Also benötigt man eine Umrechung von 1023 möglichen ADC-Werten auf 150 mögliche Servopositionen.
Dazu reicht es wenn man sich einen Faktor errechnet mit :
1023 (mögliche ADC-Werte) : 150 (mögliche Servopositionen [75-225] ) = 6,8
Dazu hier ein kleiner Beispielcode mit einer 08M2 :
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#rem
Pinbelegung
----
V+ -| |- GND
Serin -| |- c.0/Serout
Servo/c.4 -| |- c.1/ADC
c.3 -| |- c.2
----
#endrem
#picaxe 08m2
let dirsc=%00010001
symbol ADC_Wert = w0
symbol ADC_Messung = w1
symbol Servo_Position = b4
symbol Servo_min = 75
Servo_Position=150 ' Mittelstellung
servo c.4,Servo_Position
Do
readadc10 c.1,ADC_Messung ' Spannung am Poti messen
if ADC_Messung<>ADC_Wert then ' hat sich Spannung geändert ...?
ADC_Wert=ADC_Messung ' neue Spannung merken
ADC_Messung=ADC_Messung *10 ' umrechnen auf
ADC_Messung=ADC_Messung /68 ' möglichen Servostellbereich
Servo_Position=Servo_min+ADC_Messung ' neue Position erechnen
servopos c.1,Servo_Position ' Servo neu Positionieren
endif
loop
end
Das gleiche kann man auch per LDR-Messung machen :
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#rem
5V+ -----------------------------
|
| |
---- | | LDR
V+ -| |- GND | |
Serin -| |- c.0/Serout |
Servo/c.4 -| |- c.1/ ---------
c.3 -| |- c.2 |
---- -
| |
20K | |
| |
-
|
|
GND -----------------------------
#endrem
#picaxe 08m2
let dirsc=%00010001
symbol LDR_Wert = w0
symbol LDR_Messung = w1
symbol Servo_Position = b4
symbol Servo_min = 75
Servo_Position=150 ' Mittelstellung
servo c.4,Servo_Position
Do
readadc10 c.1,LDR_Messung ' Spannung am LDR messen
if LDR_Messung<>LDR_Wert then ' hat sich Spannung geändert ...?
LDR_Wert=LDR_Messung ' neue Spannung merken
LDR_Messung=LDR_Messung *10 ' umrechnen auf
LDR_Messung=LDR_Messung /68 ' möglichen Servostellbereich
Servo_Position=Servo_min+LDR_Messung ' neue Position erechnen
servopos c.1,Servo_Position ' Servo neu Positionieren
endif
loop
end