Herzlich Willkommen im einzigen (deutschsprachigem) Picaxe-Forum.

Der Ursprung dieses Forum reicht bis in das Jahr 2008 zurück


Servo per ADC steuern

#1 von BoomBoomMagic , 26.01.2019 19:09

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 :


1
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 :

1
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
 

 

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019


   

Shift Register an der Picaxe
Schwellwert /Hysterese programmieren

Picaxe Editor 5.5.5 Download
Update auf Picaxe Editor 5.5.6 Download
Picaxe Editor 6.x.x.x Download
Manual1.pdf        -      Grundwissen Download
Manual2.pdf        -      Befehle Download
Manual3.pdf        -      Beispiele Download


Press [Backspace] for back to Menu


Counter
Xobor Forum Software ©Xobor.de | Forum erstellen
Datenschutz