Robot arm stappenmotor aansturing

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 3
Geregistreerd: 18 Jan 2015, 00:19

Robot arm stappenmotor aansturing

Berichtdoor falcodevries » 18 Jan 2015, 00:52

Goede avond techneuten:)

Ben altijd bezig met verschillende projecten,robotica trekt erg mijn aandacht en ben hier dan ook regelmatig mee bezig.
De mechanica is mijn sterkste kant en de electronica helaas wat minder.
Heb eens een robot armpje gebouwd met servo motoren en deze waren vrij eenvoudig aan te sturen met bv lynxmotion hardware/software.
Filmpje: https://www.youtube.com/watch?v=B2fl8-L6xcA

Ben nu bezig met een nieuwe arm en deze wil aansturen met stappenmotoren om de wat meer ''industriele" beweging te krijgen.
wil er 5 tot 6 motoren voor gebruiken:

wat ik al heb:
3xnema 16
3xnema 17
6xbig easy driver en een arduino uno
24v voeding!

afgelopen week is er een tandwiel in mijn frees machine kapot gegaan dus ben maar eens begonnen met het verdiepen in de software enz.
ik heb de nieuwste software gedownload,drivers geinstalleerd en de oranje led op de uno knippert.
heb een easy driver aangesloten volgens de vele voorbeelden die je kan vinden via google.
volgens de datasheet is groen/zwart en rood/blauw een fase,kan ik hier op vertrouwen of zal ik het moeten na meten?

dit is een voorbeeldje wat ik vond en het leek me wel wat om te proberen :

int dir = LOW;
int stepp = LOW;
long previousMillis = 0;
long currentMillis = millis();
long steptime = 500;
int x = 0;
char c = 0;

void setup()
{
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
Serial.begin(9600);
}

void loop()
{
if(Serial.available()>0)
{
c=Serial.read();
if(c=='a')
{
dir = HIGH;
}
if(c=='z')
{
dir = LOW;
}
}
if(currentMillis - previousMillis > steptime)
{
previousMillis = currentMillis;
if(stepp==LOW)
{
stepp = HIGH;
}
else
{
stepp = LOW;
}
digitalWrite(2,dir);
digitalWrite(3,stepp);
}
}

ik zou dan in de seriele-monitor met a of z de motor kunnen laten draaien.
ik heb een nema 16 geprobeerd en die word alleen maar warm,en de nema 17 tikt alleen maar.
ik moet een code altijd uploaden naar de uno en dan met de seriele monitor comando's geven?

Ik ben hier echt een beginner in en dit is de eerste keer dat ik met arduino aan de gang ga,wat mij opvalt is dat ik via google erg veel informatie kan vinden maar niet echt een stap voor stap voor de beginner zodat je het ook echt snapt wat je doet,ik ben al een aantal dagen aan het lezen maar het blijft onduidelijk voor mij!
Ik vraag niet een complete uitleg maar enkel een zetje in de goede richting;)

Alvast bedankt en be gentle on me;)

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Robot arm stappenmotor aansturing

Berichtdoor nicoverduin » 18 Jan 2015, 12:28

falcodevries schreef:volgens de datasheet is groen/zwart en rood/blauw een fase,kan ik hier op vertrouwen of zal ik het moeten na meten?
Meten kan nooit geen kwaad. Uitsluiten van mogeljke toekomstige problemen!

falcodevries schreef:ik moet een code altijd uploaden naar de uno en dan met de seriele monitor comando's geven?
Je vraag is me niet helemaal duidelijk. Maar een gewijzigd programma moet je uploaden in het FLASH geheugen van de Arduino. En als de software werkt met seriele input, lijkt het mij voor de hand liggend.

Verder een tutorial in het Nederlands : https://www.gymnasiumnovum.nl/Portals/0/vakpaginas/Science/Arduino%20manual%201_0%20NL.pdf

En als je de volgende keer code publiceert kun je deze beter tussen de [ code2=cpp ] en [ /code2 ] (en dan zonder de spaties) tags zetten. Ziet het er zo uit.
cpp code
int dir = LOW;
int stepp = LOW;
long previousMillis = 0;
long currentMillis = millis();
long steptime = 500;
int x = 0;
char c = 0;

void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
Serial.begin(9600);
}

void loop() {
if (Serial.available() > 0) {
c = Serial.read();
if (c == 'a') {
dir = HIGH;
}
if (c == 'z') {
dir = LOW;
}
}
if (currentMillis - previousMillis > steptime) {
previousMillis = currentMillis;
if (stepp == LOW) {
stepp = HIGH;
} else {
stepp = LOW;
}
digitalWrite(2, dir);
digitalWrite(3, stepp);
}
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4078
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Robot arm stappenmotor aansturing

Berichtdoor shooter » 18 Jan 2015, 17:42

er mist een regel, de currentmillis moet telkens in de loop geupdate worden.

cpp code
int dir = LOW;
int stepp = LOW;
long previousMillis = 0;
long currentMillis = millis();
long steptime = 500;
int x = 0;
char c = 0;

void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
Serial.begin(9600);
}

void loop() {
currentMillis=millis(); // regel toegevoegd.

if (Serial.available() > 0) {
c = Serial.read();
if (c == 'a') {
dir = HIGH;
}
if (c == 'z') {
dir = LOW;
}
}
if (currentMillis - previousMillis >= steptime) { // groter gelijk gemaakt
previousMillis = currentMillis;
if (stepp == LOW) {
stepp = HIGH;
} else {
stepp = LOW;
}
digitalWrite(2, dir);
digitalWrite(3, stepp);
}
}

zet een ledje parralel aan de uitgangen dan kun je zien of deze wel gestuurd worden.
paul deelen
shooter@home.nl

Berichten: 4078
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Robot arm stappenmotor aansturing

Berichtdoor shooter » 18 Jan 2015, 17:43

mooie oefening, en als je een mooi prog in elkaar hebt zitten kom ik op de proppen met een steppersturing kijk op arduino.cc
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 18 Jan 2015, 00:19

Re: Robot arm stappenmotor aansturing

Berichtdoor falcodevries » 19 Jan 2015, 21:15

bedankt voor de antwoorden heren:)

@ nicoverduin

Ik zal er op letten dat ik de volgende keer de code tussen tags zet.
Ik wil als beginner direct te veel,heb nul ervaring met arduino en wil gelijk 6 stappenmotoren aansturen.
het valt me goed tegen om als beginner dit allemaal te begrijpen,ik kan beter weer terug naar het begin en goed het hand boek door lezen en rustig aan wat te beginnen met ledjes enz. om eerst goed te begrijpen hoe het allemaal werkt.

@ shooter

Bedankt,ik zal er eens mee gaan stoeien,als ik eerst 1 motor aan de gang krijg dat ben ik al blij;)

Berichten: 4078
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Robot arm stappenmotor aansturing

Berichtdoor shooter » 20 Jan 2015, 18:56

en draait het motorekke?
bij mij wel.
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 18 Jan 2015, 00:19

Re: Robot arm stappenmotor aansturing

Berichtdoor falcodevries » 21 Jan 2015, 22:56

met bovenstaande code krijg ik er geen beweging in,zal wel iets verkeerd doen!

met deze sketch:

http://www.schmalzhaus.com/EasyDriver/Examples/EasyDriverExamples.html
cpp code
int Distance = 0;  // Record the number of steps we've taken

void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}

void loop() {
digitalWrite(9, HIGH);
delayMicroseconds(100);
digitalWrite(9, LOW);
delayMicroseconds(100);
Distance = Distance + 1; // record this step

// Check to see if we are at the end of our move
if (Distance == 3600)
{
// We are! Reverse direction (invert DIR signal)
if (digitalRead(8) == LOW)
{
digitalWrite(8, HIGH);
}
else
{
digitalWrite(8, LOW);
}
// Reset our distance back to zero since we're
// starting a new move
Distance = 0;
// Now pause for half a second
delay(500);
}
}


kreeg ik er wel beweging in na dat ik de ampere iets lager lager heb gezet op de easy driver,ze kunnen er niet goed tegen als ze te veel ampere krijgen ben ik achter;)
Het valt me wel op dat de driver erg warm word,ik weet niet hoe warm dit mag worden en of het verstandig is om dit te koelen?

Heb wat zitten spelen met de Distance en delayMicroseconds en krijg hier wel verschillende snelheden en afstanden mee!
ik vraag me af hoe ik hiermee 5 of 6 steppers ga aansturen en,dat word nog een hele uitdaging,ik zal ook wel moeten gaan werken met sensoren om te zien welke stand de motoren staan,heb nog veel uit te zoeken;) thanks

Berichten: 4078
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Robot arm stappenmotor aansturing

Berichtdoor shooter » 21 Jan 2015, 23:16

sorry was vergeten dat de loop erg snel gaat en dus een delay nodig is.
zoals je ziet is het erg simpel om een motor te laten draaien.

Je kunt een library gaan gebruiken, of het zelf bedenken natuurlijk.
zet dan de dingen in een functie die je aanroept, dus maakstap (motornummer,richting) zonder de delays, want die vang je starks af op een andere manier.
void maakstap (int motornummer, bool richting)
switch motornummer
case 1 // en dit dan 6 keer herhalen
{dan de opdracht die nodig is dus
if richting true then digitalwrite(8,high)
digitalwrite(9,high)
het is niet het mooiste maar wel even een simpele constructie die je kunt volgen.

als het werkt vertel ik je hoe het beter kan, vraag dan naar mijn programma anima
paul deelen
shooter@home.nl

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten