Hallo miteinander .
Ich bin neu hier im Forum und habe auch gleich eine Frage wie ich mein Projekt umsetzen kann ?
Zuvor möchte ich mich aber kur vorstellen.
Ich bin 52 und habe vor einiger Zeit bereits einen Talking Skull umgesetzt . Ich habe dies nach einer Anleitung im Netz nachgebaut . Ich muss gestehen ich bin ein Halloween-"Verrückter"-Bastler und es wird jedes Jahr besser und umfangreicher.
Mein neues Projekt ist eine Schiffschaukel.
Das Gestell und der Sitzplatz ist soweit fertig , nur hapert es jetzt am Antrieb.
Ich habe als Inspiration dieses Video:
Und nun mein Antrieb:
Hier kommt das Problem das das Rad zwar Antreibt , wird aber wieder abgebremst , sobald die "Gondel" zurück kommt .
Mein Gedanke:
2 Lichtschranken welche den Linear Antrieb mit 12V steuern ( Auf und Ab )
Das wenn die Gondel los schwingt kurz danach der Motor sich senkt und und dann in der Mittelstellung wieder hochfährt .
Habt Ihr eine Lösung dafür ?
Aufgrund der Schwingung hätte ich eine Lichtschranke mit Laser bevorzugt.
Ich würde mich über Antworten sehr freuen .
Ich hätte ne ganz andere Idee.
Zuerst warum: Sobald Du ausserhalb irgendwas machst, musst Du vermeiden, das die Steuerschaltung beeinflusst werden kann.
Steht einer im Laser oder wird der irgendwie verdeckt, bist Du blind.
Ich hätte am Antrieb einen Drehgeber angebracht und in die Motorleitung einen Stromsensor eingebaut.
Der Motor wird in eine Richtung solange angetrieben, wie seine MaximalLeistung nicht überschritten.
Wenn das Schiffchen über den Wippenuntergrund hinaus fährt, wird die Stromaufnahme schlagartig kleiner, was zum abschalten des Antriebes genutzt wird.
Letzteres eben auch wenn die maximalaufnahme erreicht.
Der Encoder auf der Antriebswelle erkennt nun, wenn das Schiffchen wieder zurück kommt und sich das Rad in die andere Richtung dreht.
Dann wird der Motor wieder angeschalten - in der Gegenrichtung.
Hätte den Vorteil, das der sich ggfls. noch freidrehende Motor nicht mit der Stromversorgung gebremst und umgedreht wird.
Ob das evtl. auch nur mit Hallgebern geht, wäre ein Versuch wert.
Das ist ja nicht das Problem. Der Antrieb läuft doch - so mein Verständnis - auf einem Unterbau und bringt die Schaukel in Bewegung.
Wenn das Schiffchen am oberen Totpunkt(*) ist, muss der Motor umgepolt werden. Wenn Du den erst abschaltest und dann wartest, bis der - durch das rückfrahren in Richtung UT - sich in die andere Richtung dreht, brauchst Du keine zusätzliche Kraft für die Richtungsumkehr und schonst das Getriebe.
(*) der OT ist hier gemeint, wenn die Stromaufnahme des Antriebes an der Grenze des maximal möglichen ist, bzw. wenn das Rad über den Unterbau hinaus gelaufen ist.
Im Fall des überfahren des Unterbaus, hängt das Rad für einen Moment in der Luft - die Stromaufnahme sinkt in dem Moment signifikant.
Kalle kann ich auch... Den gibt es jedes Jahr anders
Hallo,
ich denke Du musst im Wesentlichen das linke und rechte Ende des Schiffchens erkennen wenn es die Antriebsrolle verlässt.
Motor treibt das Schiffchen von rechts nach links an.
Ende rechts erkannt
Motor absenken
Schiffchen schwingt irgendwann zurück.
Ende links erkannt
Motor anheben
das ist das was man auf dem Video sieht. Das wird halt so gemacht damit man bei dem Motor die Drehrichtung nicht umkehren muss. Das klappt da auch ganz gut weil die Masse des Schiffs so groß ist das am Ende der Antriebsphase das Schiff noch weiter schwingt. Das Anheben und Absenken geht vermutlich hydraulisch oder pneumatisch.
Bei Deinem Wischermotor kannst du ja aber die Drehrichtung ändern. Allerdings wird es ja auch so sein das mit zunehmender Höhe des deines Schiffchens die Geschwindigkeit im unteren Bereich zunimmt. Zudem musst Du eine Geschwindigkeit erreichen das es auf Grund der Masse überhaupt die Rolle verlässt, ansonsten fährt es vom Motor angetrieben halt nur hin und her.
Heinz
Ihr denkt zu kompliziert. das ist ein Pendel das immer mit der gleichen Periode schwingt. Diese Periode ist bekannt. Da braucht es nur einen Antrieb der x Sekunden in eine Richtung dreht und dann y Sekunden Pause und dann x Sekunden andere Richtung und dannn y Sekunden Pause. Um das vieleicht noch zu synchronisieren einen Induktiven Sensor. Durch die Periode der Schwingung weißt Du Wann Hin und wann her geschwungen wird.
Zum Antrieb würde ich immer einen Antrieb mit Rutschkupplung nehmen. Der Motor muß ja nicht die Schaukel beim ersten mal ganz auslenken sondern bei jeder Schwingung ein bißchen mehr.
Grüße Uwe
Ach da sieht man was - ok, ich bin wieder mal aussen vor ;(
Das heisst der Antrieb ist ausserhalb... @kruemelchen_70 Dann bin ich ja ganz anders falsch.
Hallo,
na ja, auf dem Video kann man sehen das der Motor mit dem Reibrad rauf und runter geht und damit nur in einer Richtung im Eingriff ist.
Wiso aussen vor ??
hier kann doch jeder zu einem Thema Vorschläge machen, für die ein oder andere kann sich der T0 dann entscheiden, oder auf Grund der Erkenntnisse hier auch eine ganz andere Lösung vorziehen. Diskussion nennt man das.
Gruß Heinz
Jetzt muss ich mir "nur" noch Gedanken über das Heben und Senken machen.
Was für einen Code ich da brauche ...
Hier hab ich Null Plan ..
Am besten wäre es , wenn ein Kontakt (Drucktaster / Lichtschranke ) gegeben wird ,das das Rad sich zum Beispiel 1 Sekunde senkt bzw hebt.
Hier brauche ich echt eure Hilfe
Bitte für Dummy schreiben.
Danke
Hab's ganz vergessen ... Eine H Brücke habe ich ... Diese habe ich bereits an den Arduino angeschlossen ... Aber jetzt brauche ich Input mit dem Code ...
So eine ist es
Das synology geht auch via https
Da wird ständig was aktuallisiert und neu ausgespielt?...
Na wenn da ein Linearantrieb dran ist, der hat doch IMHO Endschalter...
:start
runterfahren bis Endschalter ausgelöst
Zustand = ES unten
: wenn ES unten und hochfahren ausgelöst
hochfahren bis Endschalter ausgelöst,
Zustand = ES oben
Wie kann ich hier die Drehzahl, zum Beispiel für 5 Sekunden , drehen lassen, bevor der Motor wieder runter auf 0 fährt?
Ihr merkt , aber ich bin hier absoluter Anfänger
Ich hab wirklich keinen Plan, möchte es aber lernen und auch verstehen lernen und wenn es nur ein ist.
Vielen Dank Euer Verständnis
/***************************************************
Copyright (c) 2019 Luis Llamas
(www.luisllamas.es)
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License
****************************************************/
Ich würde gerne, wenn ich verstände, was Dein Code macht.
Da ist kein Kommentar drin, keine Erklärung was da passiert und was Du erwartest.
Und schon mal von vornherein: das delay() wird wohl früher oder später sowieso raus müssen...
Okay, Tschuldige ...
Es ist ein Wischermotor angeschlossen , der linksrum drehen soll.
Von Drehzahl 0 auf Vollast (255) , Diese Drehzahl für 1 Minute fährt , dann wieder auf 0 Abbremst
Eventuell danach eine Pause von 1 Minute und dann wieder von vorne anfängt.
Ist für ein Karusell , welches wie auf dem Volksfest anläuft, bremst und Pause macht
Die Laufzeiten könnt ich ja dann individuell anpassen.
Was der Code machen soll:
Es gibt vier Schritte, die nacheinander angelaufen werden.
Der Schritt warten macht genau für die vorgesheene Zeit nichts anderes.
Ist die Wartezeit (hier 60*1000ms) abgelaufen, wird der Schritt drehungauf "anfahren" ausgeführt.
Im Abstand von 500ms wird die geschwindigkeit erhöht, bis die maxSpeed erreicht.
Der wird begrenzt und dann in den nächsten Zustand drehen bei MaxSpeed gewechselt.
Dort bleibt er für 1000*60ms und geht dann in den nächsten Zustand um die Geschwindigkeit im Abstand von 500ms wieder zu verringern - Prinzip wie vorher das erhöhen...
#include "BTS7960.h"
const uint8_t EN = 8;
const uint8_t L_PWM = 9;
const uint8_t R_PWM = 10;
BTS7960 motorController(EN, L_PWM, R_PWM);
enum {warten, drehungauf, halten, drehungab}; // Die Zustände
byte zustand = warten; // Erster Zustand
const unsigned long pauseZeit = 1000 * 60UL; // Zeit in ms
unsigned long zeitMerker = 0; // merken der letzten Zeit
int speed; //
void setup()
{
Serial.begin(115200);
Serial.println(F("Start...."));
motorController.Disable();
}
void loop()
{
switch (zustand)
{
case warten:
motorController.Disable();
if (millis() - zeitMerker >= pauseZeit) // Wenn Pause abgelaufen ist
{
motorController.Enable(); // Mache an...
speed = 0; // Startgeschwindigkeit
zustand = drehungauf; // Nächster Schritt
}
break;
case drehungauf:
if (millis() - zeitMerker >= 500) // Zeit abgelaufen?
{
speed += 10; // Erhöhe Geschwindigkeit
zeitMerker = millis(); //
}
if (speed > 255) // Wenn über maxSpeed hinaus
{
speed = 255; // begrenze
zustand = halten; // und gehe in nächsten Zustand
}
motorController.TurnLeft(speed); // setze Geschwindigkeit
break;
case halten:
if (millis() - zeitMerker >= pauseZeit) // Wenn Zeit abgelaufen
{
zeitMerker = millis();
zustand = drehungab; // nächster Zustand
}
break;
case drehungab:
if (millis() - zeitMerker >= 500) // Zeit abgelaufen?
{
speed -= 10; // werde langsamer
zeitMerker = millis(); // neue Zeit merken
}
if (speed < 0) // Wenn minimalSpeed unterschritten
{
speed = 0;
zustand = warten;
}
motorController.TurnLeft(speed);
break;
}
}