LabVIEW uppgift 4. Erik Andersson och Johan Schött. 22 februari 2010

Relevanta dokument
Programmering av NXT Lego- robot Labbrapport för programmering av en Lego- robot

Snake. Digitala Projekt (EITF11) Fredrik Jansson, I-12 Lunds Tekniska Högskola,

Kevin Lane Kungliga Tekniska Högskolan Introduktionskurs i Datateknik (II1310) TIEDB0. [NXT Legorobot] [Programmering och felsökning]

KUNGLIGA TEKNISKA HÖGSKOLAN KISTA. Lego Linefollower. Få en robot att följa linjen på golvet!

Uppdrag för LEGO projektet Hitta en vattensamling på Mars

Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...

Laboration i datateknik

Laboration - Programmering av LEGO Mindstorm robot

LabVIEW - Experimental Fysik B

Programmering av en Lego robot

Labrapport: Programmering i NXC Programmera LEGO Maindstorm med NXC

Laboration i datateknik

Rapport Digitala Projekt EITF11 Grupp 4 Axel Sundberg, Jakob Wennerström Gille Handledare: Bertil Lindvall

KUNGLIGA TEKNISKA HÖGSKOLAN. Laboration II1310. Programmera Lego Mindstorm robot i NXC

Introduktion till Matlab

Mäta rakhet Scanning med M7005

Extramaterial till Matematik Y

Laboration: Grunderna i MATLAB

Modellering av en Tankprocess

Labbrapport - LEGO NXT Robot

KUNGLIGA TEKNISKA HÖGSKOLAN. Linefollower. Med LEGO Mindstorms och NXC. Paul Coada Introduktion i datateknik II1310

ENKEL Programmering 3

Programmera Lego Mindstormsrobotar

Styr- och Reglerteknik för U3/EI2

Mätteknik 2016 Mätsystem

Mätsystem. Upplägg. Josefin Starkhammar. Före pausen: Efter pausen:

Introduktion till programmering med hjälp av Lego Mindstorm

Laboration 1: Styrning av lysdioder med en spänning

Robotar i NXc. En laboration med Mindstormrobotar. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

PROGRAMMERING I NXC. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

Digitalt lärande och programmering i klassrummet

HÖGSKOLAN I KALMAR Institutionen för teknik Erik Loxbo LABORATION I PLC-TEKNIK SEKVENSSTYRNING AV TRANSPORTBAND SIMATIC S7 - GRAPH

Laborationsrapport av robotprogrammering

PlantPuppy Räddaren för den som inte kan hålla växterna vid liv

Laboration 1: Gravitation

Diffraktion och interferens

Innehåll. 1 Inledning 3

Department of Information Technology Digitala projekt. SuperKull. Daniel Öhman Alexander Persson

Blockly är en av apparna som används för att styra roboten Dash. Den är väldigt enkel i sin utformning och kan med fördel användas av yngre barn.

SNABBMANUAL FÖR IGÅNGKÖRNING AV BOXFAN

Inlämningsuppgifter, EDAF30, 2015

Bruksanvisning

Lab5 för prgmedcl04 Grafik

Vilken skillnad gör det var du placerar det? Prova båda.

Felsökande av en Lego Mindstorm robot

Solar cells. 2.0 Inledning. Utrustning som används i detta experiment visas i Fig. 2.1.

Bruksanvisning. Swema AB Tel: För support och nedladdning av aktuell programvara kontakta:

Mätsystem Lektion inför lab.

Förberedelseuppgifter... 2

Matematikcentrum 1(4) Matematisk Statistik Lunds Universitet MASB11 HT10. Laboration. Regressionsanalys (Sambandsanalys)

Systemets vanliga problem, felsökning och lösning

Användarmanual Onepix MDX Installer 1.1 SVENSK

ODIS och erwin. Sida 1

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Sidor i boken f(x) = a x 2 +b x+c

Aktivitetsbank. Matematikundervisning med digitala verktyg II, åk 1-3. Maria Johansson, Ulrica Dahlberg

Laboration 2 Elektriska kretsar Online fjärrstyrd laborationsplats Blekinge Tekniska Högskola (BTH)

JF-Link. Trådlös elmanövrering av hydraulik. Instruktionsbok. Bruksanvisning i original

PROGRAMMERING AV LEGO-ROBOT VIA NXC

Projekt EITA15. Väckarklocka. LTH Ingenjörshögskolan vid Campus Helsingborg Datateknik

E-II. Diffraktion på grund av ytspänningsvågor på vatten

Digitala projekt rapport

INNEHÅLLSFÖRTECKNING... 2 FÖRORD... 3 INLEDNING... 4 ATT ANVÄNDA MOTORERNA... 9 LOOP (UPPREPANDE) FUNKTIONEN SKAPA EN EGEN KLOSS...

TAIU07 Matematiska beräkningar med Matlab

Lathund - Konfiguration av PLC och dator

Legorobot. Lär dig programmera en legorobot. Teknikåttan Ola Ringdahl Lena Kallin Westin

Maximanus. Tangenter med speciell betydelse på Maximanus. Uppkoppling

Laboration 1: Gravitation

[Introduktion till programmering ]

FYD101 Elektronik 1: Ellära

Slump och statistik med Scratch. Se video

DRAFT. CVS kurs laboration 1 Checka in, ut och uppdatera. Marcus Rejås. 17 november 2002

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x

Digitalt lärande och programmering i klassrummet

Programmera ett dörrlarm. Se video

PROGRAMMERING AV MCU LABORATION6. Laborationens syfte

Digitalt lärande och programmering i klassrummet

Programmering med NXC Lego Mindstorm

Hemuppgift 2, SF1861 Optimeringslära för T, VT-10

Qucs: Laboration kondensator

Programmering, dans och loopar

Simon Johansson Introduktionskurs Datateknik 1310

Introduktion till Matlab

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor

Slump och statistik med Scratch

Introduktion i programmering med språket NXC

MMA132: Laboration 2 Matriser i MATLAB

Laboration 1 Introduktion till Visual Basic 6.0

Peter Ottosson 31/ Introduktionskurs i datateknik II1310

Rapport av genomförd lesson study av en lektion med temat geometri i gymnasiets A-kurs

ETO Manual ETO Innehåll

KUNG. TEKNISKA HÖGSKOLAN. Laboration. Programmering av LEGO-robot

Programmera i teknik - kreativa projekt med Arduino

Manual Mjukvara Allvis Software (SV )

TANA17 Matematiska beräkningar med Matlab

The Intelligent Timer

Tentamen i Beräkningsvetenskap I/KF, 5.0 hp,

REGLERTEKNIK Inledande laboration (obligatorisk)

Ellära. Laboration 2 Mätning och simulering av likströmsnät (Thevenin-ekvivalent)

Funktioner. Räta linjen

Transkript:

LabVIEW uppgift 4 Erik Andersson och Johan Schött 22 februari 2010 Sammanfattning Vår uppgift gick ut på att skapa ett system vars syfte låg i att mäta vattennivån och hålla den inom givna gränser i en tank med konstant dränering. Till vår hjälp använde vi programvaran LabVIEW för att utveckla ett användargränssnitt, bakomliggande logik och kommunikation med hårdvara. Abstract Our task was to create a system which purpose was to measure the water level and keep it within prescribed limits in a tank with constant drainage. To our help we used the software LabVIEW to develop a user interface, underlying logic and communication with hardware. 2

Innehåll 1 Introduktion 4 2 Experiment 5 2.1 Uppkoppling............................ 5 2.2 Programkod............................ 5 2.3 Genomförande........................... 9 3 Resultat 10 4 Diskussion 10 5 Referenser 11 6 Bilagor 11 3

1 Introduktion Figur 1: Uppställning Huvudsyftet med labben var att vi skulle bli bekanta med programvaran LabVIEW som vi kommer använda i framtida kurser. Det är en utvecklingsmiljö som är bra på att sköta kommunikation mellan dator och hårdvara. Problemet bestod av en läckande tank vars vattennivå skulle justeras så att den höll sig inom vissa gränser med hjälp av en pump, se Figur 1. Vi skulle även använda en tryckgivare för att mäta vattennivån. Både tryckmätaren och pumpen skulle styras från LabVIEW, som också skulle innehålla all logik angående när pumpen skulle vara aktiv och så vidare. Resultatet blev i form av ett diagram som visade hur vattennivån hade förändrats och dels med en indikator som visade aktuell vattennivå, se Figur 2. I extrauppgiften skrev vi dessutom kod för att rita upp tanken och dess vattennivå med hjälp av en Pen plotter. Det intressanta med uppgiften var att upprätthålla en kommunikation mellan datorn och hårdvaran som fortskred utan interagering med användaren. 4

2 Experiment 2.1 Uppkoppling Det centrala i uppgiften var att skapa logiken. När den väl fanns där var det i princip bara att koppla in apparaturen enligt uppställningen i Figur 1. Tanken, reservoaren, tryckgivaren och pumpen var ihopkopplade till en enhet på följande sätt. Tanken var belägen på en högre punkt än reservoaren av den enkla anledningen att avrinningen skulle fungera. Ner i tanken stack tryckgivaren, vilken i sin tur var kopplad till multimetern, Agilent 34401A Multimeter. Givaren omvandlade nämligen uppmätt tryck till spänning. Under reservoaren satt det en pump som, när den var igång, pumpade upp vätskan till tanken. Pumpens strömtillförsel kom från ett tillkopplat nätaggregat, Agilent E3640A DC Power supply. 2.2 Programkod Innan vi började att koppla upp var det, som sagt, dock nödvändigt att logiken fanns där. För effektiv programmering skapade vi oss först en bild av vad som önskades. Frontpanelen för vårt program ses i Figur 2. När vattennivån understeg ett bestämt minimum skulle pumpen sätta igång. Den skulle vara påslagen tills vattennivån nådde ett visst maximum då den skulle slås av. Ytterligare funktionalitet hos programmet skulle vara att gränserna för vattennivån manuellt skulle kunna matas in med två rattar. Två lampor skulle indikera huruvida man över- eller underskred nivåerna. En indikator skulle finnas som visade aktuell vattennivå. Ett diagram skulle finnas som skulle visa hur nivån varierat i tiden. Slutligen skulle det, när mätningen avslutades, skrivas ut en bild med tanken och dess innehåll med hjälp av en penplotter. Bilden skulle visa tanken och dess innehåll, västskenivån i klartext och datum. Vi lade på eget bevåg även till en extra funktionalitet, som för övrigt är önskvärt i en verklig situation. Nämligen att pumpens effekt skulle vara justerbar för användaren. Det här löstes enkelt genom att vi lade till en ratt på frontpanelen där vi kunde ändra vilken spänning som kom från nätaggregatet. En vy över programkoden syns i Figur 3. Det första som händer när programmet körs är att en while-loop startas. I början av varje loop hämtas data först in från givaren och de tre rattarna. Spänningen från givaren omvandlas till vattennivå genom att spänningen divideras med 4.25 10 3, vilket vi fick fram genom att registrera vätskenivå och värden från multimetern genom vilka vi sedan fick fram ett linjärt samband. Värdet från multimetern får vi med kommandot MEAS:VOLT:DC?. Eftersom vi matar in önska- 5

Figur 2: Frontpanel 6

Figur 3: Programkoden. Anledningen till att vi klippte upp bilden var för synbarhetens skull 7

Figur 4: Ritar tanken de maximum- och minimumgränser i procent, men i resten av programmet använder oss av liter, omvandlar vi med hjälp enkel matematik och vetskap om tankens volym, från procent till liter. Vidare skickas informationen från givaren direkt till indikatorn och diagrammet. Parallellt jämförs vätskenivån med gränserna. Är nivån under min skall lampan TOM lysa och när den är över max skall lampan FULL lysa. För att sedan kontrollera om pumpen skall stängas av eller sättas på kommer case-satser till användning. Först kollar vi om nätaggregatet levererar någon spänning genom kommandot VOLT?. Om så är fallet kontrolleras det om vätskenivån är högre än den maximalt tillåtna. Är den det skall nätaggregatet slås av. I annat fall låter vi nätaggregatet vara igång. Om det från början är så att det inte levereras någon spänning kollar vi om vätskenivån är under eller över miniminivån. Är den under slår vi på aggregatet med en spänning som hämtas in från en av rattarna i början av loopen. Exempelvis skickas kommandot APPL 5 till nätaggregatet. Annars låter vi dess status vara oförändrad. När knappen STOP trycks avbryts loopen och värdet på vätskenivån, samt hur många pixlar det motsvarar i höjd på en utritad tank, skickas till penplottern som med modifiering av given mallkod ritar upp den önskade bilden. Vilka kommandon som exakt skickas till plottern syns i Figur 4. Hur kommunikationen mellan programmet och hårdvaran fungerar står beskrivet i Bengtsson/Hellberg: Programmera i LabVIEW. Vilka kommandon som går att skicka till hårdvaran finns beskrivet i respektive användarmanual. I Figur 5 visas hur vi fick spänningen från tryckgivaren som vi sammanfattade 8

Figur 5: Mäter spänningen från tryckgivaren i en subvi. 2.3 Genomförande När vi var på plats började vi med att upprätta kommuniktionen mellan LabVIEW och nätaggregatet, som styr pumpen, och multimetern, som mäter från tryckgivaren. Detta var ett kritiskt moment som dock fungerade bra direkt. Efter det implementerade vi koden som skulle reglera pumpen och användargränssnittet. Proportionalitetskonstanten mellan tryckgivaren och vattennivån bestämde vi sedan genom att läsa av tryckgivarens spänning för några olika vattennivåer. Vi bestämde att då vattennivån var 400 ml skulle tanken vara full. Valet grundades på att vi då såg att vi hade vatten kvar i reservoar så att pumpen inte kunde gå torr. Vi såg att pumpens maxspänning var 12 V och valde att kunna reglera pumphastigheten därefter, se avsnittet Programkod. När vi började testköra hade vi inte med koden som ritade. Detta för att lättare kunna felsöka om något inte stämde. Vi hade vissa problem med att få Sweep chart -grafen att uppdateras sig kontinuerligt och samtidigt behålla historisk data. Det här löste vi genom att välja Fixed på y-axeln och Auto på x-axeln. Efter lunch började vi med uppritandet. Det gick bra när vi körde mallkoden som man fick givet men när vi själva skrev koden tolkade den även kod-instruktioner som text som skulle skrivas ut. Efter felsökning förstod vi att felet var kopplat till strängen \03. När vi kopierade in mallkoden och ändrade den istället för att börja om från början fungerade det. Efter det var extrauppgiften löst och med några testutskrifter var vi nöjda med resulatet. En kortfattad summering över problem och funderingar som uppstod under experimentet finns i labbloggen som vi bifogat 9

1.8 Determination of the relation between water level and voltage 1.6 y = 0.00425*x + 3.04e 16 1.4 1.2 Voltage [V] 1 0.8 0.6 0.4 Measured values 0.2 Linearising 0 0 50 100 150 200 250 300 350 400 Water level [ml] Figur 6: Bestämmandet av förhållandet mellan vattennivå och tryckgivarens spänning i rapporten, se Bilaga 1. 3 Resultat Det tydligaste resultatet för hur väl vi lyckats är att visuellt se hur pumpens styrning fungerar. Men vi såg också hur pumpindikatorn på skärmen varierade och hur grafen över vattennivån historiskt sett uppdaterades kontinuerligt. Dessa indikatorer stämde väl överens med verkliga värden. Uppritandet med hjälp av Pen plotter resulterade i Bilaga 2. Konstanten mellan tryckgivarens spänning och vattennivån bestämde vi ur Figur 6. Den fick vi till 4.25 10 3. 4 Diskussion Vår uppgift var relativt kul att utföra, dels för att man så tydligt kan se kopplingen mellan laboration och verklighet. Det är verkligen lätt att hitta användningsområden för den färdiga produkten. Exempelvis en badbassäng, 10

som måste hålla en någorlunda konstant nivå. Något vi hade problem med var att få fram funktionaliteten hos det önskade Sweep chart. Efter en tid löste vi dock problemet, men en reflektion är att vi kunde ha undivikit förlorade timmar på grund av det genom att ha ägnat det mer tid under förstudien. En annan sak som gav oss huvudbry var att Pen plottern först inte skrev ut vad vi ville. Vad vi senare fick erfara var att man skulle har högerklickat på rutan med \03 och markerat Code display. Det här stod för all del i mallkoden för skrivaren, men vi tolkade det inte som att man var tvungen att högerklicka, utan blott som att det var en förklaring på vad \03 betydde. Annars en mycket trevlig laboration. 5 Referenser Manualer IV: Agilent 34401A Multimeter Manualer XII: HP7475A PEN PLOTTER Interface and Programming Manual Manualer XIV: Agilent E3640A DC Power supply Bengtsson/Hellberg: Programmera i LabVIEW 6 Bilagor Bilaga 1: Labbloggen Bilaga 2: Utskrift från HP7475A PEN PLOTTER 11