Kreuztisch mit Schrittmotoren bestücken

Fertige Geräte mit Bilden, Schaltungen, Programmen vorstellen.
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Ich habe die Datei ins Netz gestellt.

Franz
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von e69-fan »

Danke Franz,

:(V): Probelauf mit den Daten hat funktioniert.

Das war eine Datei mit der fertige Daten an den Arduino
übergeben werden

Ich bräuchte aber die Hauptdatei mit den Formeln um neue Datenfolgen generieren zu können oder die Formel mit der Du mm in Schritte umrechnest.

Dann sollten wir uns noch Gedanken machen wie wir den Start- Nullpunkt definieren wo die Fräserreise auf dem Werkstück beginnt.

Ebenso könnte wir noch den Durchmesser des Fräser berücksichtigen.

Aber das ist nur noch Feinschliff, denn den Hauptteil hast Du ja schon sehr gut gemacht.

Servus - Wolfgang
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Der Startpunkt ist da, wo du in am Anfang mit der Handsteuerung hinfährst. Von da aus fährt er nach dem Druck der Start-Taste alles, was du im auf der SD Karte eingibst.
Das mit dem umrechnen im Excel kann ich dir dann zeigen, wenn wir uns mal wieder treffen. Beim Umrechnen von mm in Schritte rechnet man nur mm / 0,0025. Dann hast du die Schritte. Also wenn ich was Bohren muss, fahre ich mit der Hand auf erste Bohrloch, dann das gleich bohren und danach auf Start. Wenn ich Fräsen will, fahre ich mit der Hand auf die erste Ecke des Ausschnittes, und drücke Start. Da muss ich natürlich auf der SD Karte die Wege minus Fräserstärke eingeben.

Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Hi Wolfgang
und, wie schauts aus. Kommst du mal vorbei? Dass wir noch ein bischen genauer besprechen können, wie das mit der SD-Karte läuft. Eine rundrum glücklich Datei für die SD-Karte gibt es nicht, weil die Vorgaben für die Berechnung ja nur für die Zeilen eingegeben werden, die auch Daten enthalten. Was ja bei jedem Fräsgang mehr oder weniger viele sind. So gibt man in der Spalte E1 die Berechnung ein, Summe aus F1/0,0025. Dann kompiert man E1 und gibt sie in E2, E3, E4, u.s.w. bis zu der Zeile, inder der letzte Datensatz eingegeben wird. Und in F - Spalte zieht man bei den Schrittel noch das Maß vom Fräser Durchmesser ab. Also nur beim Fräsen, wenn man nur Bohrt, dann gilt ja die länge dess Fahrweges von Bohrloch 1 Mitte, nach Bohrloch 2 Mitte, u.s.w.

Und da wo gebohrt wird, könnte man bei den mm gleich das Bohrermaß eingeben, weil der Motor drei ja eh nicht fährt, sondern nur ein Bohrstop ist. Also bei Motor 3 trägt man bei fahren eine "0" ein, dass der Tisch zwegs Bohren stehen bleibt, und bei "mm" trägt man den Durchmesser vom Bohrer ein. So weißt du dann gleich, wenn der Tisch steht, und am Display "Bohrstop" steht, dass du da z.B. ein 6mm Loch bohren musst. Anders natürlich wenn man eine Z-Achse hat, dann muss da bei mm rein, wie viele mm der Bohrer für die Bohrung ins Material abgesenkt werden muss, und bei fahren eine "1" dass die Kiste das Loch selber bohrt.

Servus
Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Hallo Wolfgang.
Hier erst mal der Link zum Gehäuse. Habe gerade gesehen das Gehäuse kostet nicht 17,- sondern 21,85 Euro. Größe war glaube ich 250x350x150mm Breite x Höhe x Tiefe.

Und ich habe getestet ob der Tisch mit dem Tempo fährt, das auf der Karte dafür eingetragen worden ist. Das funktioniert.

Bis später,
Franz

Hier ist mein Aktueller Softwarestand "Kreuztisch_Pr._V3.4":

Code: Alles auswählen

/*
  ################################################################################################################
  Kreuztisch Steuerung mit Schrittmototoren erstellt mit der Mobatools Lib. die ich sehr empfehlen kann.
  Die Fahrdaten werden mit Excel eingegeben, auf eine SD-Karte mit Trennung durch Semikolon exportiert,
  und vom Arduino wieder ausgelesen.
  Die beötigten Daten in einer Fahrdaten Zeile sind:
  Position 1: Motor / Achse 1 - 3 für X, Y, Z
  Position 2: Fahren ja / nein. Im Moment immer 1 oder 0
  Position 3: Dir, also rechts / links = 1 - 2
  Position 4: Tempo 20 - 1800
  Position 5: Schritte 1 - 250000
  Das ist die Version 3.4
  Die Pins des Kartenlesers sind beim Arduino Mega:
  Miso Pin 50
  Mosi Pin 51
  SCK Pin 52
  CS Pin 53
  GND und VCC 5 Volt natürlich auch noch.
  Der Kartenleser macht Karten bis 32GB
  Mit FAT16/FAT32-Partition
  Wenn die Fahrgeschwindigkeit zu gering ist, kann man in der Lib.Datei "MobaTools.h"
  "#define CYCLETIME       200" ändern auf "#define CYCLETIME       100"
  Dann das Programm nochmal neu auf den Arduino übertragen.
  !!!Achtung!!! die Mobatools.d ist dann für dieses Programm i.O.
  aber muss danach wieder in den ursprünglichen Zustand versetzt werden !!
  Wir belegen mit SPI und I2C mindestens 27-30 Pin´s also fallen kleinere Arduinos aus.
  Im Moment sind es nur 23 Pin´s aber für Spindel ein/aus, Kühlung, Absaugung,
  sollte man sich die Möglichkeit offen halten. Also lieber mit 30 rechnen!!!
  Ich habe immer gerne Luft nach oben, wenn ich was baue. 
  ###############################################################################################################
*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
//---SD Kartenleser-------------------------------
#include <SPI.h>
#include <SD.h>
File myFile;

byte gelesen = 0;
const byte chipSelectPin = 53;
const String filename = "Mappe1.csv";
char zeilenBuffer[30];
char auswerteBuffer[6][8];
byte automatik = 0;
//----------------Sonderzeichen-------------------
#define OHM   "\xF4"    // Zeichen für Ohm
#define AE    "\xE1"    // Zeichen für "ä"
#define OE    "\xEF"    // Zeichen für "ö"
#define SS    "\xE2"    // Zeichen für "ß"
#define OBEN    "\x5E"    // Zeichen für "hoch"
#define RECHTS   "\176" // Pfeil nach rechts
#define LINKS   "\177"  // Pfeil nach links
#define UE  "\365"      // Zeichen für "ü"
#define GRAD  "\337C"   // Zeichen für "Grad" Celsius
//------------------------------------------------
#define MAX8BUTTONS // spart Speicher, da nur 8 Taster benötigt werden (saves RAM)
#include <MobaTools.h>
// Pindefinitions - change to your needs
//----------Motor 1-------------------------------
const byte dirPin1       = 5;
const byte stepPin1      = 4;
const byte enaPin1       = 6;
//----------Motor 2-------------------------------
const byte dirPin2       = 9;
const byte stepPin2      = 8;
const byte enaPin2       = 10;
//----------Motor 3-------------------------------
const byte dirPin3       = 44;
const byte stepPin3      = 43;
const byte enaPin3       = 45;
//----------Taster--------------------------------
const byte button1Pin   = A1; //---Motor1 links---
const byte button2Pin   = A2; //---Motor1 rechts--
const byte button3Pin   = A3; //---Motor2 links---
const byte button4Pin   = A4; //---Motor2 rechts--
const byte button5Pin   = A5; //---Motor3 links---
const byte button6Pin   = A6; //---Motor3 rechts--
const byte button7Pin   = A7; //---Fräsen Start Bedienteil---
const byte button8Pin   = A8; //---Fräsen Start Station------
//--------------Taste zum Entsperren, wenn Stopp durch fahren==0
const byte entsperrtaste = A9; // Taste die nicht im MoToButton integriert ist
//----------Tempo_Poti---------------------------------------------------------------
const byte potPin       = A0;   // Poti muss ein analoger Eingang sein
const int STEPS_REVOLUTION = 1600;
unsigned long Sekundenablauf01 = 0; // Tastenabfrage von Taster02 300ms aussetzen
const unsigned long Pausezeit01 = 1000;
//--------Fahrdaten------------------------------------------------------------------
byte motor = 0;               // Achsenauswahl 1-2-3 ist X-Y-Z
byte fahren = 1;              // Motoren bewegen
byte richtung = 0;            // Richtung der Bewegung 1 oder 2
int tempo1 = 0;               // Tempo für Handsteuerung, wird vom Poti eingestellt
int tempo2 = 0;               // Tempo zum Fräsen
int tempo = 0;                // Wird vom Programm zur übergabe benutzt
float mm = 0;
float multiplikator = 25;
float teiler = 10000;
float schritte = 0;   // Schritte die der Motor fahren soll
//-----------------------------------------------------------------------------------
//Stepper einrichten ( 1600 Schritte / Umdrehung - 1/4 Microstep )
MoToStepper myStepperX( STEPS_REVOLUTION, STEPDIR );  // 1600 Steps/ Umdrehung
MoToStepper myStepperY( STEPS_REVOLUTION, STEPDIR );  // 1600 Steps/ Umdrehung
MoToStepper myStepperZ( STEPS_REVOLUTION, STEPDIR );  // 1600 Steps/ Umdrehung
// Taster einrichten
// Den Tasternamen die Indizes 0...7 zuordnen
enum { Button1 = 0, Button2, Button3, Button4, Button5, Button6, Button7, Button8 };
// muss als byte definiert sein, damit ein enfaches sizeof funktioniert
const byte buttonPins[] = { button1Pin, button2Pin, button3Pin, button4Pin, button5Pin, button6Pin, button7Pin, button8Pin};
MoToButtons button( buttonPins, sizeof(buttonPins), 20, 500 );

MoToTimebase speedIntervall;    // Zeitinterval zum Auslesen des Speedpotentiometers
// the speed pot ist read only every 'speedintervall' ms

int vspeed = 0;                 //Steppergeschwindigkeit in U/min*10
//==============================================================================================================
void setup()
{
  lcd.begin();
  lcd.backlight();
  Serial.begin(9600);
  pinMode(entsperrtaste, INPUT_PULLUP); // Eingang für Entsaperrtaste
  //-----------------------------Motor 1----------------------------------------------------
  myStepperX.attach( stepPin1, dirPin1 );
  myStepperX.attachEnable( enaPin1, 10, LOW );        // Enable Pin aktivieren ( LOW=aktiv )
  myStepperX.setSpeed( 200 );
  myStepperX.setRampLen( 100 );                       // Rampenlänge 100 Steps bei 20U/min
  speedIntervall.setBasetime( 100 );                  // 100ms Tickerzeit
  //------------------------------Motor 2-----------------------------------------------------
  myStepperY.attach( stepPin2, dirPin2 );
  myStepperY.attachEnable( enaPin2, 10, LOW );        // Enable Pin aktivieren ( LOW=aktiv )
  myStepperY.setSpeed( 200 );
  myStepperY.setRampLen( 100 );                       // Rampenlänge 100 Steps bei 20U/min
  //-----------------------------Motor 3------------------------------------------------------
  myStepperZ.attach( stepPin3, dirPin3 );
  myStepperZ.attachEnable( enaPin3, 10, LOW );        // Enable Pin aktivieren ( LOW=aktiv )
  myStepperZ.setSpeed( 200 );
  myStepperZ.setRampLen( 100 );                       // Rampenlänge 100 Steps bei 20U/min
  //------------------------------------------------------------------------------------------
  //----------CD_Kartenleser aktivieren-------------------------------------------------------
  pinMode(SS, OUTPUT);
  Serial.begin(9600);
  while (!Serial)
    Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelectPin)) // Ist SD Karte nicht ansprechbar?
  {
    Serial.println("Initialisierung fehlgeschlagen!");
    while (1); // Wenn Karte nicht ansprechbar, ist hier Programm Ende !!!
  }
  //Serial.println("Initialisierung abgeschlossen .");
  //-----------------------------------------------------------------------------------------
}
//=============================================================================================================
void loop() {
  Serial.println(F("LOOP Durchlauf"));
  lcd.setCursor (0, 0);
  lcd.print(F("Kreuztisch_Pr._V3.4 "));
  //------SD_Karte öffnen zum Lesen-------------------------------------------------------
  if (automatik == 1)
  {
    lcd.setCursor (0, 2);
    lcd.print(F("  Automatik l"AE"uft  "));
    lcd.setCursor (0, 3);
    lcd.print(F("                   "));
    myFile = SD.open(filename);
    //Serial.print(filename);
    if (myFile)
    {
      //Serial.println(F(" geöffnet!"));
      while (myFile.available())
      {
        if (fahren == 1)
        {
          leseZeile();
          ausgabeZeile();
          teileZeile();
          ausgabeWerte();
        }
        else {
          // ---------------Ist Taste Weiter gedrückt??---------------------------------
          if (digitalRead(entsperrtaste) == 0)
          {
            fahren = 1;
            lcd.setCursor (0, 2);
            lcd.print(F("    Weiterfahren   "));
          }
        }
      }
      // schließe die Datei:
      myFile.close();
      //Serial.println(F(" geschlossen!"));
      //while (1);
      automatik = 0;
      lcd.setCursor (0, 2);
      lcd.print (F("                    "));
      lcd.setCursor (0, 2);
      lcd.print (F(" Karte abgearbeitet "));
    }
    else
    {
      // Wenn die Datei nicht geöffnet wurde, drucke einen Fehler :
      //Serial.print("Fehler beim öffnen von ");
      //Serial.println(filename);
    }
  }
  //--------------------------------------------------------------------------------------
  button.processButtons();          // Taster einlesen und bearbeiten

  // Speed alle 100ms neu einlesen und setzen
  if ( speedIntervall.tick() ) {
    // wird alle 100ms aufgerufen ( Tickerzeit = 100ms im setup() )
    vspeed = map((analogRead(potPin)), 0, 1023, 20, 1800);  //Poti mappen auf 2 ... 180 Umdr/Min
    //min speed =2 and max speed =180 rpm
    tempo1 = vspeed;
    tempo = tempo1;
    if (millis() - Sekundenablauf01 >= Pausezeit01)  // 1000msec abgelaufen?
    {
      lcd.setCursor (0, 3);
      lcd.print (F("  VSPEED = "));
      lcd.setCursor (12, 3);
      lcd.print (F("     "));
      lcd.setCursor (12, 3);
      lcd.print (vspeed);
      Sekundenablauf01 = millis();
    }
    myStepperX.setSpeed( tempo );
    myStepperY.setSpeed( tempo );
    myStepperZ.setSpeed( tempo );
  }
  //----------------------------------------------------------------
  // Drehen Motor1 rechtsrum
  if (button.pressed(Button1) ) {
    //Taster1 gedrückt
    tempo = tempo1;
    myStepperX.rotate( 1 );          // Stepper1 dreht vorwärts
  }
  if ( button.released(Button1) ) {
    //Taster1 losgelassen
    myStepperX.rotate(0);             // Stepper1 stoppt
  }

  //Drehen Motor1 linksrum
  if (button.pressed(Button2) ) {
    //Taster2 gedrückt
    tempo = tempo1;
    myStepperX.rotate( -1 );         // Stepper1 dreht rückwärts
  }
  if ( button.released(Button2) ) {
    //Taster2 losgelassen
    myStepperX.rotate(0);    // Stepper1 stoppt
  }
  //-----------------------------------------------------------------
  // Drehen Motor2 rechtsrum
  if (button.pressed(Button3) ) {
    //Taster3 gedrückt
    tempo = tempo1;
    myStepperY.rotate( 1 );          // Stepper2 dreht vorwärts
  }
  if ( button.released(Button3) ) {
    //Taster3 losgelassen
    myStepperY.rotate(0);            // Stepper2 stoppt
  }

  //Drehen Motor2 linksrum
  if (button.pressed(Button4) ) {
    //Taster4 gedrückt
    tempo = tempo1;
    myStepperY.rotate( -1 );         // Stepper2 dreht rückwärts
  }
  if ( button.released(Button4) ) {
    //Taster4 losgelassen
    myStepperY.rotate(0);            // Stepper2 stoppt
  }
  //-----------------------------------------------------------------
  // Drehen Motor3 rechtsrum
  if (button.pressed(Button5) ) {
    //Taster5 gedrückt
    tempo = tempo1;
    myStepperZ.rotate( 1 );          // Stepper3 dreht vorwärts
  }
  if ( button.released(Button5) ) {
    //Taster5 losgelassen
    myStepperZ.rotate(0);             // Stepper3 stoppt
  }

  //Drehen Motor3 linksrum
  if (button.pressed(Button6) ) {
    //Taster6 gedrückt
    tempo = tempo1;
    myStepperZ.rotate( -1 );         // Stepper3 dreht rückwärts
  }
  if ( button.released(Button6) ) {
    //Taster6 losgelassen
    myStepperZ.rotate(0);            // Stepper3 stoppt
  }
  if (button.pressed(Button7) ) {
    //Taster7 gedrückt
    automatik = 1;                  // Automatik von SD Karte starten
  }
  if ( button.released(Button7) ) {
    //Taster7 losgelassen
  }
  if (button.pressed(Button8) ) {
    //Taster8 gedrückt
    automatik = 1;                  // Automatik von SD Karte starten
  }
  if ( button.released(Button8) ) {
    //Taster8 losgelassen
  }
  //-----------------------------------------------------------------

}
//=========================================================================================
void leseZeile()
{
  char myChar = '\0';
  static byte bufferPosition = 0;
  if (bufferPosition == 0) memset(zeilenBuffer, '\0', sizeof(zeilenBuffer));
  while (myFile.available() && myChar != '\n')
  {
    myChar = myFile.read();
    if (isPrintable(myChar))
    {
      zeilenBuffer[bufferPosition] = myChar;
      bufferPosition++;
    }
  }
  // Hier ist ZeilenEnde / DateiEnde
  bufferPosition = 0;
}
//=========================================================================================
void ausgabeZeile()
{
  Serial.print(F("eingelesene Zeile ist: "));
  Serial.println(zeilenBuffer);
}
//=========================================================================================
void teileZeile()
{
  // zeilenbuffer in auswerteBuffer umschreiben
  memset(auswerteBuffer, '\0', sizeof(auswerteBuffer) / sizeof(auswerteBuffer[0]));
  strcpy (auswerteBuffer[0], strtok(zeilenBuffer, ";"));
  strcpy (auswerteBuffer[1], strtok(NULL, ";"));
  strcpy (auswerteBuffer[2], strtok(NULL, ";"));
  strcpy (auswerteBuffer[3], strtok(NULL, ";"));
  strcpy (auswerteBuffer[4], strtok(NULL, ";"));
  strcpy (auswerteBuffer[5], strtok(NULL, ";"));
  //Serial.println(F("Puffer geteilt!"));
}
//========================================================================================
void ausgabeWerte()
{
  for (byte b = 0; b < sizeof(auswerteBuffer) / sizeof(auswerteBuffer[0]); b++)
  {
    //Serial.print(F("Wert "));
    //Serial.print(b);
    //Serial.print(F(" ist: "));
    //Serial.println(auswerteBuffer[b]);
    motor = atoi(auswerteBuffer[0]);
    fahren = atoi(auswerteBuffer[1]);
    richtung = atoi(auswerteBuffer[2]);
    tempo = atoi(auswerteBuffer[3]);
    myStepperX.setSpeed(tempo);
    myStepperY.setSpeed(tempo);
    myStepperZ.setSpeed(tempo);
    schritte = atoi(auswerteBuffer[4]);
    mm = atoi(auswerteBuffer[5]);
    if (b == 0)
    {
      lcd.setCursor (0, 3);
      lcd.print(F("                    "));
      lcd.setCursor (0, 0);
      lcd.print(F("                    "));
      //----Display Motor1-------------
      if (motor == 1)
      {
        lcd.setCursor (1, 0);
        lcd.print("Mot X");
        lcd.print (F(" "));
        if (richtung == 1)
        {
          lcd.print(F(RECHTS));
        }
        if (richtung == 2)
        {
          lcd.print(F(LINKS));
        }
      }
      //----Display Motor2-------------
      if (motor == 2)
      {
        lcd.setCursor (1, 0);
        lcd.print("Mot Y");
        lcd.print (F(" "));
        if (richtung == 1)
        {
          //lcd.print(F("r"UE"ck"));
          lcd.print(F("v"));
        }
        if (richtung == 2)
        {
          lcd.print(F(OBEN));
        }
      }
      //----Display Motor3-------------
      if (motor == 3)
      {
        lcd.setCursor (1, 0);
        lcd.print("Mot Z");
        lcd.print (F(" "));
        if (richtung == 1)
        {
          lcd.print(F(OBEN));
        }
        if (richtung == 2)
        {
          lcd.print(F("v"));
        }
      }
      mm = (schritte * multiplikator) / teiler;
      lcd.print (F(" "));
      lcd.print(mm);
      lcd.print("mm");
    }
    //-------------Motor 1 fahren------
    if (motor == 1)
    {
      if (richtung == 1)
      {
        myStepperX.doSteps(schritte);
      }
      if (richtung == 2)
      {
        myStepperX.doSteps(-schritte);
      }

      motor = 0;
      richtung = 0;
      schritte = 0;
    }
    //-------------Motor 2 fahren------
    if (motor == 2)
    {
      if (richtung == 1)
      {
        myStepperY.doSteps(schritte);
      }
      if (richtung == 2)
      {
        myStepperY.doSteps(-schritte);
      }

      motor = 0;
      richtung = 0;
      schritte = 0;
    }
    //------------Motor 3 fahren-------
    if (motor == 3)
    {
      if (richtung == 1)
      {
        myStepperZ.doSteps(schritte);
      }
      if (richtung == 2)
      {
        myStepperZ.doSteps(-schritte);
      }
      if (fahren == 0)
      {
        lcd.setCursor (0, 2);
        lcd.print(F(" --- BOHRSTOPP --- "));
      }

      motor = 0;
      richtung = 0;
      schritte = 0;
    }
  }//---------fahren ende-----------------
  while (myStepperX.moving() > 0) {}
  while (myStepperY.moving() > 0) {}
  while (myStepperZ.moving() > 0) {}
}
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von e69-fan »

Servus Franz,

Das Gehäuse ist bestellt, aber jetzt brauche ich noch Taster die tasten und nicht haken.

Werde mal diese probieren:
Taster.png
Taster.png (123.36 KiB) 884 mal betrachtet


Da gäbe es einen cardreader:

https://www.reichelt.de/arduino-sd-kart ... 82683.html

Ich weiß aber nicht ob dieser verwendet werden kann. Gib halt Bescheid.




Servus - Wolfgang
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Ich habe ja diese hier verwendet. Jedenfalls da, wo ich dafür Platz hatte. :(o): Die schauen schön aus, aber brauchen viel Platz und man kann sie auch ein bischen schlecht drücken. Man muss ja mit der Fingerkuppe in eine Vertiefung rein. Das klappt je nach dem, wie gut man mit der Fingerkuppe trifft, mal besser, mal schlechter. Tja, da muss man sich wohl entscheiden, zwischen schön und gut bedienbar.

Zu deinen Kartenleser kann ich nichts sagen. Die kenne ich nicht und will ich im Moment auch nicht kenne lernen. Jedenfalls nicht für dieses Projekt. Ich habe mir nochmal zwei von Meinen bestellt, die sollten morgen kommen. Ich habe ja von denen keinen mehr und will bischen was damit testen. Aber du kannst ja mal schauen, ob die genauso funktionieren. Die Anschlüße sind ja die selben.

Franz

PS: Wenn du bei Reichelt was bestellst, nehme mir doch bitte 10 Stück von den Klemmen mit.
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

OK, meine Kartenleser sind da. Jetzt kann ich wieder was tun. :(oo): Dann werde ich heute mal das Programm vom "my_xy_projekt" auseinander pflücken.

Das hier ist das Programm zum auslesen der SD - Karten. Mit den Daten wird hier im Programm der Kreuztisch gesteuert.

Code: Alles auswählen

#include <SPI.h>
#include <SD.h>
File myFile;
const byte chipSelectPin = 53;
const String filename = "Mappe1.csv";
char zeilenBuffer[30];
char auswerteBuffer[6][8];
byte durchgaenge = 0;
//===========================================================================================
void setup()
{
  pinMode(SS, OUTPUT);
  Serial.begin(9600);
  while (!Serial)
    Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelectPin))
  {
    Serial.println("Initialisierung fehlgeschlagen!");
    while (1);
  }
  Serial.println("Initialisierung abgeschlossen .");
}
//==========================================================================================
void loop()
{
  myFile = SD.open(filename);
  Serial.print(filename);
  if (myFile)
  {
    Serial.println(F(" geöffnet!"));
    while (myFile.available())
    {
      Serial.print(F("Durchgaenge= "));
      Serial.println(durchgaenge);
      durchgaenge ++;
      leseZeile();
      ausgabeZeile();
      teileZeile();
      ausgabeWerte();
    }
    // schließe die Datei:
    myFile.close();
    Serial.println(F(" geschlossen!"));
    while (1);
  }
  else
  {
    // Wenn die Datei nicht geöffnet wurde, drucke einen Fehler :
    Serial.print("Fehler beim öffnen von ");
    Serial.println(filename);
  }
}
//=========================================================================================
void leseZeile()
{
  char myChar = '\0';
  static byte bufferPosition = 0;
  if (bufferPosition == 0) memset(zeilenBuffer, '\0', sizeof(zeilenBuffer));
  while (myFile.available() && myChar != '\n')
  {
    myChar = myFile.read();
    if (isPrintable(myChar))
    {
      zeilenBuffer[bufferPosition] = myChar;
      bufferPosition++;
    }
  }
  // Hier ist ZeilenEnde / DateiEnde
  bufferPosition = 0;
}
//=========================================================================================
void ausgabeZeile()
{
  Serial.print(F("eingelsene Zeile ist: "));
  Serial.println(zeilenBuffer);
}
//=========================================================================================
void teileZeile()
{
  // zeilenbuffer in auswerteBuffer umschreiben
  memset(auswerteBuffer, '\0', sizeof(auswerteBuffer) / sizeof(auswerteBuffer[0]));
  strcpy (auswerteBuffer[0], strtok(zeilenBuffer, ";"));
  strcpy (auswerteBuffer[1], strtok(NULL, ";"));
  strcpy (auswerteBuffer[2], strtok(NULL, ";"));
  strcpy (auswerteBuffer[3], strtok(NULL, ";"));
  strcpy (auswerteBuffer[4], strtok(NULL, ";"));
  strcpy (auswerteBuffer[5], strtok(NULL, ";"));
  Serial.println(F("Puffer geteilt!"));
}
//========================================================================================
void ausgabeWerte()
{
  for (byte b = 0; b < sizeof(auswerteBuffer) / sizeof(auswerteBuffer[0]); b++)
  {
    Serial.print(F("Wert "));
    Serial.print(b);
    Serial.print(F(" ist: "));
    Serial.println(auswerteBuffer[b]);
  }
}
Wer mehr auf den Kartenleser eingehen will, der hier verwendet wird, kann hier auf dem Link weiter machen.
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von e69-fan »

Hallo Franz,

Ich habe soeben die Stepper montiert und einen Probelauf gemacht.

:(V):

Ich muss noch warten bis ich die restlichen Teile bekomme und dann können wir mal fräsen.

Servus - Wolfgang
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Halloooo.
Was fehlt den noch bei dir? Vielleicht hole ich dann meine zwei Megas am WE bei dir ab. Dass ich meine Testkonsole für die Schrittmotoren mal wieder fertig machen kann. Die habe ich ja zerlegt dass ich meine Kreuztisch Steuerung mit dem Mega bauen konnte, weil ich keinen Mega mehr übrig hatte.

Schönes WE
Franz
Antworten

Zurück zu „Fertige Projekte Vorstellen“

Wer ist online?

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