• No results found

5. Diskussion och slutsatser

5.6 Slutord

Att få lära sig mer om UVC var nyttigt i samband med Covid-19 som nu föregår. Eftersom UVC har kommit allt mer på tal så är det intressant att se i, vilket samband och hur effektivt det faktiskt är. Även CODESYS var nyttigt och roligt att lära sig mer om. Eftersom CODESYS är ett

gratisprogram för automationsimplementationer så finns det en mängd information att hämta från internet där även deras egna manualer ger den information man behöver för att lyckas implementera det mesta.

27 I slutändan var detta ett oerhört lärorikt projekt där lärdom inom alla möjliga områden

innefattades. Då framtiden går mot mer automatiserade lösningar så är det oerhört viktigt för framtidens ingenjörer att förstå sig på och lära sig mer om automation och robotar. Jag tror därför att detta projekt kan vara en bra grund för framtida ingenjörsstudenter att lära sig mer om automatiserade miljöer, elektronik och alla de övriga ämnen som rapporten tar upp.

28

Referenser

[1] Folkhälsomyndigheten. Covid-19, frågor & svar. 2020-03-31.

https://www.folkhalsomyndigheten.se/smittskydd-beredskap/utbrott/aktuella-utbrott/covid-19/fragor-och-svar/ (Hämtad 2020-03-31)

[2] RASPBERRY PI FOUNDATION, ”Raspberry Pi 2 Model B”, 2020.

https://www.raspberrypi.org/products/raspberry-pi-2-model-b/ (Hämtad 2020-04-05) [3] 3S-Smart Software Solutions GmbH, Data Sheet CODESYS Control for Raspberry Pi SL. 2020 [4] ROBOT ELECTRONICS. EMG30, mounting bracket and wheel specification. 2020.

https://www.robot-electronics.co.uk/htm/emg30.htm (Hämtad 2020-04-05) [5] ROBOT ELECTRONICS. MD25 - Dual 12Volt 2.8Amp H Bridge Motor Drive. 2020.

https://www.robot-electronics.co.uk/htm/md25tech.htm (Hämtad 2020-04-05) [6] Electrokit Sweden AB. MPU-9250 monterad på kort. 2020.

https://www.electrokit.com/produkt/mpu-9250-monterad-pa-kort/ (Hämtad 2020-04-05) [7] SparkFun Electronics. SparkFun Level Translator Breakout - PCA9306. 2020.

https://www.sparkfun.com/products/11955 (Hämtad 2020-04-05)

[8] Distrelec Group Inc. 69700055 - Signalstapel Kompakt 71, Röd/Gul/Grön -24 VDC, Werma.

2020. https://www.elfa.se/sv/signalstapel-kompakt-71-roed-gul-groen-24-vdc-werma-69700055/p/13366333 (Hämtad 2020-04-17)

[9] Pi Supply. Raspberry Pi Camera Board v1.3 (5MP, 1080p). 2020.

https://uk.pi-supply.com/products/raspberry-pi-camera-board-v1-3-5mp-1080p (Hämtad 2020-04-17) [10] Battery-Kutter GmbH & Co. KG. Exide Powerfit S312/2.3 S. 2020.

https://www.battery- kutter.de/main/en/Blei-Akkus-oxid-1/Blei-Vlies-Akku-AGM/Exide/Exide-Powerfit-S312-2-3-S.html (Hämtad 2020-05-18)

[11] SparkFun Electronics. Mecanum wheels - 4 pack. 2020.

https://www.sparkfun.com/products/retired/11578 (Hämtad 2020-04-17) [12] ROBOT ELECTRONICS. RLY08 I2C/Serial Relay Module. 2020.

https://www.robot-electronics.co.uk/htm/rly08tech.htm (Hämtad 2020-04-05)

[13] Distrelec Group Inc. 101306 - Lamputtag G23, Vossloh Schwabe. 2020.

https://www.elfa.se/sv/lamputtag-g23-vossloh-schwabe-101306/p/13381118 (Hämtad 2020-04-05)

[14] Lamportillallt AB, ”Bakteriedödande kompaktlysrör UV-C G23 9W”, 2020.

https://www.lamportillallt.se/andamal/speciallampor/bakteriedodande-kompaktlysror-uv-c-g23-9w.html (Hämtad 2020-05-18)

[15] Marlin P. Jones & Assoc. Inc. HC-SR501 PIR MOTION DETECTOR. 2020.

https://www.mpja.com/download/31227sc.pdf (Hämtad 2020-06-12) [16] Ilon, Bengt Erland. US3876255A. 1972-11-13.

https://worldwide.espacenet.com/patent/search/family/023182799/publication/US38762 55A?q=US3876255A

[17] Wada, Masayoshi, “Omnidirectional Control of a Four-wheel Drive Mobile Base for Wheelchairs”, IEEE Workshop on Advanced Robotics and its Social Impacts, 2005. DOI:

10.1109/ARSO.2005.1511650

29 [18] Li, Xie. Christian, Scheifele. Weiliang, Xu. Karl, A. Stol, “Heavy-Duty Omni-Directional

Mecanum-Wheeled Robot for Autonomous Navigation”, 2015 IEEE International Conference on Mechatronics (ICM). DOI: 10.1109/ICMECH.2015.7083984

[19] Wikipedia. Ultraviolett strålning. 2020-04-18.

https://sv.wikipedia.org/wiki/Ultraviolett_str%C3%A5lning (Hämtad 2020-05-19)

[20] Anna, Holmberg, ”UV‐ljus och desinfektion”, [PowerPoint]. 2018-10. https://slf.se/svenska-hygienlakarforeningen/app/uploads/2018/10/uv-ljus.pdf (Hämtad 2020-05-19)

[21] Sarah, Simmons. Charles, Dale Jr. James, Holt. Deborah, G. Passey. Mark, Stibich,

“Environmental effectiveness of pulsed-xenon light in the operating room”, American Journal of Infection Control, Vol. 46, nr. 9, 2018: 1003-1008

[22] Wikipedia, ”Programmerbart styrsystem”, 2019-09-13.

https://sv.wikipedia.org/wiki/Programmerbart_styrsystem (Hämtad 2020-05-18)

[23] Wikipedia, ”IEC-61131-3”, 2019-12-26. https://sv.wikipedia.org/wiki/IEC-61131-3 (Hämtad 2020-05-18)

[24] 3S-Smart Software Solutions GmbH. CODESYS Development System V3. 2020.

https://store.codesys.com/codesys.html (Hämtad 2020-05-18)

[25] 3S-Smart Software Solutions GmbH, “Raspberry Pi with Standard Codesys V3 : First Steps”, 2015.

[26] Wikipedia, ”I2C”, 2019-11-01. https://sv.wikipedia.org/wiki/I%C2%B2C (Hämtad 2020-05-18)

[27] SparkFun Electronics, ”I2C”, 2020. https://learn.sparkfun.com/tutorials/i2c/all (Hämtad 2020-05-18)

[28] 3S-Smart Software Solutions GmbH, “CODESYS Control for Raspberry Pi SL”, 2020.

https://store.codesys.com/codesys-control-for-raspberry-pi-sl.html (Hämtad 2020-05-19) [29] RASPBERRY PI FOUNDATION. NOOBS. 2020-04-14.

https://www.raspberrypi.org/downloads/noobs/ (Hämtad 2020-05-19) [30] RASPBERRY PI FOUNDATION. How to get and install NOOBS. 2020.

https://www.raspberrypi.org/help/noobs-setup/2/ (Hämtad 2020-05-19)

[31] ROBOT ELECTRONICS. MD25 - Dual 12Volt 2.8Amp H Bridge Motor Drive – I2C mode. 2020.

https://www.robot-electronics.co.uk/htm/md25i2c.htm (Hämtad 2020-05-19) [32] 3S-Smart Software Solutions GmbH. CODESYS SoftMotion SL. 2020.

https://store.codesys.com/codesys-softmotion-sl.html (Hämtad 2020-05-19) [33] 3S-Smart Software Solutions GmbH. 2-Axis MnJoystick. 2020.

https://store.codesys.com/application/2-axis-mnjoystick.html (Hämtad 2020-05-19)

[34] Emil, Eriksson. Self-Balancing Robot Control System in CODESYS for Raspberry Pi: Design and Construction of a Self-Balancing Robot using PLC-programming tools. Examensarbete, Umeå Universitet, 2016.

B1-1

Bilaga 1 – Installation av MD25 programbibliotek

Först skapas en enhetsbeskrivningsfil genom att använda sig av en befintlig liknande fil:

a. Kopiera och klistra in en existerade liknande fil (AdafruitPWM.devdesc) och byt namn till MD25.

b. Öppna filen i en textredigerare, exempelvis Notepad++, och ändra ID.

c. Ändra sedan på enhetsinformationen.

d. Biblioteks-och utgivningsnamn ändras.

e. Lägg till metoden ”AfterReadInputs”.

f. Kommentera bort de funktioner vi ej behöver och spara sedan filen.

Enhetsbeskrivningsfilen är nu färdig och redo att användas. Ett programbibliotek skapas därför härnäst genom att:

a. Kopiera och klistra in en existerade liknande fil (I2C_AdafruitPWM.library) och byt namn till MD25.

B1-2 b. Öppna det nya biblioteket i CODESYS och byt namn på funktionsblocket till MD25 genom

att högerklicka på ”AdafruitPwm FB” och välja ”properties”.

c. Byt sedan namn på projektinformationen genom att dubbelklicka på ”Project Information”.

B1-3 d. Ta bort ”Internal” och ”SoftMotionDriver” då dessa inte behövs.

e. Kopiera och klistra in ”BeforeWriteOutputs” och döp om den till ”AfterReadInputs”.

f. Öppna funktionsblocket MD25 och skriv in den vanliga I²C-adressen samt implementera en statusfunktion.

B1-4 g. Lägg sedan till de variabler som MD25an kan använda.

h. För att kunna läsa från MD25an så implementeras alla läsvärden in i metoden

”AfterReadInputs”.

i. De nya variablerna som används läggs även in i samma metod.

B1-5 j. För att kunna skriva till MD25an så implementeras alla skrivvärden in i metoden

”BeforeWriteOutputs”

k. Inga nya variabler används, vilket gör att vi kan lämna variablerna tomma.

Biblioteket är nu färdigt och sparas. Biblioteket installeras sedan genom att navigera till Tools;

”Library Repository…” och välja Install. Enhetsbeskrivningen kan sedan installeras genom att

B2-1

Bilaga 2 – Installation av RLY08 programbibliotek

På ett liknande sätt som implementation av MD25 så implementeras reläet genom att MD25ans enhetsbeskrivning och bibliotek istället kopieras och klistras in och byts namn till Relay.

a. I samma anda som tidigare öppnas enhetsbeskrivningen och texten ”MD25” ersätts med texten ”Relay”. Även Id’t byts till ett unikt.

b. Biblioteket öppnas sedan och på samma ställen där namn ändrades tidigare, ändras nu namnen igen.

c. I funktionsblocket ”Relay” ändras I²C-adressen till reläets.

B2-2 d. Reläets variabler implementeras sedan.

e. För att kunna läsa från reläet implementeras alla läsvärden in i metoden

”AfterReadInputs” där inga extra variabler behövs.

f. För att kunna skriva till reläet implementeras alla skrivvärden in i metoden

”BeforeWriteOutputs” där inga extra variabler behövs.

Biblioteket sparas sedan och installeras på samma sätt som MD25an. Även enhetsbeskrivningen installeras på samma sätt.

B3-1

Bilaga 3 – Installation av MPU9250 programbibliotek

Vidare så skapas en enhetsbeskrivning för gyrot genom att kopiera och klistra in ” MPU9150.devdesc” där namnet byts till ”MPU9250.devdesc”.

a. Enhetsbeskrivningen öppnas sedan och texten ”MPU9150” ersätts med ”MPU9250”, dennes ID byts till ”FFFF 1112” och resterande kvarstår.

b. CODESYS använder ett gemensamt programbibliotek för alla implementerade gyron och därför öppnas biblioteket ”I2C_Gyroscopes.library” i CODESYS. Funktionsblocket

”MPU9150” kopieras sedan och klistras in, där namnet byts till ”MPU9250”.

c. Det nya funktionsblocket öppnas sedan där I²C-adressen byts till gyrot som används.

Biblioteket sparas sedan och installeras på nytt genom ”Library Repository”. Även MPU9250’s enhetsbeskrivnings installeras genom ”Device Repository”.

B4-1

Bilaga 4 – Implementera I²C-enheter

De enheter som kommunicerar via I²C implementeras på följande sätt:

a. Högerklicka på I²C och välj ”Add Device…”

b. Välj ”I2C Master” och tryck på ”Add Device”.

B4-2 c. Högerklicka på ”I2C_master” och tryck på ”Add Device”. Välj sedan MD25 och tryck på

”Add Device”.

d. Upprepa steg c. så att två MD25or finns in programträdet.

e. Upprepa sedan steg c. två gånger till och välj MPU9250 och Relay.

f. Samtliga enheter kan nu användas som funktionsblock i huvudprogrammet.

B5-1

Bilaga 5 – Implementera joystickstyrning

Joysticksstyrningen implementeras som ett funktionsblock i programmet genom att:

a. Högerklicka på ”Application”, välj ”Add Object” och sedan ”POU…”.

B5-2 b. Funktionsblockets namn väljs till Controller, typ sätts som ”Function Block” och

programmeringsspråk till ”Structured Text”.

c. In-och utmatningsvariablerna skapas utefter de variabler joysticksen kan hantera och hjulens namn.

d. Ekvation 1–4 i avsnitt 2.3 används sedan i samband med MD25ans steglösa acceleration från avsnitt 2.2.03. För att roboten skall stå still implementeras villkor för om joysticksen inte rörs.

B5-3 e. Funktionsblocket sparas sedan och implementeras i huvudprogrammet genom att dra en

tom ”Box” på ”Start Here”.

f. ”Input Assistant” används sedan för att infoga funktionsblocket som precis skapades.

g. Variablerna för de två joysticksen och hastigheterna för varje hjul implementeras även i huvudprogrammet.

B5-4 h. ”Input assistant” används sedan igen för att styra variablerna till funktionsblocket.

B6-1

Bilaga 6 – Implementera motorstyrningskorten

Motorstyrningskorten ansluts mot variablerna speedLeftFront, speedRightFront, speedLeftBack och speedRightback i huvudprogrammet.

a. Börja med att dra en tom ”Box” till ett nytt nätverk genom att dra den till pilen som pekar nedåt under funktionsblocket ”Controller”.

b. Använd ”Input Assistant” och välj MD25.

B6-2 c. Upprepa sedan steg a och b och välj MD25_1.

d. Implementera de variabler som MD25orna behöver i huvudprogrammet.

e. Koppla sedan samman variablerna med MD25orna med hjälp av ”Input Assistant”.

Koppla även samman hastigheterna med funktionsblocken och skriv in 88 och 90 som

”usiAddress” på vardera motorkort.

B6-3

B7-1

Bilaga 7 – Implementera lampstyrning

a. Skapa ett funktionsblock likt avsnitt 3.5.2 men döp det till Lamp.

b. Då UVC skall styras genom en knapp och signallampan skall lysa rött infogas en IF-sats för denna funktion. Sedan infogas en IF-sats som bestämmer att den gröna lampan skall lysa om roboten står still och den gula lampan skall lysa om roboten kör.

c. Variablerna implementeras sedan.

d. Funktionsblocket sparas och implementeras i huvudprogrammet genom att använda en tom ”Box” och ”Input Assistant”.

B7-2 e. Variablerna för lamporna implementeras i huvudprogrammet.

f. De ansluts sedan till funktionsblocket.

B8-1

Bilaga 8 – Implementera reläet

Reläet kommunicerar via I²C och implementeras på följande sätt:

a. Ett nytt funktionsblock läggs till i huvudprogrammet där ”Relay” väljs med hjälp av ”Input Assistant”.

b. Reläets in-och utgångsvariabler läggs till i huvudprogrammet.

c. Variablerna kopplas sedan samman med reläets funktionsblock där den gröna lampan kopplas till reläport 1, den gula till reläport 2, den röda till reläport 3 och UVC-lamporna till reläport 4 och 5.

B9-1

Bilaga 9 – Implementera IR-sensorn

IR-sensorn kommunicerar digitalt med envägskommunikation där den skickar att den får kontakt, eller skickar att den inte får kontakt. Sensorn implementeras på följande sätt:

a. En variabel skapas i huvudprogrammet.

b. Variabel implementeras som en input till funktionsblocket ”Lamp”.

c. Inne i funktionsblocket ”Lamp” modifieras befintlig IF-sats med nedan.

d. För att koppla variabeln från huvudprogrammet till den digitala ingången väljs ” GPIOs_A_B” i vänsterträdet.

e. Den Pin på Raspberryn som sensorn är ansluten till väljs sedan som ”Input”.

f. Navigera sedan till ”GPIOs I/O Mapping” och välj med hjälp av ”Input Assistant” den variabel som ska agera input.

B10-1

Bilaga 10 – Ritning nedre plan

B11-1

Bilaga 11 – Ritning övre plan

B12-1

Bilaga 12 - Huvudprogram

//Variabler

leftX: INT; //Deviation in the X direction from the center (-100 to 100, rest position = 0) leftY: INT; //Deviation in the Y direction from the center (-100 to 100, rest position = 0) leftA: INT; //Angle to center (0 - 360 degree)

leftR: INT; //Deviation from center (0 - 100)

rightX: INT; //Deviation in the X direction from the center (-100 to 100, rest position = 0) rightY: INT; //Deviation in the Y direction from the center (-100 to 100, rest position = 0) rightA: INT; //Angle to center (0 - 360 degree)

rightR: INT; //Deviation from center (0 - 100)

//Speed reads

Signal_Green: BOOL; //Robot is ready to drive

Signal_Yellow: BOOL; //Robot drive

Signal_Red: BOOL; //UVC-lamps

//Sensor

sendRelayStates: USINT := 0;

softwareVersion: INT;

relayStates: INT;

END_VAR

B13-1

Bilaga 13 – Funktionsblock Controller

//variabler

IF leftY=0 AND leftX=0 AND rightX=0 THEN speedLeftFront := 128;

speedRightFront := 128;

speedLeftBack := 128;

speedRightBack := 128;

ELSE

speedLeftFront := (-1*leftY + rightX + leftX)*1.275+127.5;

speedLeftBack := (leftY - rightX + leftX)*1.275+127.5;

speedRightFront := (-1*leftY - rightX - leftX)*1.275+127.5;

speedRightBack := (leftY + rightX - leftX)*1.275+127.5;

END_IF

B14-1

Bilaga 14 – Funktionsblock Lamp

//variabler

IF lampSwitch = TRUE THEN

Signal_Red := TRUE;

ELSE

Signal_Red := FALSE;

END_IF END_IF

IF speedLeftFront=128 AND speedRightFront=128 AND speedLeftBack=128 AND speedRightBack=128 THEN Signal_Green := TRUE;

Related documents