manu418
12.10.2010, 15:07
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 (http://www.erdbeere.com/KS/) 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:
$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
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.
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
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 (http://www.erdbeere.com/KS/) 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:
$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
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.
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