mechanische tripmaster
Re: mechanische tripmaster
je kunt de waarde die je instelt zien als je een Serial.print doet naar je monitor.
je kunt het doen met slechts 1 10slagen trimmer.
de waarde die je krijgt maal 2 dan heb je een resolutie van 2 mm.
ja je kunt er ook 4 opzetten zoals je voorstelt, en dan de waarde door 100 delen
je kunt het doen met slechts 1 10slagen trimmer.
de waarde die je krijgt maal 2 dan heb je een resolutie van 2 mm.
ja je kunt er ook 4 opzetten zoals je voorstelt, en dan de waarde door 100 delen
paul deelen
shooter@home.nl
shooter@home.nl
Advertisement
Re: mechanische tripmaster
Ik heb nu als proef een potmeter aangesloten en deze waarde omgezet naar een afstand in millimeters door gebruik te maken van
"float"
De waarde in millimeters heb ik weer omgerekend naar het aantal stappen die ik nodig heb.
Lijkt allemaal goed te werken als ik op de seriële monitor kijk, echter lukt het mij niet om
de potmeterwaarde (0-1024) om te zetten in bijv. 1500-2500mm.
De 2500mm lukt wel, maar op de 1500mm reageert hij niet en telt vanaf 0.
Is dit zo te veranderen dat hij wel de waarde van 1500 over neemt?????
Ook schrijft hij 2-decimalen achter de komma is dit er ook uit te halen?
(hoe krijgen jullie het voor elkaar om de code op het forum zo te plaatsen zoals jullie dat doen, met die groene kantlijn ?)
"float"
De waarde in millimeters heb ik weer omgerekend naar het aantal stappen die ik nodig heb.
Lijkt allemaal goed te werken als ik op de seriële monitor kijk, echter lukt het mij niet om
de potmeterwaarde (0-1024) om te zetten in bijv. 1500-2500mm.
De 2500mm lukt wel, maar op de 1500mm reageert hij niet en telt vanaf 0.
Is dit zo te veranderen dat hij wel de waarde van 1500 over neemt?????
Ook schrijft hij 2-decimalen achter de komma is dit er ook uit te halen?
(hoe krijgen jullie het voor elkaar om de code op het forum zo te plaatsen zoals jullie dat doen, met die groene kantlijn ?)
- Code: Alles selecteren
void setup() {
Serial.begin(9600);
}
void loop(){
int sensorValue = analogRead(A0); //lees de waarde van de potmeter op A0
float wielOmtrek = sensorValue * (2500.1500 / 1023.0); //zet de potmerwaarde om in een wielomtrek
int stappenPulsen = wielOmtrek * 0.32;
Serial.println(wielOmtrek); //print de wielomtrek
Serial.println(stappenPulsen); //print de waantal stappen voor de stappenmotor
}
Re: mechanische tripmaster
antwoord 1
gebruik map dan hoef je helemaal niet te rekenen.
en de code werkt met de laatste tab ofwel code2= en daar moet dan cpp bijstaan dus code2=cpp] en dan je code.
In het voorbeeld kun je het resultaat zien.
gebruik map dan hoef je helemaal niet te rekenen.
en de code werkt met de laatste tab ofwel code2= en daar moet dan cpp bijstaan dus code2=cpp] en dan je code.
In het voorbeeld kun je het resultaat zien.
paul deelen
shooter@home.nl
shooter@home.nl
Re: mechanische tripmaster
shooter schreef:antwoord 1
gebruik map dan hoef je helemaal niet te rekenen.
en de code werkt met de laatste tab ofwel code2= en daar moet dan cpp bijstaan dus code2=cpp] en dan je code.
In het voorbeeld kun je het resultaat zien.
bedankt voor je reactie, dit word erg op prijs gesteld.
Ik begrijp niet wat je bedoeld met gebruik "map" kan je dit wat verduidelijken?
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: mechanische tripmaster
Ik Zou eens googelen op "map arduino"
Re: mechanische tripmaster
nicoverduin schreef:Ik Zou eens googelen op "map arduino"
je hebt gelijk, ik ga het bestuderen.
Ik moet zeggen dat het een lange weg te gaan is om het een klein beetje onder de knie te krijgen maar gelukkig
gaat het steeds beter.
Directe antwoorden of oplossingen zijn handig maar niet leerzaam, wel fijn als je op deze manier de goede
richting op gewezen word.
Gr Joost
Re: mechanische tripmaster
joost zoek ook eens een cheat sheet, daar staan alle commandos mooi op een rijtje.
de help van de arduino is echt goed hoor, de referentie is allemaal met voorbeelden.
en map is een commando dat die hele omrekening doet, wel in float trouwens.
het is geen lange weg hoor, als je maar rustig bij elke stap nadenkt wat je wil bereiken. en ja domme rekentheorie zoals x,y omrekening dat kan ik je wel vertellen, maar je wilt het ook zelf leren.
uitkomst = map(0,1023,1500,2500);
Verder doe je een aanname die niet helemaal steekt.
je gaat van omtrek naar stappen, maar dat is niet slim.
je weet hoeveel stappen een omwenteling is want dat ligt vast een stappenmotor is bijv 200 hele of 400 halve verder met microstappen heeft geen zin. kun je toch niet zien (eventueel wel mee rekenen.)
dus een omwenteling is bijv 2345 mm (ofwel de uitkomst van de map)
je moet rekening houden met afronding/precisie als je bijvoorbeeld 2345678 mm gereden hebt zijn dat geen 200020 stappen precies.
als je van een float een integer wil maken (dan verlies je dus precisie) schrijf dan int stappenPulsen = int(wielOmtrek * 0.32);
de help van de arduino is echt goed hoor, de referentie is allemaal met voorbeelden.
en map is een commando dat die hele omrekening doet, wel in float trouwens.
het is geen lange weg hoor, als je maar rustig bij elke stap nadenkt wat je wil bereiken. en ja domme rekentheorie zoals x,y omrekening dat kan ik je wel vertellen, maar je wilt het ook zelf leren.
uitkomst = map(0,1023,1500,2500);
Verder doe je een aanname die niet helemaal steekt.
je gaat van omtrek naar stappen, maar dat is niet slim.
je weet hoeveel stappen een omwenteling is want dat ligt vast een stappenmotor is bijv 200 hele of 400 halve verder met microstappen heeft geen zin. kun je toch niet zien (eventueel wel mee rekenen.)
dus een omwenteling is bijv 2345 mm (ofwel de uitkomst van de map)
je moet rekening houden met afronding/precisie als je bijvoorbeeld 2345678 mm gereden hebt zijn dat geen 200020 stappen precies.
als je van een float een integer wil maken (dan verlies je dus precisie) schrijf dan int stappenPulsen = int(wielOmtrek * 0.32);
paul deelen
shooter@home.nl
shooter@home.nl
Re: mechanische tripmaster
hallo Shooter,
de berekening via map is gelukt, stelt niets voor.
je verondersteld dat ik een aanname doe maar ik doe het volgende:
Als de as van mijn Rotary encoder (teller) 1 omwenteling maakt dan is dat 10meter dat is 10.000mm.
Mijn stappenmotor (0,9 gr/step) heeft met microsteps 3200 stappen nodig.
per gereden mm is dat dan 3200/10.000= 0,32 steps/mm
dus heb ik een omtrek van 2000mm is dat 2000*0,32=640 stappen
als ik 5 keer rond ben geweest is dit dus 5*2000*0,32= 3200 stappen (precies 1 keer rond)
de berekening via map is gelukt, stelt niets voor.
je verondersteld dat ik een aanname doe maar ik doe het volgende:
Als de as van mijn Rotary encoder (teller) 1 omwenteling maakt dan is dat 10meter dat is 10.000mm.
Mijn stappenmotor (0,9 gr/step) heeft met microsteps 3200 stappen nodig.
per gereden mm is dat dan 3200/10.000= 0,32 steps/mm
dus heb ik een omtrek van 2000mm is dat 2000*0,32=640 stappen
als ik 5 keer rond ben geweest is dit dus 5*2000*0,32= 3200 stappen (precies 1 keer rond)
Re: mechanische tripmaster
net even zitten te kijken naar een "cheat sheet", dit is inderdaad handig en kan erg behulpzaam zijn.
Zo zie je maar hoe onwetend een beginner is en met een kleine tip geholpen kan zijn!
Zo zie je maar hoe onwetend een beginner is en met een kleine tip geholpen kan zijn!
Re: mechanische tripmaster
Ik loop tegen een probleem aan wat ik nog niet opgelost krijg.
Ik heb nu een display aangesloten (I2C) om de wielomtrek uit te kunnen lezen echter als ik het stukje in de void loop
van het wegschrijven naar het display erin heb staan dan draaid mijn stappenmotor erg langzaam maar maakt wel zijn stappen.
Haal ik het stukje er tussenuit dan draait de stappenmotor gewoon snel.
Heeft iemand een idee hoe ik dit op kan lossen?
cpp code
Ik heb nu een display aangesloten (I2C) om de wielomtrek uit te kunnen lezen echter als ik het stukje in de void loop
van het wegschrijven naar het display erin heb staan dan draaid mijn stappenmotor erg langzaam maar maakt wel zijn stappen.
Haal ik het stukje er tussenuit dan draait de stappenmotor gewoon snel.
Heeft iemand een idee hoe ik dit op kan lossen?
cpp code
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Servo.h>
#include <AccelStepper.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); //set the LCD address to 0x27 for a 20 chars and 4 line display
AccelStepper stepper(1, 9, 8);
Servo resetservo1;
Servo resetservo2;
int val;
const int potMeter = A0;
int potWaarde = 0;
int buttonPinstepper = 6; // Hall schakelaar voor stappenmotor
int buttonPinservo1 = 7; // reset schakelaar teller1
int buttonPinservo2 = 11; // reset schakelaar teller2
int enablePin = 13; // schakelpin om easydrive te blokeren
int buttonState = 0;
long previousMillis = 0; // vorige milliseconden was 0
long resetservoTimer1 = 200; // timer om servo1 de tijd te geven om naar positie te lopen.
long resetservoTimer2 = 1000; // timer om servo2 de tijd te geven om naar positie te lopen.
void setup() {
lcd.init();
lcd.backlight();
Serial.begin(9600);
stepper.setMaxSpeed(1500); // maximale snelheid stappenmotor
stepper.setAcceleration(50000); // acceleratie hoe hoger het getal hoe sneller
pinMode (buttonPinstepper, INPUT); // zet buttonPin 7 als input (servo1)
pinMode (enablePin, OUTPUT); // zet de enablepin als een output
pinMode (buttonPinservo1, INPUT); // maak van de servoPin een output
pinMode (buttonPinservo2, INPUT); // maak van de servoPin een output
resetservo1.attach(5); // sluit de servo1 aan op pin 5
resetservo2.attach(12); // sluit de servo2 aan op pin 12
}
void loop() {
int val = analogRead(A0); //lees de waarde van de potmeter op A0
val = map (val, 0 , 1023, 1500, 2500); //zet de potmerwaarde om in een andere waarde (omtrek wiel in mm)
int stappenPulsen = int(val * 0.16); //stappenPulsen is de omtrek wiel in mm * 0,16 (step/mm)
lcd.setCursor(0, 2); //zet de cursor op (karakter, rij)
lcd.print("wielomtrek="); // print ()
lcd.setCursor(11, 2); //zet de cursor op (karakter, rij)
lcd.print(val); //print (waarde)
buttonState = digitalRead (buttonPinstepper); // lees status van de buttonPin
if (buttonState == LOW) {
digitalWrite(enablePin, LOW); // zet de enablePin laag
}
else {
digitalWrite(enablePin, HIGH); // zet enablePin hoog
delay(150); // vertraging ivm schakelmoment anders worden er stappen gemist
stepper.move(-stappenPulsen); // stepper beweegt (CW=pos of CCW=-pos)
}
stepper.run(); // stepper draait ingestelde aantal stappen
}
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 17 gasten