Tablet Halter automatisieren. Brauch Hilfe

Hallo mein Name ist Gino ich bin 38 Jahre alt Elektroniker für Antriebstechnik und ich brauche Hilfe (Absoluter Neuling)I

Ich hab eine Tabletthalterung von Iroom mit defekter Elektronik die alte Stuerplatine ist Schrott
num wollte ich mit einem Arduino eine Steuerung Basteln ich bekomm es aber irgend wie nicht hin

zum Ablauf

Ich habe 2 DC Motoren 5 Volt

Motor 1 Tablet Rausfahren bzw Kippen
Motor 2 Konrektor Rein fahren Raus Fahren

so soll es Funktionieren

mit RFID karte eine Freigabe geben
danach soll Motor 2 rückwärts fahren um den Konrektor aus dem Tablet zu ziehen
paar Sekunden Später soll Motor 1 für eine zeit das tablet rausfahren
Pause zb 15 Sekunden

danach soll Motor 1 zurückfahren um das Tablett wieder reinfahren und nach einer zeit soll Motor 2 den Konrektor wieder Ausfahren

Elektronisch kenn ich mich aus aber das Programm zu schreiben überragt meine Fähigkeiten

Zur Hardware ich hab ein Arduino Starter Kit RFID Platine hab ich ein L293 zum Motor Ansteuerung 2 DC Motoren mit Getriebe

Kann mir Jemand Helfen den code zu schreiben

Für jede Antwort wer ich echt Dankbar

Lg Gino

Der Treiber muß zum Motor passen. Der L293 kann zu schwach sein.
Sind die Motore von der alten Steuerung? Welche Leistungstreiber sind in der alten Steuerung verbaut?
Grüße Uwe

Hallo Uwe nein der war im Starter Kit dabei
Original war das anderes aufgebaut hab die Schaltung nicht ganz verstanden

hab sie mit dem l293 schon laufe lassen das passt die Motoren sind sehr klein
am Labornetzteil bei Voller last bzw wenn ich sie bis zum Stilstand hebe brauchen sie max 500mA

Denk Hardware technisch müsste das gehen
Die Motoren laufe ja eigentlich nur sehr Kurz

Programmierung da komm ich nicht weiter

Hallo
hast du Endschalter im Antriebsstrang?
Welchen Arduino und Motortreiber Shield hast du in Deiner Projektplanung?

Sorry für meine Zwischenfrage. Unter Konrektor finde ich nur die Bezeichnung eines Assistenten eines Rektors (Schulleiter etc.)

Was bitte schön ist ein Konrektor am Tablet?

Hallo
spendier mal ein Bild von der Tabletthalterung, aber bitte detailreich.

gigileni:
Ich hab eine Tabletthalterung von Iroom mit defekter Elektronik die alte Stuerplatine ist Schrott

Ich hab mal nen Suchmaschinenversuch:
Es geht wohl um dieses Unternehmen:

Ich habe 2 DC Motoren 5 Volt
[…]
Kann mir Jemand Helfen den code zu schreiben

Für jede Antwort wer ich echt Dankbar

Na denn spendier mal das Typenschild der Motoren.

Nettes Gimmick.
Da hat sich jemand Gedanken gemacht, wenn das Teil tatsächlich für 1K € über den Ladentisch gehen soll…

wenn das Teil tatsächlich für 1K € über den Ladentisch gehen soll...

Du meinst ohne den iPad?

Grüße Uwe

uwefed:
Du meinst ohne den iPad?

Keine Ahnung, was die Ösis meinen:

iDock
Schwarz / Glas / Horizontal
€ 999,00 zzgl. MwSt.

Achso - den gibts auch für 747,23 fürs mini5 oder für 1199 - als Touchcode...
Und bitte beachten: zzgl (20%) MwSt.

Hallo,
das ist eine super Idee für die Zugriffskontrolle auf Rechenbretter. Die Mechanik zum Klappen der Tür würde ich über einen Servo ansteuern, damit fällt die Überwachung der Endschalter, AUF und ZU, weg.

Servo lassen sich so schwer abschalten.

Grüße Uwe

Konrektor-connector Ladestecker :slight_smile: Ich und mein Deutsch

Ja genau es geht um diese Halterung

Das teil ist Toll wenn es Funktioniert und man ersatzteile bekommen könnte.

Bis jetzt hab ich kein Motortreiber Shield! Ich hab die 2 Orginal Motoren und ein Starterkit vom Arduino
Deteilbilder stell ich heute abend mal Online.

Vieleicht reichen die Bilder ja auch.

Die 2 Motoren sind 12v, werden aber nur mit 5V betrieben.
Servos hab ich 2 bestellt die kommen heute an.
Mechanisch ist es aber nicht sehr einfach das umzusetzen die Orginal motoren weren mir lieber.

gigileni:
Ja genau es geht um diese Halterung

Deteilbilder stell ich heute abend mal Online.

Vieleicht reichen die Bilder ja auch.

Nein, die reichen nicht, da externer Bilderhoster und die sind dann dort bald weg. Kein Mensch weiss dann, was Du meintest.
Nimm die Bilder und editiere Deinen Post - unten dann auf attachment - anhängen, more attachment - anhängen, fertig.

Wie gesagt, wichtig wäre irgendwas über die Motoren rauszubekommen. Dazu Bilder vom Typenschild und vielleicht auch noch irgendwas schönes vom Ursprungsaufbau. Wenn man Bauteile identifizieren kann, kommt man meist schon recht weit.
Wenn das wirklich keine Schrittmotoren sind, gibt es vermutlich irgendwo Endschalter und wenn die nicht, dann Stromsensoren.

Also viele Details...

Hallo
mit ein Paar enum´s und einem struct, zum Aufbohren, für den Motorstrang sollte man gut loslegen können.

enum bewegung {Pause,Auf,Zu};
enum motor {Motor1,Motor2,maxMotor};
struct STRANG {
  int geschwindigkeit;
  int richtung;
  int endSchalter1;
  int endSchalter2;
  unsigned long stempel;
  unsigned long pause; 
};
STRANG strang[maxMotor];

gigileni:
… Elektroniker für Antriebstechnik und ich brauche Hilfe (Absoluter Neuling) …

Moin!

Als deutsches Nordlicht sind mir alpenländische Spezialvokabeln leider fremd, Urlaube in Füssen und Kärnten waren sprachlich immer eine Herausforderung. Das Schwimmenlernen in einem kalten Gebirgssee allerdings auch. Aber ich habe es überstanden :slight_smile:

Zu Spannung, Strom und dem Anschluß von Motoren an eine H-Brücke schreibe ich jetzt mal nichts, das solltest Du wissen. Deine Fragen richten sich auf die Software, richtig?

Ich verwende zum Testen - erstmal nur - einen DC-Motor aus meiner Grabbelkiste und eine H-Brücke L298N, die ich wie bei Motoren mit H-Brücke L298N ansteuern anschließe. Den Jumper ENA ziehe ich ab und verbinde den Pin mit meinem UNO.

Um Dir den Einstieg zu erleichtern, schlage ich Dir die MobaTools als Unterstützung vor. Der Autor dieser Programmbibliothek ist hier im Forum aktiv. Er hat allerdings DC-Motoren “vergessen”, weshalb ich stattdessen MoToSoftLed zum sanften Beschleunigen verwende. Ein erweiterter Testsketch für einen Motor, getestet mit UNO:

#include <MobaTools.h>
/* Demo: weiches Auf/Abblenden einer LED
    Mit der Klasse SoftLed lässt sich eine Led 'weich' ein- und ausschalten
   Die Led muss nicht an einem PWM-fähigen Pin angeschlossen sein, es funktioniert
   mit jedem Digital-Pin.
   SoftLed.attach( byte Pinnr );// Anschlußpin für die Led festlegen
   SoftLed.riseTime( int zeit );// Zeit für auf/abblenden in ms
   SoftLed.on();                // 'weich' einschalten
   SoftLed.off();               // 'weich' ausschalten
*//*
  Erweiterung für einen DC-Motor an H-Brücke L298N
  Der Motor sollte Hin- und Herdrehen, jeweils mit Beschleunigungs- und Verzögerungsrampe.
*/

const byte ENAPin =  5;  // beliebiger Digital Pin für PWM zum Beschleunigen und Verzögern
const byte IN1Pin =  6;  // Richtung H-Brücke
const byte IN2Pin =  7;  // Richtung H-Brücke

MoToSoftLed Motor1;

void setup() {
  pinMode(IN1Pin, OUTPUT);
  pinMode(IN2Pin, OUTPUT);
  Motor1.attach(ENAPin);
  Motor1.riseTime( 900 );    // Beschleunigungszeit in ms
  digitalWrite(IN1Pin, HIGH);
}

void loop() {
  Motor1.on();
  delay(1000);
  Motor1.off();
  delay(1000);
  digitalWrite(IN1Pin, !digitalRead(IN1Pin));
  digitalWrite(IN2Pin, !digitalRead(IN2Pin));
}

Oder für zwei Motoren:

#include <MobaTools.h>
                         // Motor A
const byte ENAPin =  5;  // beliebiger Digital Pin für PWM zum Beschleunigen
const byte IN1Pin =  6;  // Richtung H-Brücke
const byte IN2Pin =  7;  // Richtung H-Brücke
                         // Motor B
const byte ENBPin =  8;  // beliebiger Digital Pin für PWM zum Beschleunigen
const byte IN3Pin =  9;  // Richtung H-Brücke
const byte IN4Pin = 10;  // Richtung H-Brücke

MoToSoftLed MotorA;
MoToSoftLed MotorB;

void setup() {
  pinMode(IN1Pin, OUTPUT);
  pinMode(IN2Pin, OUTPUT);
  MotorA.attach(ENAPin);
  MotorA.riseTime( 900 );    // Beschleunigungszeit in ms
  pinMode(IN3Pin, OUTPUT);
  pinMode(IN4Pin, OUTPUT);
  MotorB.attach(ENBPin);
  MotorB.riseTime( 900 );    // Beschleunigungszeit in ms
  digitalWrite(IN1Pin, HIGH);
  digitalWrite(IN3Pin, HIGH);
}

void loop() {
  MotorA.on();
  delay(1000);
  MotorA.off();
  delay(1000);
  digitalWrite(IN1Pin, !digitalRead(IN1Pin));
  digitalWrite(IN2Pin, !digitalRead(IN2Pin));
  MotorB.on();
  delay(1000);
  MotorB.off();
  delay(1000);
  digitalWrite(IN3Pin, !digitalRead(IN3Pin));
  digitalWrite(IN4Pin, !digitalRead(IN4Pin));
}

Funktioniert das bei Dir?

gigileni:
zum Ablauf
Motor 1 Tablet Rausfahren bzw Kippen
Motor 2 Konrektor Rein fahren Raus Fahren

So einen Ablauf kann man ganz gut mit einer Schrittkette (=finite state machine, =endlicher Automat) realisieren, die in C beispielsweise mit switch/case programmiert werden kann. Ich mache Dir mal einen Vorschlag ohne RFID, stattdessen mit einem Taster zum Starten (getestet mit UNO):

const byte RFIDPin = 2;  // Taster zur RFID-Simulation
// Motor A
const byte ENAPin =  5;  // beliebiger Digital Pin für PWM zum Beschleunigen
const byte IN1Pin =  6;  // Richtung H-Brücke
const byte IN2Pin =  7;  // Richtung H-Brücke
// Motor B
const byte ENBPin =  8;  // beliebiger Digital Pin für PWM zum Beschleunigen
const byte IN3Pin =  9;  // Richtung H-Brücke
const byte IN4Pin = 10;  // Richtung H-Brücke

// Zeiten in Millisekunden
const uint16_t STECKERZEIT = 2000; // Zeit zum Raus- oder Reinfahren des Steckers
const uint16_t KLAPPENZEIT = 2000; // Zeit zum Raus- oder Reinfahren der Klappe
const uint16_t BESCLEUNIGUNG = 500; // Beschleunigungs- und Verzögerungszeit für den Motor
const uint16_t WARTEZEIT = 5000; // Zeit für die geöffnete Klappe

#include <MobaTools.h>
MoToSoftLed MotorA;
MoToSoftLed MotorB;
MoToTimer Zeitmesser;

void setup() {
  pinMode(RFIDPin, INPUT_PULLUP); // Taster gegen GND schaltend
  pinMode(IN1Pin, OUTPUT);
  pinMode(IN2Pin, OUTPUT);
  MotorA.attach(ENAPin);
  MotorA.riseTime( 500 );    // Beschleunigungszeit in ms
  pinMode(IN3Pin, OUTPUT);
  pinMode(IN4Pin, OUTPUT);
  MotorB.attach(ENBPin);
  MotorB.riseTime( 500 );    // Beschleunigungszeit in ms
  digitalWrite(IN1Pin, HIGH);
}

void loop() {
  enum class Schritt : byte {FREIGABE, STECKERRAUS, AUSKLAPPEN, AUSGEKLAPPT, WARTEN, EINKLAPPEN, EINGEKLAPPT, STECKERREIN, STECKERDRIN, FERTIG};
  static Schritt schritt = Schritt::FREIGABE;

  switch ( schritt ) {
    case Schritt::FREIGABE:
      if ( RFIDfreigabe() ) {
        Zeitmesser.setTime( STECKERZEIT - BESCLEUNIGUNG );
        digitalWrite( IN3Pin, HIGH );
        MotorB.on();
        schritt = Schritt::STECKERRAUS;
      }
      break;
    case Schritt::STECKERRAUS:
      if ( Zeitmesser.running() == false ) {
        Zeitmesser.setTime( BESCLEUNIGUNG );
        MotorB.off();
        schritt = Schritt::AUSKLAPPEN;
      }
      break;
    case Schritt::AUSKLAPPEN:
      if ( Zeitmesser.running() == false ) {
        digitalWrite( IN3Pin, LOW );
        digitalWrite( IN1Pin, HIGH );
        Zeitmesser.setTime( KLAPPENZEIT - BESCLEUNIGUNG );
        MotorA.on();
        schritt = Schritt::AUSGEKLAPPT;
      }
      break;
    case Schritt::AUSGEKLAPPT:
      if ( Zeitmesser.running() == false ) {
        Zeitmesser.setTime( BESCLEUNIGUNG );
        MotorA.off();
        schritt = Schritt::WARTEN;
      }
      break;
    case Schritt::WARTEN:
      if ( Zeitmesser.running() == false ) {
        digitalWrite( IN1Pin, LOW );
        Zeitmesser.setTime( WARTEZEIT );
        schritt = Schritt::EINKLAPPEN;
      }
      break;
    case Schritt::EINKLAPPEN:
      if ( Zeitmesser.running() == false ) {
        digitalWrite( IN2Pin, HIGH );
        Zeitmesser.setTime( KLAPPENZEIT - BESCLEUNIGUNG );
        MotorA.on();
        schritt = Schritt::EINGEKLAPPT;
      }
      break;
    case Schritt::EINGEKLAPPT:
      if ( Zeitmesser.running() == false ) {
        Zeitmesser.setTime( BESCLEUNIGUNG );
        MotorA.off();
        schritt = Schritt::STECKERREIN;
      }
      break;
    case Schritt::STECKERREIN:
      if ( Zeitmesser.running() == false ) {
        digitalWrite( IN2Pin, LOW );
        digitalWrite( IN4Pin, HIGH );
        Zeitmesser.setTime( STECKERZEIT - BESCLEUNIGUNG );
        MotorB.on();
        schritt = Schritt::STECKERDRIN;
      }
      break;
    case Schritt::STECKERDRIN:
      if ( Zeitmesser.running() == false ) {
        Zeitmesser.setTime( BESCLEUNIGUNG );
        MotorB.off();
        schritt = Schritt::FERTIG;
      }
      break;
    case Schritt::FERTIG:
    default:
      if ( Zeitmesser.running() == false ) {
        digitalWrite( IN1Pin, LOW );
        digitalWrite( IN2Pin, LOW );
        digitalWrite( IN3Pin, LOW );
        digitalWrite( IN4Pin, LOW );
        schritt = Schritt::FREIGABE;
      }
  }
}

bool RFIDfreigabe() {
  return !digitalRead(RFIDPin);  // Taster zur Simulation
}

Hallo agmue

Danke für dein Program !

Bin erst jetzt dazu gekommen es zu testen mit dem L293 hab ich es zum laufen bekommen leider hat der Motor zu wenig Leistung ???

Hab jetzt ein ARCELI Stepper Servo Robot Shield v2 mit PWM Driver Shield für Arduino
damit bekomm ich es nicht zum laufen.

kannst du mir nachmal helfen was ich machen muss.

gigileni:
kannst du mir nachmal helfen was ich machen muss.

Leider nein, diese Hardware ist mir unbekannt.

gigileni:
kannst du mir nachmal helfen was ich machen muss.

vielleicht mal als Grundlage:

Schicker Aufbau.
Ich hätte nicht gedacht, das das so einfach passt...

Hallo
Also so weit geht die Hardware, ein teil vom Programm hab ich geschrieben.
Stecker Raus
Klappe auf
Klappe zu
Stecker Rein

Das Lauft leider in einer Dauerschleife :frowning:
Wie schreibe ich jetzt das Programm wie oben von agmue?
Also RFID
dann Klappe auf …
Programm ende bis wieder ein Signal kommt.
Ich hab jetzt den Arduino UNO mit Motor Shield und einen RFID RC522
Das Programm mit dem RFID hab ich auch hinbekommen das der Schlüssel erkannt wird und eine Led kurz einschaltet.

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 

Adafruit_DCMotor *myMotor = AFMS.getMotor(1); // Stecker
Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2); // Klappe

void setup() {

AFMS.begin();

}

void loop() {

myMotor->setSpeed(150); 
myMotor->run(BACKWARD); //Stecker Raus

delay (2000);
myMotor->run(RELEASE);

delay (3000); //Sicherheits Pause

myMotor2->setSpeed(150); 
myMotor2->run(FORWARD); //Klappe aus
delay (3000);
myMotor2->run(RELEASE);

delay (3000); //Sicherheits Pause


myMotor2->setSpeed(150); 
myMotor2->run(BACKWARD); //Klappe zu
delay (2000);
myMotor2->run(RELEASE);

delay (3000); //Sicherheits Pause



myMotor->setSpeed(150); 
myMotor->run(FORWARD); //Stecker Rein
delay (3000);
myMotor->run(RELEASE);


delay (8000); // Programm sollte hier Stopen
}

Nur alles zu verbinden hab ich noch nicht gelernt
BITTE HELFT MIR !!!