Hallo,
ich habe vor kurzer Zeit mein STK500 bekommen und wollte natürlich etwas aus den neuen Möglichkeiten machen, die man mit uCs so hat. Als Einstiegsprojekt habe ich mir gedacht, ich könnte doch unsere Schiebetür vom Wohnzimmer zur Küche motorisieren. Da gibt es nämlich zwei Mankos:
1. Steht die Tür immer auf wenn man es mal gemütlich habe will (und niemand will sie zumachen)
2. Geht die Tür nicht auf, wenn man die Hände voll hat
Das erste Problem wurde teilweise durch Anbringen eines Gewichts, das über eine Rolle und ein Stahlseil die Tür automatisch zuzieht, gelöst. Allerdings wurde eine Art Haltefeder, die die Tür im ganz geöffneten Zustand aufhält, dringelassen. Darum stand die Tür trotzdem noch oft genug auf.
Gut, ich wollte also alles automatisieren, dazu habe ich
- zuerst mal ein paar Kabel verlegt und den Motor angebracht.
- dann Endschalter an den Endpunkten angebracht
- einen Reedkontakt angebracht, der dafür sorgt, dass die Tür vorm erreichen des Endschalters per PWM abgebremst wird
- zwei Aluminiumplättchen als Taster angebracht
- nach dem erfolgreichen Testen der Schaltung auf dem Experimentierbrett alles auf eine Platine gebracht
Es ergeben sich zwei Probleme:
1. Als besondere Funktion sollte die Tür zugehen, wenn man zweimal vernehmlich Klatscht. Denn was bringt eine motorisierte Tür, wenn man im Sessel sitzt und die Tür aufsteht? Die ungefähre Schaltung ist hier zu finden. Das Ganze wurde über die beiden Analog Comparatoren realisert und hat bestens funktioniert. Jetzt ist es aber so, dass die Schaltung hinten in der Ecke in der Küche angebracht ist und auch da bleiben muss. Das heißt, ich müsste lange Kabel legen, um die Mikrofonsignale zur Schaltung zu transportieren. Das Signal verliert sich aber scheinbar, denn es geht so nicht mehr. Was kann man dagegen machen?
2. Die Aluminiumplättchen als Taster sind zwar schön flach und dezent und schalten auch gut, aber irgendwie stimmt da was im Programm nicht. Veilleicht kennt sich auch in diesem Unterfroum jemand mit Bascom aus:
Das mit dem manuellen Türöffnen/schließen ist so zu verstehen, dass, wenn man die Tür so bewegt, dass der Endschalter nicht mehr betätigt wird, die Tür auf/zu geht, je nach vorheriger Stellung. Die Tür geht allgemein so schnell wie möglich auf und sehr langsam zu, damit sich das Seil nicht von der Rolle rollt, denn dann steht alles und wenn niemand den Stecker zieht, löst sich die H-Brücke in Qualm auf.Code:$regfile = "m8515.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 2500000 $baud = 9600 ' Definieren der allgemeinen Einstellungen Led1 Alias Portb.0 Config Led1 = Output Led2 Alias Porta.4 Config Led2 = Output ' Anzeige: LED1 = Tür ist auf / zu; LED2 = Zeit zum zweiten Klatscher Endschalter_auf Alias Pina.0 Config Endschalter_auf = Input Endschalter_zu Alias Pina.1 Config Endschalter_zu = Input ' Definieren des absoluten Endschalters Reedkontakt Alias Pina.2 Config Reedkontakt = Input ' Definieren der Vorabschaltung Taster Alias Pina.3 Config Taster = Input ' Definieren der Taster zum Türöffnen / Türschließen Porta.0 = 1 Porta.1 = 1 Porta.2 = 1 Porta.3 = 1 ' Interne Pullups einschalten Config Portd.5 = Output Config Porte.2 = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8 ' Definieren der PWM - Ports Dim X As Integer Dim Y As Integer Dim K As Integer Dim A As Bit Dim B As Bit Dim C As Integer Dim D As Integer Dim E As Integer Dim F As Integer Dim G As Integer Dim H As Integer Dim I As Integer Dim J As Integer A = 0 B = 0 K = 0 X = 0 Led2 = 0 Led1 = 0 ' Definieren der Variablen Do If Acsr.aco = 1 Then Led2 = 1 Do : Loop Until Acsr.aco = 0 Waitms 50 For Y = 1 To 20000 If Acsr.aco = 1 Then C = 1 Exit For End If Next Do : Loop Until Acsr.aco = 0 If C = 1 Then K = K + 1 If K = 2 Then K = 0 C = 0 Led1 = K End If Led2 = 0 End If ' Doppelklatschabfrage: Bei zweimaligem Klatschen wird zu K immer 1 dazuaddiert If Pina.3 = 0 Then For Y = 1 To 450 : Next For Y = 1 To 30 If Pina.3 = 0 Then J = 1 Next If J = 1 Then J = 0 K = K + 1 If K = 2 Then K = 0 Led1 = K End If Waitms 10 End If ' Tasterabfrage: Beim Betätigen eines Tasters wird zu K immer 1 dazuaddiert If K = 0 And Endschalter_zu = 1 And A = 0 Then Compare1b = 0 X = 0 Do Compare1a = X X = X + 1 Waitms 4 Loop Until X = 256 Do If Reedkontakt = 0 Then Exit Do Loop Do Compare1a = X X = X - 2 Waitus 1000 Loop Until X = 0 If Endschalter_zu = 1 Then Do Compare1a = 63 Loop Until Endschalter_zu = 0 End If Compare1a = 0 A = 1 B = 0 Waitms 200 End If ' Abfrage zum Türschließen auf Schalterdruck bzw. Klatschen hin If K = 1 And Endschalter_auf = 1 And B = 0 Then Compare1a = 0 X = 19 Do Compare1b = X X = X + 1 Waitms 100 Loop Until X = 33 Do Compare1b = X X = X + 1 For Y = 1 To 6850 If Reedkontakt = 0 Then Exit For Next If Reedkontakt = 0 Then Exit Do Loop For Y = 1 To 9 Compare1b = X X = X + 1 Waitms 65 Next Do Compare1b = X X = X - 1 Waitms 18 Loop Until X = 23 If Endschalter_auf = 1 Then Do Compare1b = 23 Loop Until Endschalter_auf = 0 End If Compare1b = 0 B = 1 A = 0 Waitms 200 End If ' Abfrage zum Türöffnen auf Schalterdruck bzw. Klatschen hin If Endschalter_zu = 1 And A = 1 Then Compare1a = 0 X = 18 Do Compare1b = X X = X + 1 Waitms 95 Loop Until X = 33 Do Compare1b = X X = X + 1 For Y = 1 To 6850 If Reedkontakt = 0 Then Exit For Next If Reedkontakt = 0 Then Exit Do Loop For Y = 1 To 10 Compare1b = X X = X + 1 Waitms 65 Next Do Compare1b = X X = X - 1 Waitms 18 Loop Until X = 23 If Endschalter_auf = 1 Then Do Compare1b = 23 Loop Until Endschalter_auf = 0 End If Compare1b = 0 B = 1 A = 0 K = 1 Led1 = K Waitms 200 End If ' Abfrage zum manuellen Türöffnen If Endschalter_auf = 1 And B = 1 Then Compare1b = 0 X = 16 Do Compare1a = X X = X + 1 Waitms 2 Loop Until X = 256 Do If Reedkontakt = 0 Then Exit Do Loop Do Compare1a = X X = X - 2 Waitus 1000 Loop Until X = 0 If Endschalter_zu = 1 Then Do Compare1a = 63 Loop Until Endschalter_zu = 0 End If Compare1a = 0 A = 1 B = 0 K = 0 Led1 = K Waitms 200 End If ' Abfrage zum manuellen Türschließen Loop
Sorry, das es so lange geworden ist, aber ich denke, dass man nur so alles Nötige versteht. Wäre cool, wenn mir jemand da helfen könnte.
MFG Manuel







Zitieren

Lesezeichen