mechanische tripmaster

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: mechanische tripmaster

Berichtdoor shooter » 05 Feb 2016, 00:44

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
paul deelen
shooter@home.nl

Advertisement

Berichten: 35
Geregistreerd: 07 Jan 2016, 22:09
Woonplaats: Veghel

Re: mechanische tripmaster

Berichtdoor JoostB » 07 Feb 2016, 11:54

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 ?)

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 
}

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

Re: mechanische tripmaster

Berichtdoor shooter » 07 Feb 2016, 21:09

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.
paul deelen
shooter@home.nl

Berichten: 35
Geregistreerd: 07 Jan 2016, 22:09
Woonplaats: Veghel

Re: mechanische tripmaster

Berichtdoor JoostB » 07 Feb 2016, 22:01

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?

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

Re: mechanische tripmaster

Berichtdoor nicoverduin » 08 Feb 2016, 07:53

Ik Zou eens googelen op "map arduino"
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 35
Geregistreerd: 07 Jan 2016, 22:09
Woonplaats: Veghel

Re: mechanische tripmaster

Berichtdoor JoostB » 08 Feb 2016, 08:47

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

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

Re: mechanische tripmaster

Berichtdoor shooter » 08 Feb 2016, 10:30

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);
paul deelen
shooter@home.nl

Berichten: 35
Geregistreerd: 07 Jan 2016, 22:09
Woonplaats: Veghel

Re: mechanische tripmaster

Berichtdoor JoostB » 08 Feb 2016, 23:11

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)

Berichten: 35
Geregistreerd: 07 Jan 2016, 22:09
Woonplaats: Veghel

Re: mechanische tripmaster

Berichtdoor JoostB » 09 Feb 2016, 08:52

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!

Berichten: 35
Geregistreerd: 07 Jan 2016, 22:09
Woonplaats: Veghel

Re: mechanische tripmaster

Berichtdoor JoostB » 09 Feb 2016, 23:06

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
#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

}

VorigeVolgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 14 gasten