// inkluder library kode: #include <LiquidCrystal.h> #include <Serial.h> // Initialiser display LiquidCrystal lcd(12, 11, 5, 4, 3, 2);



Relaterede dokumenter
Start på Arduino og programmering

Brug af digitale ind og udgange

Internt interrupt - Arduino

Analoge indgange og A/D konvertering. Analoge udgange

Fra programmering til mikroprocessor

Ved indkøring påtrykkes en kendt amplitude (HUSK 50 ohms afslutning) og displayet aflæses.

Alt elektronik heri er købt via og arduino udviklingssoftware er hentet fra

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...

Arduinostyret klimaanlæg Afsluttende projekt programmering C

danske karakterer på Lcd

Arduino kursus lektion 3:

LCD intro. LCD Character display-intro. Redigeret 4/6-2019

Arduino kursus lektion 4:

ARDUINO PROGRAMMERING

Programmeringskursus Kursusaften 3. Programmering for begyndere Brug af Arduino. Display. Kursusaften 3 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

CANSAT & ARDUINO step by step

Interrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

Lektion 6 / Analog Arduino

// Definition af porte og funktioner

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato:

Example sensors. Accelorometer. Simple kontakter. Lysfølsomme. modstande. RFID reader & tags. Temperaturfølsomme. Flex Sensor.

Hvorfor & Hvordan lære Elever At programmere Arduinoer

const int disponibel_10= 10; const int disponibel_11= 11; const int disponibel_12= 12; const int blinkled = 13; // pin 13 er LED på NANO

Hvorfor & Hvordan lære. at programmere Arduinoer

Programmering i C. Lektion december 2008

Hvorfor & Hvordan lære Elever At programmere Arduinoer

1. Hovedramme 2. Bag stabilisator 3. For stabilisator 4. Cykelstyrsstang 5. Cykelstyr 6. Computer 7. Sædestang 8. Sæde 9. Pedaler 10.

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi C Opgave: Brev til Sigurd Lære: John Austin Side 1 af 13 Dato:

Demonstration af transitmetoden

Sådan forbindes Arduinoen via et fumlebræt til ATTiny45 chippen.

Lynguide til opsætning af parabolmotor HH120. Bent Bo Christiansen

Programmering i C. Lektion oktober 2008

DDD Runde 2, 2015 Facitliste

Betjeningsvejledning. til. Vandudvejning. system

TinkerCad - Arduino simulator

Projekt Når maskinen reagerer - Dataopsamling og aktuatorer

Ventilmotor EC 2006 / EC2008. Indholdsfortegnelse.

I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET

Dokumentation af UR Med børnetimer til TV-visning

Netværk & elektronik

BRUGERVEJLEDNING CP-508LCD ALARMCENTRAL

Armatec pneumatisk aktuator Kinetrol

Løkkestrukturer mm. Trykknap: Button, Se eksempler / Digital / Button. Decision: If: Version 05/ Arduino, Loops, løkker, programfunktioner mm.

Under 'Microsoft Block Editor', klik 'New project' for at åbne block editor-værktøjet.

Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007

Quick Setup Guide SB168-ES og LS9 Dansk version

Eksempel: Skat i år 2000

Scope start stop Space bar kan også bruges. Start/Stop

Vejledning til fravær i Tabulex TEA

Arduino opgaver Teknologi

Programmering i C. Lektion november 2008

Jasopels Farm Assist V3. Bruger vejledning

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

PAR-555-SYS Konstanttrykregulering

EKSEMPEL PÅ ELEVOPGAVE TIL ARBEJDET MED PROGRAMMERING AF ARDUIONO MED LED BÅND

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

up/ansi Eksamensspørgsmål

Af: OZ7EC Erik Christiansen Chiptemperatur med Arduino

OZ5BIR SWR/POWERMETER

Programmering i C. Lektion september 2009

Vejledning til Tidtagningssystem til ridebanespring. Sønderborg. Knap for addering af 6 sekunder ved total nedrivning af forhindring.

Eksamens spørgsmål i Teknologi (Digital) 3. Semester (i)

Programmering i C. Lektion september 2009

Vejledning til Tidtagningssystem til ridebanespring. Sønderborg. Manuel Signal ( Radiosignal ) knap på pult ( Stopursfunktion )

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

SmartAir TS1000. Daglig brug

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Digital Drejeskive Decoder til 7286 / 7686

Udbud.dk Brugervejledning til leverandører

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, klasse dm032-1a

CANSAT & ARDUINO step by step

Øvelser i Begynderklassen.

RF-ID Kompendium. RF-ID & Radio control. Dette kompendium indeholder materiale om RF-ID. Materialet er meget foreløbigt.

Skriftlig eksamen i Datalogi

System Arkitektur og Integration

Modeljernbane elektronik for begyndere...og dem der vil igang med at bygge deres egne dekodere

BRUGERVEJLEDNING FLTA

"# $%$ " # $ % $ $ " & ( ) *+!,! Sum_Cost >= 5000SirName = Beltov Continue = %!- + ( ( - True) Continue *! If Antal <= 20 Then EnhedsOmk = 1.

Datamaters arkitektur og programmering

Lektion 5 / Arduino intro. Mogens Jacobsen / moja@itu.dk

NAVMAN TRACKER Quick Guide

1. At afhjælpe eventuelle alarmer fra anlægget. 2. Bestille syre inden syretanken er tom anlægget kommer med en blød alarm i god tid.

Kom hurtigt i gang. med. FloorPlan 3D. FloorPlan 3D er et program med mange anvendelsesmuligheder!

Lærevejledning. - en introduktion til maskinarkitektur. faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen

Manual. Trail Cam Basic

Kom godt i gang med Sydbanks NetBank

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

Dansk Mink Papir. Teknisk brugermanual

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4.

1. Få modtageren til at lytte til fjernbetjeningen. 2. Vælg Persienne/lamelgardin eller rullegardin. 3. Indstil rotationsretningen

Guide til digital børnetilmelding

GSM port styring 400 brugere

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

Video Projector Controller. Brugermanual

Sensor Finder v. 1.3.

AMU, maskin og værktøj CNC-teknik Kursusnummer 45186

Kontrol-strukturer i PHP

Transkript:

/* OZ1HJR Program til styring af Mercury Motor SM-42BYG011-25 (ROB-09238) med EasyDriver V4.4 (ROB-10267). Når MS1 og MS2 begge er High, er et step (1.8 grader) opløst i 8 mikrostep. Et mikrostep svarer således til 0,225 grader. 1600 mikrostep svarer 360 grader. Input: g sætter 'gå til vinkel' mode - vinklen behandles som en absolut vinkel d sætter 'drejemode' - den aktuelle vinkel adderes til den aktuelle f stepmode sættes til helstep (1/200 del af en omdrejning) h stepmode sættes til halvstep (1/400 del af en omdrejning) k stepmode sættes til kvartstep (1/800 del af en omdrejning) o stepmode sættes til ottendedelsstep (1/1600 del af en omdrejning) en talværdi (float) med fortegn angiver vinklen der kan benyttes både store og små bogstaver drejemode, stepmode og vinkel kan angives i samme linie De valgte størrelser fremgår af displayet (ved start: G og O) Forskellen mellem den ønskede vinkel og den nærmeste mulige gemmes og bruges til korrektion ved næste valg. Der sker altså ikke tab af nøjagtighed ved gentagne indstillinger. Det gælder også ved skift af stepmode. */ // inkluder library kode: #include <LiquidCrystal.h> #include <Serial.h> // Initialiser display LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Arduino signaler til EasyDriver: #define DirPin 6 #define StepPin 7 #define MS1Pin 8 #define MS2Pin 9 // Konstanter til stepmotor (mikrosekunder) #define Delayf 1500 // delay for fuldstep stepmode = 8

#define Delayh 750 // delay for halvstep stepmode = 4 #define Delayk 375 // delay for kvartstep stepmode = 2 #define Delayo 185 // delay for ottendedelsstep stepmode = 1 int Delay = Delayo; // aktuelt delay, start i ottendedelsstep int s = 1; // aktuel stepmode, start i ottendedelsstep int drejemode = false; // ved false drejes til værdien i vinkel (d), ved true drejes værdien i vinkel (g) long int steps = 0; // aktuel position i ottendedels step uanset stepmode (betegnes mikrostep) float StepFejl = 0; // forskellen i ønsket og aktuel position målt i ottendedels step float vinkel = 0; // ønsket vinkel eller drejning i grader float vinkelold = 0; // aktuel vinkel i grader // opsætning void setup () { pinmode(dirpin, OUTPUT); // Opsætning af motorstyring pinmode(steppin,output); pinmode(ms1pin, OUTPUT); pinmode(ms2pin, OUTPUT); digitalwrite(ms1pin,high); // HIGH LOW HIGH LOW digitalwrite(ms2pin,high); // HIGH HIGH LOW LOW // ottendedelsstep kvartstep halvstep fuldstep // S: 1 2 4 8 lcd.begin(16,2); Serial.begin(9600); } // Opsætning af LCD: antal kolonner og rækker // Opsætning af seriel kommunikation 9600 bps // funktioner til programmet void mode(int m) { // her sættes stepopløsningen for motoren vinkel = vinkelold; // her skal vi slutte deltastep(); // gå til nærmeste helstepsposition i aktuel mode switch (m){ case 8: digitalwrite(ms1pin,low); digitalwrite(ms2pin,low); Delay = Delayf; break; case 4: digitalwrite(ms1pin,high); digitalwrite(ms2pin,low); Delay = Delayh; break;

case 2: digitalwrite(ms1pin,low); digitalwrite(ms2pin,high); Delay = Delayk; break; case 1: digitalwrite(ms1pin,high);digitalwrite(ms2pin,high); Delay = Delayo; break; default: break; } delaymicroseconds(200); // lille pause efter opsætning s = m; // gem mode rotate(vinkel-vinkelold); // gå til den gamle vinkel vinkelold=vinkel; if (drejemode==true) vinkel=0; } // gem aktuel vinkel // drejning udført // mode slut void rotate(float grader){ //drejer motoren grader regnet med fortegn float ms = (grader/360)*1600+stepfejl; // antal mikrostep med fortegn, korrigeret for stepfejl long int MS =(ms<0)?ms/s-0.5:ms/s+0.5;// antal aktuelle step med fortegn, korrekt afrundet StepFejl=ms-MS*s; // ny stepfejl i mikrostep steps = steps+ms*s; // opdatering af steptælleren // print til LCD: Vinkel, mikrostep, drejemode og stepmode lcd.setcursor(0,0); lcd.print("vinkel: "); lcd.setcursor(8,0); lcd.print(float(steps)*360/1600); lcd.setcursor(0,1); lcd.print("steps: "); lcd.setcursor(14,1); lcd.print((drejemode == true)? 'D':'G'); lcd.setcursor(15,1); lcd.print((s==1)?'o':(s==2)?'k':(s==4)?'h':'f'); stepper(ms); // kald af stepfunktionen lcd.setcursor(8,1); lcd.print(steps); } // ratate slut void deltastep() { long int dstep = steps%8; dstep = (dstep<4)? -dstep: 8-dstep; steps += dstep; vinkelold+=float(dstep)*360/1600; stepper(dstep/s); } // deltastep slut void stepper(long int st) { // denne funktion bringer stepmotoren i den nærmeste fuldstepposition // overskridelse af sidste fuldstepposition // nærmeste position // korrektion af steps // den nye vinkelposition // positionen korrigeres i mikrostep // denne funktion drejer stepmotoren

digitalwrite(dirpin,(st<0)? HIGH:LOW); // her bestemmes omløbsretning delaymicroseconds(200); // lille pause efter opsætning st = abs(st); for ( long int i=0; i<st; i++) { digitalwrite(steppin,high); delaymicroseconds(1); // længden af den høje puls digitalwrite(steppin,low); delaymicroseconds(delay); }} // delay afhænger af stepmode void loop () { // Indlæsning // d eller D sætter drejemode true: der drejes det indtastede antal grader regnet med fortegn. // g eller G sætter drejemode false: der drejes til det indtastede gradtal regnet med fortegn. // Rotationsretningen bestemmes af fortegnet int c; while (Serial.available()>0){ c = Serial.peek(); // læs første karakter, bufferen er uændret c=(c<96)?c:c-32; // små bogstaver ændres til store bogstaver switch (c) { case 'D': drejemode = true; vinkel = 0; break; // drejemode, bliv på position case 'G': drejemode = false;vinkel = vinkelold; break; // positionsmode case 'F': mode(8); break; // stepmode Fuld step case 'H': mode(4); break; // stepmode halvstep case 'K': mode(2); break; // stepmode fjerdedelsstep case 'O': mode(1); break; // stepmode ottendedelstep case 9: case 10: case 13: case 32:break; // fjern tab, nl, cr og sp case 43: case 45: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: vinkel=serial.parsefloat();break; // læs ønsket vinkel eller drejning hvis tegnet er +, - eller 0-9 default: Serial.println("Fejl i input"); while (Serial.available()>0) c= Serial.read(); // ved fejl i input: tøm buffer break; }

c = Serial.read(); } // fjern det læste tegn fra buffer (bufferlængden nedskrives) if (drejemode==true) vinkel += vinkelold; // beregn den ønskede vinkel rotate(vinkel-vinkelold); // drej vinkeldifferencen vinkelold=vinkel; // opdater vinkelpositionen if (drejemode==true) vinkel=0; // drejning udført }