kikk0 Skrevet 31. mars 2009 Forfatter Del Skrevet 31. mars 2009 (endret) Takk for koden:) Dersom denne fungerer så har eg jo egentlig koden på arduino kortet. Da trenger eg ein måte å få sendt koden til USB porten for så å lese den av i et programm å få verdiene som tabellverdier eller lignende. Hvilket programmeringspråk anbefaler du til dette? or hvor kan eg finne info om slik kommunikasjon med seriel porten? Endret 31. mars 2009 av kikk0 Lenke til kommentar
SkydiveWings Skrevet 31. mars 2009 Del Skrevet 31. mars 2009 (endret) Takk for koden:) Dersom denne fungerer så har eg jo egentlig koden på arduino kortet. Da trenger eg ein måte å få sendt koden til USB porten for så å lese den av i et programm å få verdiene som tabellverdier eller lignende. Hvilket programmeringspråk anbefaler du til dette? or hvor kan eg finne info om slik kommunikasjon med seriel porten? Alle programmeringsspråk som kan kommunisere med ein serieport vil klare dette. Koden som eg laga skriv ut tida på eit enkelt format til ein virtuell serieport på ei datamaskin. Du kan f.eks bruke HyperTerminal eller PuTTY for å teste at det fungerer, så kan du lage deg eit programm i valfritt språk, gjerne med moglegheit for GUI, slik at du kan få fancy grafar og slikt. Formatet informasjonen kjem ut i er ("dT=xxxxxx" & CR & LF) der xxxxxx er antall mikrosekund siden sist lyset vart blokkert. Baudraten er 115200 bit/s. Koden kan sikkert optimaliserast meir, samt at noko filtrering hadde sikkert vore lurt, men det kan fiksast i programmet som skal tolke desse verdiane. Når det gjeld programmeringspråk så har eg ganske liten erfaring med det, men om du ikkje kan noko frå før av må du nesten bare velga noko som er lett å setje seg inn i, f.eks. Visual Basic eller Python. Edit: Ser at koden eg skreiv blei litt feil, eg endra litt på interruptargumentet og gløymte å endre på resten const int pinGaffel = 2; const int pinIndLED = 4; unsigned long mikro1, mikro2 = 2147483647; long delta_t; int status = LOW; bool nyVerdi = false; void setup() { pinMode(pinGaffel, INPUT); pinMode(pinIndLED, OUTPUT); Serial.begin(115200); attachInterrupt(0, gaffelEndring, RISING); } void loop() { if (nyVerdi == true) { delta_t = mikro1 - mikro2; //delta_t er i mikrosekund mikro2 = mikro1; if (delta_t > 0) //Sjekker at micros() ikkje har hatt overflyt (skjer ca kvart 70. minutt) { Serial.print("dT="); Serial.println(delta_t); //Skriver ut delta_t } digitalWrite(pinIndLED, status); nyVerdi = false; } } void gaffelEndring() { mikro1 = micros(); nyVerdi = true; status = !status; } Endret 31. mars 2009 av SkydiveWings Lenke til kommentar
jonnor Skrevet 1. april 2009 Del Skrevet 1. april 2009 Bruk preprosesseringsdirektivet #define for å definere konstanter. Og sett opp en timer med interrups på et passende intervall for å regne ut rpm og skrive det ut på USARTen. Lenke til kommentar
Dundersalt Skrevet 1. april 2009 Del Skrevet 1. april 2009 Vil ikke det å løse dette optisk være mer en "lab løsning"? Tenker da på smuss, møkk og drit som i bruk vil forstyrre sensoren. Bare en liten tanke:) Lenke til kommentar
SkydiveWings Skrevet 2. april 2009 Del Skrevet 2. april 2009 Bruk preprosesseringsdirektivet #define for å definere konstanter. Og sett opp en timer med interrups på et passende intervall for å regne ut rpm og skrive det ut på USARTen. I følge referanseverket til Arduino er const å anbefale over #define, og meiner du at ein timer skal polle inputen, og ikkje flanketrigging slik eg har satt opp? Om du skal rekne ut RPM må du vel til med flyttalsutrekningar, og sidan det er ganske tidkrevande på ein mikrokontroller ville eg heller gjort dette i programmvaren i PCen. Lenke til kommentar
kurant Skrevet 2. april 2009 Del Skrevet 2. april 2009 (endret) Bruk preprosesseringsdirektivet #define for å definere konstanter. Og sett opp en timer med interrups på et passende intervall for å regne ut rpm og skrive det ut på USARTen. I følge referanseverket til Arduino er const å anbefale over #define, og meiner du at ein timer skal polle inputen, og ikkje flanketrigging slik eg har satt opp? Om du skal rekne ut RPM må du vel til med flyttalsutrekningar, og sidan det er ganske tidkrevande på ein mikrokontroller ville eg heller gjort dette i programmvaren i PCen. konstanter er alltid å foretrekke fremfor #DEFINE direktiver, man kan få noen svært interessante bugs ved bruk av sistnevnte da det ikke bare mangler typesikkerhet, men er en direkte substitusjon av hva som helst rett inn i koden. Det er forøvrig ikke nødvendig med flyttallsberegninger, man klarer seg fint med skalering av fixed-point verdier. Uansett er det et godt tips å gjøre disse beregningene på PCen som du sier da det gir mye mer fleksibilitet. Har omdreiningshastigheten på hjulet blitt nevnt forresten? Dette er jo relevant for implementeringen. Dersom det går for fort er det kanskje nødvendig med mer prosessering på arduinoen for å unngå unødig mye data på linken. Som andre har skrevet er jeg også enig i at en optisk sensor er en lite robust løsning i dette tilfellet. En hall-sensor virker som en mye bedre løsning Endret 2. april 2009 av kurant Lenke til kommentar
kikk0 Skrevet 2. april 2009 Forfatter Del Skrevet 2. april 2009 takker for meir inputs tanken var i starten å bruke en hall sensor ja. det er nok det som kommer til å brukes også. men eg har tenkt få få til dataprogrammet før eg begynner å bygge. Når de gjelder omdreininger vil maxverdien ligge mellom 3500 og 5000 rpm alt etter kor stor aksling eg greier å skaffe. vil ha størst mulig aksling så da faller omdreiningstallet til ca 3500rpm med en kawasaki zx10 med 330km/h på hjulet. om dette er oppnåelig eller ikkje får bli ein anna diskusjon. Den skal uansett dimensjoneres for det. flott med mange inputs og forslag her folkens:) noen ide om hvor eg kan få tak i en egnet hallsensor? Lenke til kommentar
Dundersalt Skrevet 2. april 2009 Del Skrevet 2. april 2009 noen ide om hvor eg kan få tak i en egnet hallsensor? Her Jeg ville kikket på den digitale, plug & play, fremfor AD rot. Lenke til kommentar
Dundersalt Skrevet 2. april 2009 Del Skrevet 2. april 2009 Tips, avhenging av tannhjulets oppløsning vil du i råverdi få en togglende RPM. Du bør derfor lage en eller annen form for filtrering i sw. Med god oppløsning burde det være akesptabelt med 5-10 RPM avrunding, eller enda bedre konfigurerbar RPM rounding. Alternativt kan du sample og beregne snitt, men du får da en liten forsinkelse på avlesningen. Jeg ville "filtrert" ved hjelp av avrunding. Lenke til kommentar
Dundersalt Skrevet 15. juli 2009 Del Skrevet 15. juli 2009 Hvordan gikk dette prosjektet? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå