INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Projekt Portionierer mit Schrittmotor, Bluetooth hilfe
08.08.2018, 06:31 (Dieser Beitrag wurde zuletzt bearbeitet: 08.08.2018 06:34 von Flieger.)
Beitrag #1
Projekt Portionierer mit Schrittmotor, Bluetooth hilfe
Hallo Forumsmitglieder,

ich bin nun schon einige Zeit passiv in diesem Forum unterwegs und habe viel gelernt. Jetzt bin ich an einem Punkt angelangt an dem ich alleine nicht mehr weiter komme und um eure Hilfe bitten muss. Bitte berücksichtigt, dass ich absoluter Arduino-Anfänger bin. Für den derzeitigen Stand meines Programms hab ich größtenteils im Internet verfügbare Programme zusammenkopiert und angepasst. Das funktioniert ganz gut, aber ich möchte das ganze natürlich noch verbessern!

Bei meinem Projekt handelt es sich um einen Portionierer. Wie ihr der angehängten Skizze entnehmen könnt, wird ein Stempel in eine Spritze eingefahren und soll eine vorgegebene Menge Portionen ausgeben. Die Produktmenge, sowie die Anzahl der Positionen variiert.

Das funktioniert im Moment so:

Ich verschließe den Stutzen mit einem Schieber und fülle das Produkt in die Spritze. Anschließen fahre ich den Stempel soweit ein bis der Motor blockiert. An einer Skala kann ich dann die Füllmenge in mm ablesen. Ich passe im Arduino Programm Füllmenge und die Anzahl der Portionen an und lade das Programm hoch. Ich öffne den Schieber. Danach kann ich über den Knopf “portionieren“ die vorgegebene Menge an exakt gleichen Portionen aus der Spritze drücken. Dann wird der Stempel über den Knopf ausfahren zurückgefahren und das Spiel beginnt von vorne.

Soweit so gut. Es ist halt etwas nervig jedes Mal den Laptop anzuschließen und das Programm neu zu laden.

Die Idee:

Ich möchte gerne die beiden Werte “Füllmenge“ und “Portionen“ via Bluetooth eingeben. Ein entsprechendes Bluetooth Modul habe ich bereits. Allerdings scheitere ich an der Einbindung in das Programm.

Ich hoffe ihr könnt mir helfen und bedanke mich schon Mal im Voraus für eure Hilfe!

Skizze:

   

Das aktuelle Programm:

const int stepPin = 3; //Schritte Impulse
const int dirPin = 4; //Rechts-Linkslauf
const int taster1=7; // portionieren
int tasterstatus1=0; // portionieren
const int taster2=6; // ausfahren (Eilgang)
int tasterstatus2=0; // ausfahren (Eilgang)
const int taster3=5; // einfahren (Eilgang)
int tasterstatus3=0; // einfahren (Eilgang)

int fullmenge=100; // Füllmenge in mm
int portionen=20; // Anzahl der Portionen

float mmschritt=(10*4.7*12)/(100*200); // Berechnung wieviel mm der Stempel pro Schritt bewegt wird = Anzahl Zähne Antriebswelle x Steigung Zahnstange x Anzahl Zähne Motor / Anzahl Zähne großes Zahnrad * Schritte Motor pro Umdrehung


void setup() {
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(taster1,INPUT);
pinMode(taster2,INPUT);
pinMode(taster3,INPUT);

}
void loop() {

tasterstatus1=digitalRead(taster1);

if (tasterstatus1 == HIGH)//Mit taster 1 wird Portioniert
{ //Programmabschnitt des IF-Befehls öffnen.
digitalWrite(dirPin,HIGH); // Drehrichtung
for(int x = 0; x < (fullmenge/(portionen*mmschritt)) ; x++) { //hier wird die Anzahl der Schritte die der Motor pro Portion macht berechnet und dann gefahren
digitalWrite(stepPin,HIGH);
delayMicroseconds(3000); //mit der Verzögerung wird die Drehzal festgelegt. Umso weniger Verzögerung, desto schneller dreht sich der Motor
digitalWrite(stepPin,LOW);
delayMicroseconds(3000);
}
} //Programmabschnitt des IF-Befehls schließen.

tasterstatus2=digitalRead(taster2);

if (tasterstatus2 == HIGH)//Mit taster 2 wird eingefahren (Eilgang)
{ //Programmabschnitt des IF-Befehls öffnen.
digitalWrite(dirPin,HIGH); // Drehrichtung
for(int x = 0; x < 5 ; x++) { //hier habe eine kleine Anzahl Schritte eingegeben. Der Motor stopt im Prinzip wenn man den Taster loslässt.
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000); //mit der Verzögerung wird die Drehzal festgelegt. Umso weniger Verzögerung, desto schneller dreht sich der Motor
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
} //Programmabschnitt des IF-Befehls schließen.

tasterstatus3=digitalRead(taster3);

if (tasterstatus3 == HIGH)//Mit taster 3 wird ausgefahren (Eilgang)
{ //Programmabschnitt des IF-Befehls öffnen.
digitalWrite(dirPin,LOW); // Drehrichtung
for(int x = 0; x < 5 ; x++) { //hier habe eine kleine Anzahl Schritte eingegeben. Der Motor stopt im Prinzip wenn man den Taster loslässt.
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000); //mit der Verzögerung wird die Drehzal festgelegt. Umso weniger Verzögerung, desto schneller dreht sich der Motor
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
} //Programmabschnitt des IF-Befehls schließen.

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.08.2018, 09:37
Beitrag #2
RE: Projekt Portionierer mit Schrittmotor, Bluetooth hilfe
Es wäre schön, wenn du deinen Sketch in Code-Tags hier reinsetzt, dann können den alle, auch die mobilen User, gut lesen.
Wie das geht, kannst du hier nachlesen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.08.2018, 21:28
Beitrag #3
RE: Projekt Portionierer mit Schrittmotor, Bluetooth hilfe
Hi, danke für die Info. Hab mich schon gefragt wie das geht. Leider kann ich meinen ersten Beitrag nicht mehr bearbeiten weil die 600min überschritten sind. Deshalb hier nochmal das Programm:

Code:
const int stepPin = 3; //Schritte Impulse
const int dirPin = 4; //Rechts-Linkslauf
const int taster1=7; // portionieren
int tasterstatus1=0; // portionieren
const int taster2=6; // ausfahren (Eilgang)
int tasterstatus2=0; // ausfahren (Eilgang)
const int taster3=5; // einfahren (Eilgang)
int tasterstatus3=0; // einfahren (Eilgang)

int fullmenge=100; // Füllmenge in mm
int portionen=20; // Anzahl der Portionen

float mmschritt=(10*4.7*12)/(100*200); // Berechnung wieviel mm der Stempel pro Schritt bewegt wird = Anzahl Zähne Antriebswelle x Steigung Zahnstange x Anzahl Zähne Motor / Anzahl Zähne großes Zahnrad * Schritte Motor pro Umdrehung


void setup() {
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(taster1,INPUT);
pinMode(taster2,INPUT);
pinMode(taster3,INPUT);

}
void loop() {

tasterstatus1=digitalRead(taster1);

if (tasterstatus1 == HIGH)//Mit taster 1 wird Portioniert
{ //Programmabschnitt des IF-Befehls öffnen.
digitalWrite(dirPin,HIGH); // Drehrichtung
for(int x = 0; x < (fullmenge/(portionen*mmschritt)) ; x++) { //hier wird die Anzahl der Schritte die der Motor pro Portion macht berechnet und dann gefahren
digitalWrite(stepPin,HIGH);
delayMicroseconds(3000); //mit der Verzögerung wird die Drehzal festgelegt. Umso weniger Verzögerung, desto schneller dreht sich der Motor
digitalWrite(stepPin,LOW);
delayMicroseconds(3000);
}
} //Programmabschnitt des IF-Befehls schließen.

tasterstatus2=digitalRead(taster2);

if (tasterstatus2 == HIGH)//Mit taster 2 wird eingefahren (Eilgang)
{ //Programmabschnitt des IF-Befehls öffnen.
digitalWrite(dirPin,HIGH); // Drehrichtung
for(int x = 0; x < 5 ; x++) { //hier habe eine kleine Anzahl Schritte eingegeben. Der Motor stopt im Prinzip wenn man den Taster loslässt.
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000); //mit der Verzögerung wird die Drehzal festgelegt. Umso weniger Verzögerung, desto schneller dreht sich der Motor
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
} //Programmabschnitt des IF-Befehls schließen.

tasterstatus3=digitalRead(taster3);

if (tasterstatus3 == HIGH)//Mit taster 3 wird ausgefahren (Eilgang)
{ //Programmabschnitt des IF-Befehls öffnen.
digitalWrite(dirPin,LOW); // Drehrichtung
for(int x = 0; x < 5 ; x++) { //hier habe eine kleine Anzahl Schritte eingegeben. Der Motor stopt im Prinzip wenn man den Taster loslässt.
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000); //mit der Verzögerung wird die Drehzal festgelegt. Umso weniger Verzögerung, desto schneller dreht sich der Motor
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
} //Programmabschnitt des IF-Befehls schließen.

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.08.2018, 13:02 (Dieser Beitrag wurde zuletzt bearbeitet: 09.08.2018 13:06 von Hilgi.)
Beitrag #4
RE: Projekt Portionierer mit Schrittmotor, Bluetooth hilfe
Moin,


wenn du deinen serial port nicht benutzt zb zur monitorausgabe, dann nimm den für bluetooth.
ansonsten sofwareserial.

im endeffekt bekommst du n string rein, den musst du vergleichen/zuordnen, wenn du deine reaktionen auslagerst, kannst du vereinfacht in die jeweiligen programme springen, ob taster oder bt.

zb:
Code:
void loop()
{
  if( btString == "portion" || digitalRead( taster1 ) )
  {
    portionieren();
  }
}

void portionieren()
{
  digitalWrite( dirPin, HIGH) ; // Drehrichtung

  for( int x = 0; x < ( fullmenge / ( portionen * mmschritt ) ); x++ )
  {
    digitalWrite( stepPin, HIGH );

    delayMicroseconds( 3000 );

    digitalWrite( stepPin, LOW );

    delayMicroseconds( 3000 );
  }
}


hierzu musst du natürlich erstmal bt auslesen, das ist aber gut dokumentiert, wandle "chars" in einen string um.... -> Beispiel


Einfach mal los legen, wird schon, bald sind das banalitäten für dich Wink


Wir helfen gern, sobald mehr code da ist Wink


Gruß aus Osnabrück



edit:
es wäre evtl einfacher n stepper motor zu benutzen, der sollte um einiges präziser arbeiten, als deine berechnung
digitalRead( taster1 ) ist das gleiche wie digitalRead( taster1 ) == true;
(digitalRead( !taster1 ) -> digitalRead( taster1) == false; )

Nicht denken,...
...nachdenken... Rolleyes

Smarter - LiveData
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Keyboard.print Hilfe Simon111 0 344 15.07.2018 15:47
Letzter Beitrag: Simon111
Sad Hilfe bei 2.4 TFT Display Harry Hirsch 68 7.147 10.07.2018 18:17
Letzter Beitrag: Tommy56
Big Grin Brauche dringend Hilfe mit dem Programmieren von Servo und Taster holzchistli 4 858 19.06.2018 16:45
Letzter Beitrag: hotsystems
  Arduino Mega2560 bitte um Hilfe dickys68 48 4.369 07.06.2018 19:05
Letzter Beitrag: dickys68
  Arduino Hilfe im Raum Köln/Düsseldorf dickys68 0 475 25.05.2018 12:17
Letzter Beitrag: dickys68
  .WAV und Bluetooth BluPxl 13 972 19.04.2018 20:08
Letzter Beitrag: Tommy56
  Endschalter für Schrittmotor clemens5555 10 1.499 18.04.2018 14:37
Letzter Beitrag: Tommy56
  hilfe bei callback ausgabe per knopfdruck merz 5 506 15.04.2018 14:16
Letzter Beitrag: Tommy56
  Hilfe bei Fehlermeldung TroyPan 3 678 23.03.2018 23:38
Letzter Beitrag: Tommy56
  Hilfe beim skript Devtris 24 2.449 12.03.2018 18:19
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste