

Forum zur gegenseitigen Hilfe für Hobby´s, Spass und Technik, im Raum Penzberg, Garmisch, Bad Tölz, Seeshaupt
Ich habe ein Netzteil mit CE. Aber das ist doch eh alles das selbe. Alles aus China. Staubschutz ja, da habe ich mir auch ein paar Gedanken gemacht, aber die Umsetzung kommt nach dem das Zeug erst mal so läuft, wir ich es mir vorstelle. Der Schaltschrank ja, da dachte ich an ein PC Gehäuse, aber ich habe leider alles weggeschmissen beim Umzug nach Ohlstadt. Ich schaue mal ob ich gelegentlich zu einem Kunden nach München komme, da könnte ich so viele haben wie ich will. Oder ich schaue mal in Ebay.e69-fan hat geschrieben: ↑Do 13. Jan 2022, 20:39 Ebenso wichtig erscheint mir ein optimaler Staubschutz und ein Anschluss für die Absaugung.
Über den Schaltschrank habe ich mir auch schon Gedanken gemacht - Mal sehen was der Fundus hergibt.
Das Netzteil habe ich auch bekommen. Hoffentlich funktioniert es - billigste Chinaware ohne jegliche Dokumente bzw. Prüfzeichen. Naja, kann man ja austauschen.
Code: Alles auswählen
////////// Beispiel 3 für MoToStepper - Betreiben eines bipolaren Steppers mit step/dir und enable ////////////
/* Beispiel für die Ansteuerung eines bipolaren Steppers über 4 Taster und
ein Poti ( für die Geschwindigkeit )
In diesem Beispiel werden neben der Stepperklasse (MoToStepper), auch die MoToButtons
und der MoToTimebase genutzt.
Der Spulenstrom wird abgeschaltet, wenn der Stepper nicht läuft.
Die Taster müssen gegen Gnd schalten, es sind keine Widerstände notwendig
Button1: Dreht rechts, solange Taster gedrückt
Button2: Dreht links, solange Taster gedrückt
Button3: 1 Umdrehung rechts
Button4: 1 Umdrehung links
*/
#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 durchgaenge = 0;
byte automatik = 0;
//------------------------------------------------
#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---
const byte button8Pin = A8; // Frei
//----------Tempo_Poti---------------------------------------------------------------
const byte potPin = A0; // Poti muss ein analoger Eingang sein
const int STEPS_REVOLUTION = 1600;
//--------Fahrdaten------------------------------------------------------------------
byte motor = 0; // Achsenauswahl 1-2-3 ist X-Y-Z
byte fahren = 0; // 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
unsigned long 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);
//-----------------------------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))
{
Serial.println("Initialisierung fehlgeschlagen!");
while (1);
}
//Serial.println("Initialisierung abgeschlossen .");
//-----------------------------------------------------------------------------------------
}
//=============================================================================================================
void loop() {
lcd.setCursor (0, 0);
lcd.print(F("Kreuztisch_Pr._V3.2 "));
//------SD_Karte öffnen zum Lesen-------------------------------------------------------
if (automatik == 1)
{
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);
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;
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) ) {
//Taster1 gedrückt
tempo = tempo1;
myStepperY.rotate( 1 ); // Stepper2 dreht vorwärts
}
if ( button.released(Button3) ) {
//Taster1 losgelassen
myStepperY.rotate(0); // Stepper2 stoppt
}
//Drehen Motor2 linksrum
if (button.pressed(Button4) ) {
//Taster2 gedrückt
tempo = tempo1;
myStepperY.rotate( -1 ); // Stepper2 dreht rückwärts
}
if ( button.released(Button4) ) {
//Taster2 losgelassen
myStepperY.rotate(0); // Stepper2 stoppt
}
//-----------------------------------------------------------------
// Drehen Motor3 rechtsrum
if (button.pressed(Button5) ) {
//Taster1 gedrückt
tempo = tempo1;
myStepperZ.rotate( 1 ); // Stepper3 dreht vorwärts
}
if ( button.released(Button5) ) {
//Taster1 losgelassen
myStepperZ.rotate(0); // Stepper3 stoppt
}
//Drehen Motor3 linksrum
if (button.pressed(Button6) ) {
//Taster2 gedrückt
tempo = tempo1;
myStepperZ.rotate( -1 ); // Stepper3 dreht rückwärts
}
if ( button.released(Button6) ) {
//Taster2 losgelassen
myStepperZ.rotate(0); // Stepper3 stoppt
}
if (button.pressed(Button7) ) {
//Taster7 gedrückt
automatik = 1;
}
if ( button.released(Button7) ) {
//Taster7 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("eingelsene Zeile ist: "));
//Serial.println(zeilenBuffer);
lcd.setCursor (0, 0);
lcd.print (F(" "));
lcd.setCursor (0, 0);
lcd.print (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]);
lcd.setCursor (0, 2);
lcd.print(F(" "));
lcd.setCursor (0, 2);
lcd.print(motor);
lcd.print (F("/"));
lcd.print(fahren);
lcd.print (F("/"));
lcd.print(richtung);
lcd.print (F("/"));
lcd.print(tempo);
lcd.print (F("/"));
lcd.print(schritte);
//-------------Motor 1-----------------
if (motor == 1)
{
if (richtung == 1)
{
myStepperX.doSteps(schritte);
}
if (richtung == 2)
{
myStepperX.doSteps(-schritte);
}
fahren = 0;
motor = 0;
richtung = 0;
schritte = 0;
}
//-------------Motor 2-----------------
if (motor == 2)
{
if (richtung == 1)
{
myStepperY.doSteps(schritte);
}
if (richtung == 2)
{
myStepperY.doSteps(-schritte);
}
fahren = 0;
motor = 0;
richtung = 0;
schritte = 0;
}
//------------Motor 3------------------
if (motor == 3)
{
if (richtung == 1)
{
myStepperZ.doSteps(schritte);
}
if (richtung == 2)
{
myStepperZ.doSteps(-schritte);
}
fahren = 0;
motor = 0;
richtung = 0;
schritte = 0;
}
}//---------fahren ende-----------------
while(myStepperX.moving()>0){}
while(myStepperY.moving()>0){}
while(myStepperZ.moving()>0){}
}
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste