Im XXVIw sollten von Anfang an Ausfahrgeräte eingebaut werden.
Zur Steuerung der Antriebsmotoren der einzelnen Ausfahrgeräte bedurfte es einer passenden Ansteuerung, der Einfachheit halber entschied ich mich für eine einfache Relaisansteuerung. Da die verwendeten Motoren nur eine geringe Leistungsaufnahme hatten brauchten die benötigten Relais eher schmächtiger Natur zu sein. Ein erster Blick beim Elektronikversand präsentierte mir aber saftige Preise für diese Relais, sodass ich mich nach Alternativen umschaute. In meinem Fundus hatte ich noch aus uralten Tagen eine Schublade voll mit kleinen bistabilen Relais mit nur einer Spule die bisher nie für irgendwas von Nutzen waren. Hier hatte ich endlich mal die Möglichkeit die Dinger zu verbauen und auch Geld für einen Neukauf zu sparen. Es muss eigentlich nur die Spannung an der Spule umgepolt werden um die Relais an- oder aus zu schalten. Da der zu verwendende PICAXE 18m2 genug freie Pins hat war das kein Problem. Bei 5 Relais wurden 10 Pins benötigt, dazu noch der Pin welcher mit dem Empfänger verbunden wird.
Vor einiger Zeit hatte ich mal ein einfaches Programm zusammengeschrieben, welches eine simple Tip Auswertung eines Fernsteuerkanals mit im Prinzip beliebig vielen Ausgängen darstellt. Einmal lang tippen, erster Kanal ein. Einmal kurz, einmal lang, zweiter Kanal ein und so weiter. Gleiche Prozedur um den entsprechenden Kanal wieder auszuschalten. Anzahl der Kanäle +1 tippen schaltet alle Kanäle aus. Mit ein bisschen Übung hat man das Timing schnell raus. Hat man sich vertan oder ist man sich unsicher genügt es 2 Sekunden zu warten und dann wieder neu zu beginnen. Die dazu gehörige Schaltung gestaltete sich auch recht einfach und wurde in kurzer Zeit entworfen. Ich habe dann das Ganze auf eine Lochrasterplatine gebaut um die Funktionsfähigkeit zu testen. Vor Allem der direkte Anschluss der Relaisspulen ohne Freilaufdiode an den Pins des Mikroprozessors machte mir Sorgen. Der Spuleninnenwiderstand lag noch so gerade eben im Bereich des maximalen Stroms den der PICAXE pro Pin schalten kann. Um das zu testen habe ich ein kurzes Testprogramm geschrieben welches alle Relais auf einmal in schneller Reihenfolge an- und wieder ausschaltet. Nach einer guten halben Stunde im Dauerfeuer mit 5 Schaltvorgängen pro Sekunde lebte der Chip immer noch und arbeitete klaglos. Einem Weiterbau stand also nichts im Wege. Die Schaltung wurde um Leuchtdioden erweitert die den Schaltzustand anzeigen, aber es waren immer noch Pins frei die ungenutzt waren.
Diese wurden genutzt, um den Schnorchel anzusteuern. Da der Schnorchel mit einem Servo angetrieben wird liessen sich sehr einfach die eingebauten Servobefehle im PICAXE einsetzen. Natürlich kann man nicht einfach den Mast in der "originalen" Servogeschwindigkeit aufstellen, das sähe sehr unrealistisch aus. Also wurde eine Softwareverzögerung kurzerhand in das Programm integriert sodass eine Ansteuerung mit einem separaten Empfängersignal unnötig wurde und mit einem "Schaltkanal" ausgelöst werden konnte. Der sechste Kanal ist nun für das Ein- und Ausfahren des Schnorchels vorgesehen. Eine LED zeigt den Betriebszustand an. Über zwei Potis kann die Verzögerungsgeschwindigkeit und der Endanschlag des Servos eingestellt werden, dies hilft an die örtlichen Gegebenheiten anzupassen und macht die Schaltung auch für andere, ähnliche Anwendungen geeignet. Die ganze Schaltung ist mit Fädeldraht verdrahtet, das ist natürlich nicht gerade Servicefreundlich, aber vielleicht bau ich mal ne ordentliche Platine dazu, die Schaltung dazu habe ich auf jeden Fall entworfen.
Servoschaltungen mit PICAXE neigen schon mal zum sogenannten "Jitter", das macht sich durch kurzes Zucken am Servo bemerkbar. Dieser Jitter ist ein Hardwareproblem, kann aber minimiert werden. Aus diesem Grund wurden in der Software entsprechende Kommandos eingebaut und auch der Pullup Widerstand am Servoausgang trägt zur Unterdrückung bei. Auch spielt das Servo selbst eine gewisse Rolle, manche Servos sind unempfindlicher. Da muss man einfach ausprobieren. Mit meinen Komponenten konnte ich das Zucken komplett unterdrücken.
Einer dieser Befehle in der Software sorgt dafür, dass der Chip nicht mehr den seriellen Eingang abfragt. Dieses wurde nötig, da das hinzufügen der Leuchtdiode am letzten freien Output Pin c.3 das Servo wieder zum Zucken veranlasste. In Konsequenz kann der Chip nun nicht mehr umprogrammiert werden wenn man nicht einen kleinen Trick anwendet: Man muss die Datenübertragung starten und erst dann sofort im Anschluss den Chip mit dem PC verbinden, dann klappts auch mit dem Neubespielen.
;5kanalschalter mit 18m2
#picaxe 18m2
sertxd ("5kanalschalter mit 18m2",cr,lf) ;text wird bei einschalten zur identifizierung des chips gesendet
disablebod
disconnect
;variablen definieren
;c.0/1= Rel1
;c.6/7= Rel2
;b.6/7= Rel3
;b.4/5= Rel4
;b.2/3= Rel5
symbol Schnorchelservo = b.0
symbol Verzoegerung =b.1
symbol Endansch = c.2
symbol schnorchelled = c.3
symbol Eingang = c.5
symbol zaehler = b0
symbol nummer = b1
symbol poti = b2
symbol schnorchel = b3
symbol endanschlag = b4
symbol minanschlag = b5
symbol empfaenger = b6
;variablen setzen
let dirsB = %11111111 ;ports initialisieren
let dirsC = %11000011
let pinsB = %00000000 ;ports setzen
let pinsC = %00000000
let minanschlag = 80
;nur beim ersten mal
gosub relaisaus ;alle afg einfahren
nummer =-1
;hauptschleife
main:
if time >1 then ;setzt den ledzaehler zurueck wenn keine eingabe
nummer=0
endif
pulsin Eingang,1,empfaenger
if empfaenger > 180 then ;taste ist gedrückt
gosub signal
endif
goto main ;und von vorne
signal:
zaehler =0 ;zaehler auf null
time=0 ;zeit zuruecksetzen
signal2:
pulsin Eingang,1,empfaenger
if empfaenger < 160 then ;wenn taste losgelassen dann wieder alles von vorne
return
endif
zaehler=zaehler+1 ;ansonsten zaehler starten
pause 10 ;kleine pause
select case zaehler
case 2 ;kurz gedrueckt dann lednummer inkrementieren
inc nummer
case 5 ;lang gedrueckt dann auswahl
branch nummer,(nix,rel1an,rel2an,rel3an,rel4an,rel5an,schnorchelaus,ende)
nix:
goto raus
rel1an:
if pinc.0 = 1 then ;wenn relais auf ausfahren steht dann
low c.0 : high c.1 : else ;einfahren, togglefunktion
high c.0 : low c.1 ;ansonsten afg ausfahren
endif
goto raus
rel2an:
if pinc.7 = 1 then ;wenn relais auf ausfahren steht dann
low c.7 : high c.6 : else ;einfahren, togglefunktion
high c.7 : low c.6 ;ansonsten afg ausfahren
endif
goto raus
rel3an:
if pinb.6 = 1 then ;wenn relais auf ausfahren steht dann
low b.6 : high b.7 : else ;einfahren, togglefunktion
high b.6 : low b.7 ;ansonsten afg ausfahren
endif
goto raus
rel4an:
if pinb.4 = 1 then ;wenn relais auf ausfahren steht dann
low b.4 : high b.5 : else ;einfahren, togglefunktion
high b.4 : low b.5 ;ansonsten afg ausfahren
endif
goto raus
rel5an:
if pinb.2 = 1 then ;wenn relais auf ausfahren steht dann
low b.2 : high b.3 : else ;einfahren, togglefunktion
high b.2 : low b.3 ;ansonsten afg ausfahren
endif
goto raus
schnorchelaus: ;schnorchel ausfahren
gosub adlesen
if schnorchel > 100 then ;wenn schnorchel auf ausfahren steht dann
gosub schnorchelein
goto raus
else ;einfahren, togglefunktion
for schnorchel = minanschlag to endanschlag
pause poti
servo Schnorchelservo,schnorchel
next
high schnorchelled ;schnorchelled ein
goto raus
endif
ende:
gosub relaisaus ;alle afg und schnorchel einfahren
raus:
endselect
pause 100 ;kleine pause
goto signal2
relaisaus: ;alle afg einfahren
let pinsB = %10101000 ;ports setzen
Let pinsC = %01000010
schnorchelein: ;schnorchel einfahren
if schnorchel < 100 then ;schon ausgefahren? dann überspringen
return
else
gosub adlesen
for schnorchel = endanschlag to minanschlag step -1
pause poti
servo Schnorchelservo,schnorchel
low schnorchelled ;schnorchelled aus
next
return
endif
adlesen:
readadc Verzoegerung,poti
poti=poti/10
readadc Endansch,endanschlag ;endanschlag lesen
endanschlag = endanschlag/10
endanschlag = 210-endanschlag ;wert auf 185-210 begrenzen
return