Steuerung Zuganlage Schießstand

Hallo Ardu Spezis...!

Bin neu hier, kurze Vostellung:

Name: Gerhard
Alter: 49 1/2
Beruf: IT-Fw Bw
Hobbys: Modellbau, Elektronik, CNC (Fräsen und Bau)

Mein Anliegen:
Ich möchte eine elekronische Schaltung an einem Schießstand (Scheiben-Zuganlage), die im wesentlichen durch Logik-ICs und einem Diodenkodiertem Eingang an einem 4040 besteht, durch einen Arduino ersetzten, da das ganze mittlerweise sehr anfällig geworden ist...!

Die Schaltung Steuert einen Motor/Bremse der die Scheiben auf z.B. 50 oder 100 Meter fährt! Praktisch sieht das wie folgt aus:
Taster "Bremse lösen" gedrückt halten (Relais schaltet Bremse aus) und zusätzlich den Taster "Start" drücken - nun startet der Motor (Relais "vorwärts") und fährt die Scheibe auf z.B. 100 Meter. Das "Vorwärts-Relais" fällt kurz vor erreichen der 100 Meter ab und das Bremsrelais fällt bei erreichen der 100 Meter ab und bremst den Antrieb. Bei erneutem drücken des Bremstasters und Starttasters fährt die Scheibe wieder in die andere Richtung...
Gesteuert wird die Schaltung über Impulse aus einer Lichtschranke an dem Antrieb - dabei werden die Umdrehungen gezählt und durch einen digitalen Zähler/Teiler ausgewertet! Für 100 Meter werden ca. 7000 Impulse gezählt.

Da ich ein absoluter Ardu-Dau bin hoffe ich einige Anregungen hier zu erhalten!

Die Aufgabenstellung lautet wie folgt:

  1. Taste 1 betätigt das Bremsrelais; wird Taste 1 gelößt fällt das Bremsrelais wieder ab.
  2. Taste 1 und Taste 2 starten den Antrieb (Relais vorwärts und Relais Bremse ziehen an), es werden nach z.B. 6700 gezählten Impulsen das Vorwärts-Relais abgeschaltet und nach 7000 gezählten Impulsen das Bremsrelais abgeschaltet.
  3. Nach erneutem betätigen der Taster 1 und 2 fährt die Scheibe mit oben genannten Einstellungen wieder zurück.

Schön wäre ein Display, in der die Entfernung oder auch die Impulse angezeigt werden könnten. Optional wäre eine Tastenprogrammierung eine feine Sache, muß aber nicht sein :wink:

Ich hoffe das soweit verständlich rübergebracht zu haben und freue mich auf eure Anregungen oder Ideen :slight_smile:

Grüße
Gerhard

http://www.ebay.de/itm/like/291744886201
Mit Arduino UNO, Relais und Menü Library

frage: was für ein motor, was für eine bremse (gleichstrom, wechselstrom, ampere).

wenn dann gleich die alten relais mit raus. wenns eh schon ausfälle gibt, dann ne fehlerquelle weniger.
bedienung: ein knopf für jeweilige entfernung (0,50,100) - fertig. wozu unnötiges geblinke mit display. brauchts genausowenig wie ne sprachsteuerung. einfach ein paar messdurchläufe, entfernung bestimmen und im code dann den zähler für die "7000"-pings von der lichtschranke angepasst. keep it simple.

wenn auf dem seil kleine stabmagnete (neodyn rund 3mmx15mm in der art) anbringst und die auch über die antriebsrolle laufen würden, könntest du auf das relativ ungenaue umdreungen zählen verzichten und hättest absolute stopsignale.

Gertilein:
Ich hoffe das soweit verständlich rübergebracht zu haben und freue mich auf eure Anregungen oder Ideen :slight_smile:

Hallo Gerhard,
mir fehlt eine Angabe, wie zwischen 50 und 100 Metern unterschieden werden soll.

Die Impulse würde ich mittels Interrupt zählen. Ein Testprogramm:

// UNO mit Messung an Pin2

const byte messpin = 2;
volatile unsigned long zaehler;

void setup() {
  Serial.begin(9600);
  pinMode(messpin,INPUT_PULLUP);
  attachInterrupt(0, messung, CHANGE);
}

void loop()
{
  delay(1000); // every second
  Serial.print("Zaehler: "); Serial.println(zaehler); 
}

void messung() {
  if (digitalRead(messpin)) zaehler++;
}

Dein zweites Thema sollte eine Ablaufsteuerung sein, auch endlicher Automat oder finite state machine auf Neudeutsch. Lesestoff: Anleitung Ein Endlicher Automat entsteht Möglicherweise bringt Dich das ja weiter. Ein Beispiel habe ich auch hier gefunden. Leicht abgeändert:

/* Funktion: Nach dem Einschalten passiert nichts. Dann
 *  1. nach Tastendruck soll die rote LED blinken;
 *  2. nach Tastendruck soll die rote LED erlöschen und die grüne LED anfangen zu blinken;
 *  3. nach Tastendruck soll die rote und die grüne LED anfangen zu blinken;
 *  4. nach Tastendruck sollen beide LEDs erlöschen, dann weiter bei 1.
 */
const byte buttonPin = 2;
const byte ledRotPin = 8;
const byte ledGruenPin = 9;
const int blinkRotZeit = 200;
const int blinkGruenZeit = 75;
unsigned long aktMillis, altRotMillis,altGruenMillis;
bool buttonState;
bool laststate;
byte prgm = 0;

void setup() {
  Serial.begin(9600);
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledRotPin, OUTPUT);
  pinMode(ledGruenPin, OUTPUT);
  buttonState = digitalRead(buttonPin);
  laststate = buttonState;
}


void loop() {
  aktMillis = millis();
  laststate = buttonState;
  buttonState = digitalRead(buttonPin);
  switch (prgm) {
    case 0:
      if (!laststate && buttonState) {
        altRotMillis=aktMillis;
        prgm = 1;
        delay(30);
      }
      break;
    case 1:
      if (aktMillis - altRotMillis >= blinkRotZeit) {
        digitalWrite(ledRotPin, !digitalRead(ledRotPin));
        altRotMillis = aktMillis;
      }
      if (!laststate && buttonState) {
        prgm = 2;
        digitalWrite(ledRotPin, LOW);
        delay(30);
        altGruenMillis=aktMillis;
      }
      break;
    case 2:
      if (aktMillis - altGruenMillis >= blinkGruenZeit) {
        digitalWrite(ledGruenPin, !digitalRead(ledGruenPin));
        altGruenMillis = aktMillis;
      }
      if (!laststate && buttonState) {
        prgm = 3;
        digitalWrite(ledGruenPin, LOW);
        delay(30);
        altRotMillis=aktMillis;
        altGruenMillis=aktMillis;
      }
      break;
    case 3:
      if (aktMillis - altRotMillis >= blinkRotZeit) {
        digitalWrite(ledRotPin, !digitalRead(ledRotPin));
        altRotMillis = aktMillis;
      }
      if (aktMillis - altGruenMillis >= blinkGruenZeit) {
        digitalWrite(ledGruenPin, !digitalRead(ledGruenPin));
        altGruenMillis = aktMillis;
      }
      if (!laststate && buttonState) {
        prgm = 0;
        digitalWrite(ledRotPin, LOW);
        digitalWrite(ledGruenPin, LOW);
        delay(30);
      }
      break;
  }
}

Sowas (Endlicher Automat mit switch/case) brauchst Du auch, nur anstelle von Tastendrücken heißt das Ereignis dann halt "6700 Impulse erreicht".

Ich würde mir ein kleines Modell für das stille Kämmerlein mit Minimotor, Impulsscheibe, Lichtschranke und LEDs bauen, da es für die Schießfreunde sicher nervig ist, wenn du die Anlage immer probefährst.

Viel Erfolg und damit willkommen im Forum :slight_smile:

Hallo gerhard, wilkommen im Forum!

Ich schätze mal, skorpi's Taster sind dir zu fummelig, und du würdest entweder die vorhandenen verwenden oder durchaus genausoviel wie für das gesamte Display+Keypad für einen einzelnen Taster ausgeben.

Mit Menüsystem und Keypad kannst du natürlich ganz andere Sachen machen, aber dir geht es erstmal drum, einen CMOS4040 Zähler zu emulieren :wink:

Wenn du vom Logik-Gatter programmieren kommst und in Relaistechnik denkst, musst du dich an Zustandsvariable und C-Programmierung gewöhnen.
Taster entprellen und Änderungen erkennen kann man von Hand oder mit Libraries.
Zählen selbst ist allerdings einigermaßen trivial, so dass mir unklar ist, wo dein Problem liegt.

Probleme sind eher :

  • Wie erkennst du, wo der Schlitten anfangs ( Spannungswiederkehr / Reset) ist?
  • Brauchst du keine Endschalter, damit die Anlage sich nicht selbst zerstören kann? Oder ist dies das Problem desjenigen, der den Finger auf dem "Bremse lösen" Taster lässt?

agmue hat dir hübsche Links zu "Zustandsautomaten" geschickt, und ein Test-Programm mit delay(1000);
Das passt natürlich nicht zusammen. Vergiss das Testprogramm, denn_

  • Interrupts zu verwenden ist in der Regel nicht erforderlich und meist ein Anfänger-Irrtum, dadurch würde etwas einfacher
  • delay(1000); während sich ein Motor bewegt, solltest du überhaupt nicht dran denken... (Auch nicht bei einem Testprogramm)

michael_x:
Vergiss das Testprogramm, denn_

Nö, finde ich nicht.

michael_x:

  • Interrupts zu verwenden ist in der Regel nicht erforderlich und meist ein Anfänger-Irrtum, dadurch würde etwas einfacher

Da merke ich, es fehlt eine Angabe der Verfahrgeschwindigkeit (Zeit für 100 m). Die mir bekannten Anlagen sind recht flott, darum hatte ich über den dicken Daumen mit 1,5 ms Impuls kalkuliert. Da könnte man dann eine Messung mittels Interrupt schon in Erwägung ziehen. Zumindest wäre das meine Anregung dazu. Einfacher, und da stimmen wir überein, wird es dadurch aber nicht.

michael_x:

  • delay(1000); während sich ein Motor bewegt, solltest du überhaupt nicht dran denken... (Auch nicht bei einem Testprogramm)

Mit dem Testprogramm habe ich mal zeigen wollen, daß während delay() der Interrupt noch funktioniert. In Testprogrammen verwende ich delay() gerne mal. Im Projekt-Sketch hat es dann keine Berechtigung, aber auch keine Notwendigkeit mehr.

Zwei Leute, zwei Meinungen, so ist das :slight_smile:

wenn auf dem seil kleine stabmagnete (neodyn rund 3mmx15mm in der art) anbringst und die auch über die antriebsrolle laufen würden, könntest du auf das relativ ungenaue umdreungen zählen verzichten und hättest absolute stopsignale.

Das ist noch unsicherer. Wenn ein Magnet verloren geht oder übersprungen wird ist die Anlage außer Gefecht.

@panpira: Schreib bitte etwas deutlicher, es ist anstrengend deine Posts zu lesen.

Gruß

Wenn er zur Kontrolle bis 7002 jezählt hat und eventuell auch die "Fahrzeit" immer mitliest, weißer, daß (auf das ß besteh ich aber) keen Magnet da is, wo eigentlich einer sein sollte.

Auch die Positionierung ist damit flexibeler und genauer. Unter Umständen schrankt die Lichtschranke ja wegen Staub und Dreck keen Licht mehr oder nur noch sporadisch nach Lust und Laune. So hätte man insgesamt 3 Systeme, deren Werte man vergleichen und sofort einen Fehler feststellen und lokalisieren könnte, welches einem dann ein freundliches rotes Blinkledchen aufmerksamkeitsheischend mitzuteilen versucht.
.
Mit Magneten könntest du ein absolutes Stopsignal beispielsweise mit zwei/drei hintereinander zusätzlich drauflegen. Würde dem Ardu die Orientierung erleichtern nach einem Stromausfall. Wie soll der arme Kerl wissen, wo er ist?

(Alternativ könnte man auch einen kleinen Abschnitt des Seils mit Gammawellen bestrahlen und mit einem Geigerzähler die Position bestimmen - sry, konnt ich mir grad nich verkneifen :wink: Fallout4 geschädigt...)

Du bist nich zufällig aus dem kaltem Norden von DE?

EDIT: in dein Profil geschaut, da steht sogar Berlin, wollte erst DDR und nicht DE schreiben :smiley:

Hi skorpi, jup :slight_smile:
Du hattest mich mal mit Raspi und openHab auf die richtige Spur gebracht.
Danke nochmal dafür. War n prima Tip und Anstoß.
Hätte mich sonst bisher bestimmt noch immer nicht mit Linux beschäftigt :slight_smile:

Um die Offtopickurve noch zu kriegen: Oh Fragender, welche Spannungen und Ströme müssen denn nun geschaltet werden?

Unsere Anlage basiert auch auf Umdrehungen zählen. Zusätzlich noch eine Beschleunigungs- und Bremsrampe, um die Mechanik zu schonen und Schlupf zu vermeiden.

Das funktioniert ganz gut, außer jemand hat gerade mit einem Elefantentöter auf den Schlitten geschossen.

Magnete am Seil halte ich für unbrauchbar, da man ja nicht weiß, in welche Richtung der sich gerade gedreht hat. Magnetring würde gehen, wenn er nicht über die Umlenkrolle läuft. (...)

Ich habe auch mal eine Anlage gesehen, wo ein Timer den Schlitten 95 % des Weges fährt und der Rest mit einem Handtaster gemacht wird. Das halte ich für ziemlich robust und diese Systeme kennen die Leute von der GST und NVA. :wink:

Grüße, Helmuth

Guten Morgen...

Vielen Dank für die freundliche Begrüßung, eurer Interesse und den Antworten.

Ich gehe mal kurz auf euer geschriebenes ein:

@skorpi08:
Kling Interessant, schaue ich mir an...Danke!

@panpira:

  1. Es sind Drehstrommotore im Einsatz.
  2. Die Elektroinstallation (Schaltschrank mit Wechselschützen und Hilfschützen) soll erhalten bleiben.
  3. Da die Bahnsteuerung variabel (10, 25, 50 und 100 Meter) sein soll strebe ich eine Softwarelösung an.

@agmue:

  1. Die Unterscheidung zwischen den Abständen soll durch das zählen der Lichtschrankenimpulse am Antrieb stattfinden, soll heißen, bei erreichen einer Softwaremäßig vorgegebenen Zahl/Impulse soll erstens der Antreib abgeschaltet werden und bei erreichen einer weiteren (natürlich etwas höheren Zahl) die Bremse.
  2. Das mit der Ablaufsteuerung hört sich gut an, werde das Script mal testen...
  3. Testaufbau ist kein Problem, Stromversorgung auch nicht, Pinbelegung der Ein- Ausgänge brauch ich?

@michael x:

  1. Das mit den Tastern paßt schon! Die Steuerungsplatine sitzt jetzt auch in einem kleinen Gehäuse mit Netzteil an jeder Bahn. Der Finanzielle Aufwand für einen Ardu, Display mit Keys ist zweitrangig...
  2. 4040-Emulator kling gut :wink:
  3. Der Antrieb hat natürlich Sicherheitsschalter die den Antrieb stromlos machen und die jetzige Steurung "hardreseten"! Die Ausgangslage ist immer "Scheibe beim Schützen"! Sollte dies nicht der Fall sein, kann die Anlage manuell in die Ausgangslage gefahren werden.

@agmue (2):
Die Verfahrgeschwindigkeit spielt keine Rolle, da die Zählgeschwindigkeit mit der Drehzahl des Antriebes gekoppelt ist! Das ist auch notwendig, da einige Antriebe langsamer/schneller laufen!

@scherheinz:
Die zur Steuerung erforderlichen Werte, bzw. die Sensorik sind/ist vorhanden! Die Anlage soll, was die Sensorik angeht, nicht ausgebaut werden.

@Helmuth:
Da stimme ich Dir voll und ganz zu, genau so soll es funktionieren...!

Ich hoffe das so weit ausreichend komentiert/beantwortet zu haben!
Letztendlich gehr es "nur" um die Sterung über 2 Tasten (gerne auch mit Display/Keys und Optionen).
Die Ausgänge der Steuerung (3 Relais) sollen die vorhandene Elektrik ansteuern.

Grüße
Gerhard

Gertilein:
@agmue (2):
Die Verfahrgeschwindigkeit spielt keine Rolle, da die Zählgeschwindigkeit mit der Drehzahl des Antriebes gekoppelt ist! Das ist auch notwendig, da einige Antriebe langsamer/schneller laufen!

Die spielt schon eine Rolle, da sich ja die Zahl der Impulse pro Sekunde ändert. Werden ist die Impulsfrequenz zu hoch, kann es sein, dass man sich mit einer einfachen Zählroutine verzählt und muss auf Interrupt oder Zählen per Capture-In-Eingang umsteigen.

Wichtig wäre eine genau Bestandsaufnahme der aktuellen Anlage. Mit welchen Spannungen werden die Relais angesteuert? Mit welchen die Lichtschranken, wie sehen ihre Impulse aus, wie schnell kommen sie rein, (optimal: wie lange dauern sie)? Funktionieren die Teile, die nicht getauscht werden sollen, zuverlässig (z.B. Lichtschranken)?

Hallo Thesaus!

Die jetzige Elektronik erhält die Impulse von einer IR-Lichtschranke. Die Schaltimpulse werden über einen Optokoppler (mit typischer Schalthysterese) an die Steuerung weitergegeben, das funktioniert erstaunlich gut!
Die Pulsfrequenz sollte unter 100 Hz liegen, müßte ich sonnst mal messen.
Die angesteuerten Relais haben eine Betriebsspannung von 12 Volt und werden über eine Transistorstufe geschaltet.

Grüße
Gerhard

Gertilein:
Hallo Thesaus!

Die jetzige Elektronik erhält die Impulse von einer IR-Lichtschranke. Die Schaltimpulse werden über einen Optokoppler (mit typischer Schalthysterese) an die Steuerung weitergegeben, das funktioniert erstaunlich gut!
Die Pulsfrequenz sollte unter 100 Hz liegen, müßte ich sonnst mal messen.
Die angesteuerten Relais haben eine Betriebsspannung von 12 Volt und werden über eine Transistorstufe geschaltet.

Grüße
Gerhard

Also alles kein Problem für einen Arduino.
Grüße Uwe

uwefed:
Also alles kein Problem für einen Arduino.
Grüße Uwe

Super... :slight_smile:

Und wie nun genau?

Gertilein:
Und wie nun genau?

Es wird dir hier wohl kaum jemand die Steuerung entwickeln, es sei denn du bezahlst ihn.

Das genau musst du selber austüfteln. Stichworte sind Relais mit Transistor ansteuern, Schalter abfragen, Impulse zählen, endlicher Automat. Alles Sachen, die auch ein Einsteiger zu erst als Einzelaufgabe und dann als fortgeschrittener Einsteiger kombiniert hinbekommen kann. Besorge dir ein Einsteigerkit und leg los. Für deine Zwecke kann ich das Kit von Vilros empfehlen, da dort der Schwerpunkt auf Schalter, Transistoren, Steuerung usw. gelegt wird.

Theseus:
Es wird dir hier wohl kaum jemand die Steuerung entwickeln, es sei denn du bezahlst ihn.

Ja, stimmt! Glaube auch das sich hier keiner dafür bezahlen lassen würde :wink:

Vom Hardwareaufbau sehe ich auch nicht das Problem und das im empholenen KIT enthaltende Material befindet sich im Lager...!

Wenn es aber um die Programmierung geht bin ich raus!

Wenn ich mir die hier vorgestellten Projeke so anschaue ist meine Aufgabenstellung gefühlt ein "Einsteigerprojekt" und für die meisten hier so trivial das es eigendlich nicht weiter diskutiert werden müßte!

Vlt. hat aber ja doch noch jemand lange Weile und hilft mitr auf die Sprünge getreu dem Motte" Nun helft doch dem alten Mann"...

Grüße
Gerhard

Hallo Gerhard,

ich mische mich jetzt auch mal kurz ein ;D

Die Aufgabenstellung ist tatsächlich nicht besonders anspruchsvoll, aber das liegt immer im Auge des Betrachters bzw. in den erworbenen Fähigkeiten desselben.
Deine Teilaufgaben hat schon jemand funktionsfähig erstellt, Du findest die fertigen Sketche dazu in den Beispielen der IDE. Schalter abfragen, LED einschalten, Tastendrücke zählen ... das brauchst Du alles und ist mundgerecht vorhanden.

Du musst Dich entscheiden: umrüsten im Eigenbau und Lernen wie man programmiert oder fertig kaufen. Oder jemanden bezahlen :sunglasses:

Sofern die Anlage noch läuft ist's ja nicht zeitkritisch, hängt also von Deiner Eigeninitiative ab.

Gutes Gelingen
Klaus

Theseus:
Es wird dir hier wohl kaum jemand die Steuerung entwickeln, es sei denn du bezahlst ihn.

... es sei denn jemandem hier ist langweilig :slight_smile:
die chancen stehen also nicht so schlecht.

Schließe mich Theseus an bezüglich Interupteingang. Bei 7000 geschrankten Lichtpings auf 100m (sind Magnete wirklich überflüssig - so schon auf 1,5 cm genau) und angenommenen 5 Sekunden Fahrzeit, haste rund alle 700 µs nen Impuls.
Je nachdem wie groß die Löcher sind und in welchem Abstand könnter sich +- verzählen mit einfacher Abfrage innerhalb des Loops. Ein Loop dauert vielleicht 20 µs.
Daher plädiere ich auch für Interupteingang. Warum damit geizen wenner schon da is und das Proggie wird dadurch auch nur ne Zeile oder verträumte zwei länger.

Als Hardware brauchste also logischerweise den Ardu, eventuell n Festspannungsregler 7 - 12V, 2 logiklevel N-Mosfets (sind für alles gut, kosten vielleicht 10 Cent mehr als ne ausschweifig genauestens berechnete Transe mit nicht weniger liebevoll ausgewähltem Vorwiderstand, welcher dann in vollster Perfektion zum Strom der Relais passt - völlig überflüssig. einfach LL-Mosi ran und gut is. Hat interne FL-Diode, schaltet alles, kein Nachdenken.) mit Pulldown (wegen Einschaltmoment bei Reset) für die Relais und Freilaufdioden für selbige (nimm Schottky-Dioden - sind extrem schnell und kosten auch nur ein paar Cent mehr).

Wenden wir uns dem Eingang zu.
Deine Lichtschranke. Was spuckt die aus?
Ich nehme mal an, daß is n simpler Optokoppler, der auf der einfach nur ne Fototranse auf Masse schalten lässt. Aber ich weiß es nicht.

Die nächste Frage welche zu klären wäre ist also, wie man den Lichtschrankenausgang an den Ardu klöppelt.

[Edit]: du hattest ja schon den Ausgang der LS an eine eigene Elektronik gekoppelt. Nehme also an, daß uns ein 5V - GND TTL Signal zur Verfügung steht (und damit auch ne Versorgungsspannung zwischen 7 und 12V). Ist das richtig?