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 - KLAMM.de
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Projekt Haushaltsplaner Eisverkäufer 1 184 06.11.2019 13:00
Letzter Beitrag: Tommy56
  Anfänger braucht Hilfe Schrittmotorsteuerung für den Hund dg8ngj 4 435 25.08.2019 17:00
Letzter Beitrag: dg8ngj
  Hilfe für Kita-Projekt gesucht. cyberiss 8 1.033 06.08.2019 07:57
Letzter Beitrag: Der Hobbyelektroniker
  Brauche Hilfe bei Arrays mega-hz 23 1.669 10.07.2019 15:59
Letzter Beitrag: MartinZ
  Hilfe benötigt bei der folgenden Aufgabe hanneswave 10 1.049 01.07.2019 18:08
Letzter Beitrag: Wochenendprogrammierer
  Oled 0.91 wechselnde Anzeige . Benötige hilfe MotD 6 1.062 24.03.2019 22:48
Letzter Beitrag: Bitklopfer
  Simon Says bzw. Senso - Spiel bitte Hilfe Riddle 3 880 15.03.2019 13:46
Letzter Beitrag: Tommy56
  HC06 Bluetooth verbindung huber5093 4 831 07.03.2019 15:47
Letzter Beitrag: huber5093
  Hilfe benötigt beim Verknüpfen von Klassen Batucada 7 976 02.03.2019 23:47
Letzter Beitrag: georg01
  Hilfe bei Formulierung der Frage Matt 3 986 23.02.2019 12:45
Letzter Beitrag: Tommy56

Gehe zu:


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