Show Posts
Pages: [1]
1  International / Deutsch / Re: Habe vergessen wie man "Unterprogramme" macht on: January 24, 2013, 07:18:08 am
Hallo michael_x,
ich weiss nicht wie umfangreich Haukes Programmierfähigkeiten sind, ich persönlich war mit den vorherigen Hilfen etwas überfordert.
Deswegen hab ich meinen einfachen Vorschlag eingebracht. Dass mein Code in dieser Form nicht unterbrechbar ist, ist mir bewusst, ich verstehe allerdings leider nicht warum die vorher genannten Beispiele unterbrechbar sind. Eine kleine Hilfe (gerne Stichpunktartig) wäre großartig, damit ich da programmiertechnisch dazulerne. Ich arbeite mich gerade etwas in die MsTimer2 Libraray ein, mit der ja, wenn ich das richtig verstehe, parallele Prozesse möglich sind ... Beste Grüße!
2  International / Deutsch / Re: Habe vergessen wie man "Unterprogramme" macht on: January 08, 2013, 07:58:21 am
Hallo,
so würde ich das machen - im Prinzip. Habs nicht getestet, im Groben müsste es aber funktionieren...
Eine Funktion fürs gehen,
eine Funktion fürs drehen,
und eine Funktion mit dem gehen / drehen Ablauf fürs komplette Rechteck, die dann aufgerufen wird.

Beste Grüße!

Code:

int motorPinLinks = 9;   
int motorPinRechts = 8; 


void setup()  {
  digitalWrite(motorPinLinks, LOW);
  digitalWrite(motorPinRechts, LOW);
}

void loop()  {
  rechteckGehen();
  delay (1000);
}

// Funktion - damit sich beide Räder drehen mit der Variable dauer für die Fahrtzeit
void gehen(int dauer){
  digitalWrite(motorPinLinks, HIGH);
  digitalWrite(motorPinRechts, HIGH);     
  delay(dauer);
  digitalWrite(motorPinLinks, LOW);
  digitalWrite(motorPinRechts, LOW);
}
// Funktion - damit sich nur das linke Rad dreht mit der Variable dauer für die Drehzeit
void drehen(int dauer){
  digitalWrite(motorPinLinks, HIGH);
  delay(dauer);
  digitalWrite(motorPinLinks, LOW);
}
// Funktion für das Rechteck
void rechteckGehen(){
  // Schleife, um den Ablau drinnen 4 mal auszuführen
  for(int i = 1 ; i <= 4; i++) {
    gehen(1000);
    delay(10); // 10 Millisekunden warten zwischen gehen und drehen
    drehen(100);   
    delay(10); // 10 Millisekunden warten zwischen gehen und drehen
  }
}



3  International / Deutsch / Uhr Steuerung Polarität invertieren / Nebenuhr on: January 21, 2012, 10:35:37 am
Hallo zusammen,

da meine Uhr schon seit Monaten läuft, will ich hiermit das fertige Projekt vorstellen, evtl. hilft das ja jemandem weiter.
Manches würde ich mittlerweile, mit etwas mehr gesammelter Erfahrung vermutlich anders lösen, dennoch läuft das Ganze und das ist ja das Wichtigste.

Die Schaltung im Groben:

Stromversorgung:
Trafo sec.2x12V in Reihe also ca. 24V  
gleichgerichtet und geglättet zum L293 als Schaltspannung der Uhr
und zum Spannungsregler 5V als Stromversorgung des Arduino und des L293

Arduino:
Der Arduino in Minimalkonfiguration
basiert hierauf: http://arduino.cc/en/Main/Standalone

Uhrsteuerung:
Die H-Brücke l293 gibt an die beiden Anschlüsse der Nebenuhr jede Minute einen kurzen Impuls von 24V mit wechselnder Polarität ab.
Mit dem Schalter kann man die Uhr stellen:
Kurz drücken gibt einen, gedrückt halten gibt mehrere Impulse nacheinander ab.

Das Ganze ist jetzt in einer Plastikkiste verstaut.


Zur Genauigkeit:
Als die Schaltung noch auf meinem Steckbrett aufgebaut war bin ich schier verzweifelt,
da die Uhr mal zu schnell, mal zu langsam gelaufen ist (nach ein paar Stunden war sie schon einige Minuten daneben).
Ich habe dann versucht das über die Programmierung auszugleichen, was aber nicht funktionierte.
Irgendwann war mir das egal und ich hab die Platine geäzt, gelötet und angeschlossen - und siehe da es funktioniert.
Ich muss jetzt die Uhr schon hin und wieder mal nachstellen - allerdings eher im Monatsrhythmus, was für mich akzeptabel ist.

Eine ganz gute Anleitung zum Ätzen der Platine gibt es hier:
http://www.analog-synth.de/selberaetzen/selberaetzen.htm
ich hab das im Copyshop auf Klarsichtfolie drucken lassen und dann doppelt genommen.
Belichter ist bei mir eine uralte Höhensonne.

Hier dann noch der Code:

Code:
#include <Bounce.h>
#include <Time.h>

int freigabePin = 6; // ehemals D9
int motorPin1 = 5;
int motorPin2 = 3; // ehemals D6
int knopfPin = 2;
// Instantiate a Bounce object with a 5 millisecond debounce time
Bounce bouncer = Bounce( knopfPin,5 );
// Motorsteuerung
int impulsdauer = 350;
int richtung = 0;
// Zeitsteuerung
long previousTime = now(); // in Sekunden
int impulsabstand = 60; // in Sekunden
long currentTime = now(); // in Sekunden


void setup() {
  //  Serial.begin(9600); // debuggingleiche
  pinMode(freigabePin,OUTPUT);
  pinMode(motorPin1,OUTPUT);
  pinMode(motorPin2,OUTPUT);
  pinMode(knopfPin,INPUT);
}

void loop() {
  UmfallenTask();
  BounceTask();
}

// ruft nach Ablauf von "impulsabstand" -1 Sekunden (zählt ab 0) den "RepeatTask()" auf.
void UmfallenTask(){
  long currentTime = now();
  if(currentTime - previousTime > impulsabstand-1) {
    previousTime = currentTime;
    RepeatTask();
  }
}
// auf Knopfdruck wird:
// - "RepeatTask()" aufgerufen - um eine Minute weiterzustellen
// - "previousTime = currentTime" gesezt, um den Neuen Startpunkt eines Zyklus zu setzen ("MinutenNeustart")
void BounceTask(){
  bouncer.update ( );
  int value = bouncer.read();
  if ( value == HIGH) {
    RepeatTask();
    //long currentTime = now();
    previousTime = now();    
    // minutenCount=0;
    // stundenCount=0;

  }
}

// hier wird der Uhrantriebsmotor um eine halbe Umdrehung gedreht
void RepeatTask(){
  switch(richtung){
  case 0:
    digitalWrite(freigabePin,HIGH);
    digitalWrite(motorPin1,HIGH);
    digitalWrite(motorPin2,LOW);
    delay(impulsdauer);
    digitalWrite(freigabePin,LOW);
    richtung=1;
    break;
  case 1:
    digitalWrite(freigabePin,HIGH);
    digitalWrite(motorPin1,LOW);
    digitalWrite(motorPin2,HIGH);
    delay(impulsdauer);
    digitalWrite(freigabePin,LOW);
    richtung=0;
    break;
  }
}

Und hier ein Paar Fotos und das Fritzing Projekt:

4  International / Deutsch / Re: Platinen Ätzen, Laser-drucker-Methode on: March 21, 2011, 11:54:33 am
Hi,
ich mach das mit Fritzing, da mir eagle bisher für meine einfachen Platinen zu umfangreich ist.
Wenn man "am Raster ausrichten" aktiviert, passts auch mit den Abständen.

Grüße!
5  International / Deutsch / Re: Uhr Steuerung Polarität invertieren on: February 07, 2011, 05:25:48 am
Hallo!
Ein Foto von dem schönen Stück gibts gerne heute Abend - bin grad in der Arbeit ...
Bezüglich des Relais hab ich mich vermutlich ungenau ausgedrückt.
Das Relais ist nur mein "Platzhalter" für die Motorspule, die Ansteuerung würde über die Transistoren laufen.
"H-Brücke -  L293D" sagt mir gar nichts, aber da mach ich mich mal schlau - Danke für den Tip!

Grüße!
6  International / Deutsch / Uhr Steuerung Polarität invertieren on: February 07, 2011, 04:44:03 am
Hallo zusammen,
ich möchte eine alte Uhr mit Klappanzeigen reanimieren.
Wenn ich die 2 Anschlüsse des Motors kurz an 20V Gleichstrom anschliesse, dreht sich der Motor eine halbe Umdrehung weiter, und die nächste Minute klappt um.
Danach muss ich die Polarität tauschen, um eine weitere halbe Umdrehung zu bewirken usw..
Die Stunden, Tage, Wochentage, Monate laufen mechanisch entsprechend mit.
Ich brauche also eine Schaltung, die mir jede Minute für ca. 1 Sekunde 20 Volt ausgibt und das mit abwechselnder Polarität.
("Läuft" der Arduino eigentlich so genau, dass ich das so steuern kann, sprich ist ne Stunde in Millisekunden auch exakt ne Stunde, oder läuft das dann nach einigen Tagen / Wochen auseinander?)
Die Spule am Motor hat 1Kohm, der fliessende Strom sollte also 20mA sein (???), ist mit meinem Multimeter aber nicht messbar (warum eigentlich nicht ???)...

Weiter unten 2 jpgs mit dem Steckbrett und dem dazugehörigen Schaltplan meiner Schaltungsidee.
Jetzt würde ich gerne wissen, ob meine Schaltung Sinn macht.
Die Batterie soll meine 20V Stromversorgung und das Relais meinen Motor darstellen.
Wenn D0 auf HIGH steht (D1 LOW) liegt bei dem Relais links Plus und rechts über den Widerstand Masse an.
Wenn D1auf HIGH steht (D0 LOW) liegt bei dem Relais rechts Plus und links über den Widerstand Masse an.
Wenn beide Outputs LOW sind, liegen beide Relaispole an Masse und nichts passiert.

Muss ich bei dem Motor (hier das Relais) eigentlich auch Schutzdioden integrieren ??? die müssten dann ja auch in beide Richtungen gehen, damit wäre deren Sinn dahin... ???

Oder:
gibts dafür evtl. ne viel einfachere Lösung?

Freue mich über jede Hilfe!
Beste Dank schonmal für Ratschläge!
Schöne Grüße!



Pages: [1]