Robot arm stappenmotor aansturing
8 berichten
• Pagina 1 van 1
- falcodevries
- Berichten: 3
- Geregistreerd: 18 Jan 2015, 00:19
Robot arm stappenmotor aansturing
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;)
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
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Robot arm stappenmotor aansturing
Meten kan nooit geen kwaad. Uitsluiten van mogeljke toekomstige problemen!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?
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.falcodevries schreef:ik moet een code altijd uploaden naar de uno en dan met de seriele monitor comando's geven?
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);
}
}
Re: Robot arm stappenmotor aansturing
er mist een regel, de currentmillis moet telkens in de loop geupdate worden.
cpp code
zet een ledje parralel aan de uitgangen dan kun je zien of deze wel gestuurd 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
shooter@home.nl
Re: Robot arm stappenmotor aansturing
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
shooter@home.nl
- falcodevries
- Berichten: 3
- Geregistreerd: 18 Jan 2015, 00:19
Re: Robot arm stappenmotor aansturing
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;)
@ 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;)
Re: Robot arm stappenmotor aansturing
en draait het motorekke?
bij mij wel.
bij mij wel.
paul deelen
shooter@home.nl
shooter@home.nl
- falcodevries
- Berichten: 3
- Geregistreerd: 18 Jan 2015, 00:19
Re: Robot arm stappenmotor aansturing
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
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
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
Re: Robot arm stappenmotor aansturing
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
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
shooter@home.nl
8 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 11 gasten