Daddelkiste mit elektrisch schwenkbaren Monitor.

Was sonst nirgens reinpasst...
RockinHorse

Re: Daddelkiste mit elektrisch schwenkbaren Monitor.

Beitragvon RockinHorse » Di 8. Mai 2018, 20:09

Hallo Dirk,
Zwackelmann hat geschrieben:Bei allem was ähnlich klingt wie Hans Moser bekomme ich Ohrenbluten,
und weder leicht nevös! :shock:

Moser war Wiener. Und es gibt Österreicher und Wiener, wobei selbst die Österreicher behaupten, dass der Balkan schon kurz vor Wien beginnt :D

RockinHorse

Re: Daddelkiste mit elektrisch schwenkbaren Monitor.

Beitragvon RockinHorse » Di 8. Mai 2018, 20:11

Threedots hat geschrieben:Nöö,
mein Veto sei schon mal angebracht...

Da schließ' ich mich doch glatt an :mrgreen: :mrgreen: :mrgreen:

Benutzeravatar
Mandalo
Beiträge: 7874
Registriert: Mi 19. Okt 2016, 08:18

Re: Daddelkiste mit elektrisch schwenkbaren Monitor.

Beitragvon Mandalo » Di 8. Mai 2018, 22:41

Ja, ist doch Wurst! Ich habe vom Inhalt eurer Beiträge so wenig Ahnung, dass ich nicht mal gemerkt hätte, dass es sich nicht um Holz handelt! :lol:
Mit nichts ist man großzügiger als mit gutem Rat!
Es grüßt euch Dieter

Benutzeravatar
Threedots
Beiträge: 1085
Registriert: Do 14. Jul 2016, 10:49
Wohnort: Im Westen

Re: Daddelkiste mit elektrisch schwenkbaren Monitor.

Beitragvon Threedots » Mi 9. Mai 2018, 17:00

Hallo Dieter,

Du bist ja mit Beton auch ein gutes Stück OT. Da das aber im Umfeld der Projektfertigstellung dazugehört, gehört das iZwackel auch zur Projektfertigstellung.

@Zwackeldirk,

laß Dir noch schnell die Markenrechte an iZwackel sichern, bevor der Hersteller des angeknabberten Obstes es tut.
____________
LG

Roland

Benutzeravatar
Mandalo
Beiträge: 7874
Registriert: Mi 19. Okt 2016, 08:18

Re: Daddelkiste mit elektrisch schwenkbaren Monitor.

Beitragvon Mandalo » Fr 11. Mai 2018, 00:02

Ja,ja, alles gut, ich hab mich doch nicht beschwert. :D
Mit nichts ist man großzügiger als mit gutem Rat!
Es grüßt euch Dieter

Benutzeravatar
michaelhild
Moderator
Beiträge: 4121
Registriert: Di 28. Jun 2016, 20:01
Wohnort: Im sonnigen LDK
Kontaktdaten:

Re: Daddelkiste mit elektrisch schwenkbaren Monitor.

Beitragvon michaelhild » So 13. Mai 2018, 08:50

Zwackelmann hat geschrieben:Mensch Roland,

wir müssen doch wenigstens so tun,
als ob uns die Forenregeln wichtig währen. :roll:


ICH SEH DAS!!!!!!!! :evil: ;)
Grüße
Micha

Was man tut, kann man auch gleich richtig machen.
Mein Holzblog

Benutzeravatar
Zwackelmann
Beiträge: 1364
Registriert: Sa 12. Nov 2016, 06:52
Wohnort: Wuppertal

Re: Daddelkiste mit elektrisch schwenkbaren Monitor.

Beitragvon Zwackelmann » Fr 18. Mai 2018, 17:03

So,

pünktlich nach Fertigstellung meines Fingerzinken-Test-Objektes und vor dem langen
Wochenende, ist der Postbote aus dem Land der aufgehenden Sonne gekommen.

K1024_20180518_162919.JPG


Bin mal gespannt wie lange es dauert, bis ich hier erste Ergebnisse bezüglich
der Programmierung zeigen kann. :roll:

Bin aber noch optimistisch.

LG Dirk
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
haifisch18
Beiträge: 1493
Registriert: Mo 24. Jul 2017, 22:32
Kontaktdaten:

Re: Daddelkiste mit elektrisch schwenkbaren Monitor.

Beitragvon haifisch18 » So 20. Mai 2018, 20:54

Dann mal viel Spaß mit dem Brottbrett. Ich finde, dass mit dem Arduino auch (wie bei mir) ohne Kenntnisse der Programmiersprache einfache Projekte Spaß machen.
Mein Blog
Benedikt ;)

Benutzeravatar
Zwackelmann
Beiträge: 1364
Registriert: Sa 12. Nov 2016, 06:52
Wohnort: Wuppertal

Re: Daddelkiste mit elektrisch schwenkbaren Monitor.

Beitragvon Zwackelmann » Mi 23. Mai 2018, 19:45

Nabend zusammen,

so die Programmierung des Arduino ist nun auch fertig.
Die Funktionalität ist die Gleiche wie bei der zuvor beschriebenen SPS.
Nur das hier der Motor nicht mit Relais ein und ausgeschaltet wird,
sondern mittels Pulsweitenmodulation langsam beschleunigt und abgebremst wird.
Und dies mit einer programmierbaren Min und Max- Geschwindigkeit.

Hier der Sketch für die interessierten:

Code: Alles auswählen

//Ports definieren
#define EnableA 3  //Arduino Pin 3 auf Eingang PWM-Signal Motor 1 der H-Brücke
#define In1 4      //Arduino Pin 4 auf Eingang Nr.1 der H-Brücke
#define In2 5      //Arduino Pin 5 auf Eingang Nr.2 der H-Brücke
#define Pin_Wechsel 11 // Taster für Lagewechsel des Monitors
#define Pin_Senkrecht  12 //Endschalter Monitor steht senkrecht
#define Pin_Waagerecht 13 //Endschalter Monitor steht waagerecht
#define Speed_Max 255 // Gibt die maximale Motorgeschw. an. 255 = 100%
#define Speed_Min 50 // Gibt die minimale Motorgeschw. an. 0 = 100%
#define Schwenkzeit_max 4000 // Angabe der maximalen Schwenkzeit, bevor Nothalt
#define Debug // Bedingte Compilierung (Wenn nicht augeklammert => serielle Ausgabe zur Fehlersuche)

// Globale Variablen deklarieren
int Wechsel_Taster = digitalRead(Pin_Wechsel);
int Endschalter_Senkrecht = digitalRead(Pin_Senkrecht);
int Endschalter_Waagerecht = digitalRead(Pin_Waagerecht);
boolean SenkrechtSchwenken = 0; // Wird auf 1 gesetzt, wenn Monitor nach senkrecht schwenkt.
boolean WaagerechtSchwenken = 0; //Wird auf 1 gesetzt, wenn Monitor nach waagerecht schwenkt.
boolean FirstLoop = 1; // Flagvariable für die erste Programmschleife
unsigned long Zeit_akt = 0; // Aktuelle Schwenkzeit für Nothalt
unsigned long Startzeit = 0; // Startzeit für Nothalt in Millisekunden
unsigned long Taster_Timer_akt = 0; // Aktuelle Zeit wie lange Wechseltaster betätigt
unsigned long Taster_Timer_Start = 0; // Startzeit wann Wechseltaster betätigt


void setup() {
  Serial.begin(38400);// Initialisierung der seriellen Kommunikation mit 38400bits/sek:
  pinMode(Pin_Wechsel, INPUT);// Taster Lagewechsel an Pin_Wechsel als Eingang deklarieren
  pinMode(Pin_Senkrecht, INPUT);// Endschalter senkrecht an Pin_Senkrecht als Eingang deklarieren
  pinMode(Pin_Waagerecht, INPUT);// Endschalter waagerecht an Pin_Waagerecht als Eingang deklarieren
  pinMode(EnableA, OUTPUT); //Arduino Pin EnableA als Ausgangspin deklarieren
  pinMode(In1, OUTPUT); //Arduino Pin In1 als Ausgangspin deklarieren
  pinMode(In2, OUTPUT); //Arduino Pin In2 als Ausgangspin deklarieren
}

void Motor_Start(int Richtung, int Geschw) { //Anweisungsblock Motor Start
  switch (Richtung) {
    case 1: // Richtung = 1 => Motor läuft links
      digitalWrite(In1, LOW);
      digitalWrite(In2, HIGH);
      break;
    case 2: // Richtung = 2 => Motor läuft rechts
      digitalWrite(In1, HIGH);
      digitalWrite(In2, LOW);
      break;
  }
  analogWrite(EnableA, Geschw); // PWM-Signal (0-255) an EnableA Pin der H_Brücke senden
}

void Motor_Stop() { // Anweisungsblock Motor Stop und Rücksetzten der Flag-Variablen
  digitalWrite(In1, LOW);
  digitalWrite(In2, LOW);
  analogWrite(EnableA, 0);
  Zeit_akt = 0;
  Startzeit = 0;
  SenkrechtSchwenken = 0;
  WaagerechtSchwenken = 0;
}

void Eingaege_abfragen() { // Zustünder der Eingünge abfragen
  Wechsel_Taster = digitalRead(Pin_Wechsel);
  Endschalter_Senkrecht = digitalRead(Pin_Senkrecht);
  Endschalter_Waagerecht = digitalRead(Pin_Waagerecht);
}

void Serielle_Ausgabe() { // Anweisungsblock Datenausgabe über serielle Schnittstelle (Debug)
  Serial.print("Wechsel Taster : ");
  Serial.println(Wechsel_Taster);
  Serial.print("Endschalter Senkrecht : ");
  Serial.println(Endschalter_Senkrecht);
  Serial.print("Endschalter Waagerecht : ");
  Serial.println(Endschalter_Waagerecht);
  Serial.print("SenkrechtSchwenken : ");
  Serial.println(SenkrechtSchwenken);
  Serial.print("WaagerechtSchwenken : ");
  Serial.println(WaagerechtSchwenken);
  Serial.println("------------");
  delay (500);
}

void loop() {  // Hauptprogrogrammschleife
  Eingaege_abfragen(); // Zustände der Eingangspin's abfragen
 
  // Wenn Wechseltaster grade erst gedrückt wird, Systemzeit holen
  if ((Wechsel_Taster == 1) && (Taster_Timer_Start == 0)) Taster_Timer_Start = millis();
 
  // Solange Wechseltaster gedrückt ist, aktuelle Timerzeit berechnen
  if ((Wechsel_Taster == 1) && (Taster_Timer_Start > 0)) Taster_Timer_akt = millis() - Taster_Timer_Start;
 
  if (Wechsel_Taster == 0) { // Wenn Wechseltaster nicht gedrückt ist
    Taster_Timer_Start = 0; //Rücksetzten der Startzeit des Timers Tastenanschlagzeit
    Taster_Timer_akt = 0; //Rücksetzten des Timers Tastenanschlagzeit
  }
  #ifdef Debug
  Serial.println(Taster_Timer_akt); // Datenausgabe der aktuellen Tastendrückzeit wenn Debug
  #endif
  if (Taster_Timer_akt >= 3000){ //Wenn Taster länger als 3 Sekunden gedrückt
    FirstLoop = 1; // FirstLoop auf 1 setzten und schwenken nach waagerecht erzwingen
    Taster_Timer_Start = 0; //Rücksetzten der Startzeit des Timers Tastenanschlagzeit
    Taster_Timer_akt = 0; //Rücksetzten des Timers Tastenanschlagzeit
  }
 

  //Anweisungsblock Monitor begint nach waagerecht zu schwenken.
  if ((((Wechsel_Taster == 1) && (Endschalter_Senkrecht == 1)) && !((SenkrechtSchwenken == 1) || (WaagerechtSchwenken == 1))) || FirstLoop == 1)   {
    WaagerechtSchwenken = 1; // Setzen der Flagvariablen
    Startzeit = millis(); // Startzeit für Nothalt holen
#ifdef Debug
    Serial.println("Waagerecht schwenken begint"); // Datenausgabe wenn Debug
#endif
    for (int x = Speed_Min; x < Speed_Max; x = x + 1) { // Motor von Speed_Min auf Speed_Max beschleunigen
      Motor_Start(1, x);
      delay (2);
    }
  }

  //Anweisungsblock Monitor endet nach waagerecht zu schwenken.
  if ((WaagerechtSchwenken == 1) && (Endschalter_Waagerecht == 1)) {
    for (int x = Speed_Max; x > Speed_Min; x = x - 1) { // Motor von Speed_Max auf Speed_Min abbremsen
      Motor_Start(1, x); // Motor entsprechend starten
      delay (2);
    }
    Motor_Stop(); // Motor stoppen und Flagvriablen rücksetzten
#ifdef Debug
    Serial.println("Waagerecht schwenken endet"); // Datenausgabe wenn Debug
#endif
  }

  //Anweisungsblock Monitor begint nach senkrecht zu schwenken.
  if (((Wechsel_Taster == 1) && (Endschalter_Waagerecht == 1)) && !((SenkrechtSchwenken == 1) || (WaagerechtSchwenken == 1)))            {
    SenkrechtSchwenken = 1; // Setzen der Flagvariablen
    Startzeit = millis(); //Startzeit für Nothalt holen
#ifdef Debug
    Serial.println("Senkrecht schwenken begint");// Datenausgabe wenn Debug
#endif
    for (int x = Speed_Min; x < Speed_Max; x = x + 1) { // Motor von Speed_Min auf Speed_Max beschleunigen
      Motor_Start(2, x);
      delay (2);
    }
  }

  //Anweisungsblock Monitor endet nach senkrecht zu schwenken.
  if ((SenkrechtSchwenken == 1) && (Endschalter_Senkrecht == 1)) {
    for (int x = Speed_Max; x > Speed_Min; x = x - 1) { // Motor von Speed_Max auf Speed_Min abbremsen
      Motor_Start(2, x); // Motor entsprechend starten
      delay (2);
    }
    Motor_Stop(); // Motor stoppen und Flagvriablen rücksetzten
#ifdef Debug
    Serial.println("Senkrecht schwenken endet"); // Datenausgabe wenn Debug
#endif
  }

  if ((SenkrechtSchwenken == 1) || (WaagerechtSchwenken == 1)) {
    Zeit_akt = millis() - Startzeit; // Solange Schwenken aktiv ist den Timer aktualisieren
    if (Zeit_akt >= Schwenkzeit_max) { // Nothalt wenn Schwnkzeit_max erreicht ist
      Motor_Stop(); // Motor stoppen und Flagvriablen rücksetzten
#ifdef Debug
      Serial.println("**************Nothalt****************"); // Datenausgabe wenn Debug
#endif
    }
  }
#ifdef Debug
  Serial.println(Zeit_akt); // Datenausgabe wenn Debug
  Serielle_Ausgabe();
#endif
  FirstLoop = 0; // Flagvariable rücksetzten
}



Video reiche ich noch nach.

LG Dirk

RockinHorse

Re: Daddelkiste mit elektrisch schwenkbaren Monitor.

Beitragvon RockinHorse » Mi 23. Mai 2018, 20:45

Hallo Dirk,

schöner Sketch, und schön auskommentiert. So wie sich das gehört :mrgreen:

Kleiner Tipp am Rande, ist aber bei der Größe des Sketches nicht von Bedeutung:
Ich bevorzuge die geschweifte Klammer zum Öffnen der Funktion auf gleicher Tiefe der abschließenden Klammer zu setzen, das macht die Fehlersuche bei umfangreichen Texten leichter.

Aber ansonsten sieht es so aus, als wenn du noch was anderes gemacht hättest - super.


Zurück zu „• Sonstige Objekte“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 Gäste