Scriptie ingediend tot het behalen van de graad van PROFESSIONELE BACHELOR IN DE ELEKTRONICA-ICT
Sturing van een paraplu-automaat vervangen door een Arduino Jef Gys Departement Wetenschappen en Techniek Opleiding Elektronica-ICT Academiejaar 2014-2015
Interne promotor: Patrick Van Houtven Externe promotor: Michel Neven
Versie: 12 juni 2015
Dankwoord
Een stage van 12 weken gaat snel voorbij als je omringd wordt door behulpzame en vriendelijke mensen. Het resultaat van mijn scriptie was niet hetzelfde geweest zonder de hulp en steun van bepaalde personen. Ik wil graag Michel Neven, mijn externe promotor en oprichter van Made Advertising bedanken voor de fijne samenwerking en alle kansen die ik heb gekregen. Daarnaast wil ik graag Patrick Van Houtven bedanken voor het opvolgen van mijn scriptie, het beantwoorden van mijn vragen en het in goede banen leiden van mijn onderzoek. Patrick Vandeput wil ik graag bedanken voor de interessante rondleiding bij Automation Europe, het ter beschikking stellen van een nieuwe munter en de hardware die nodig was voor het herprogrammeren. Ook Bert Wittevrongel wil ik bedanken voor het ter beschikking stellen van de informatie van de sturing van de automaat. Antwerpen, 12 juni 2015 Jef Gys
i
Abstract Made Advertising BVBA is een bedrijf dat actief is in de provincie Antwerpen. Ze staan in voor het uitbaten en onderhouden van hun eigen paraplu-automaten. Vanwege het grote succes wordt er nagedacht over de productie van zelf ontworpen paraplu automaten, zodat ze kunnen uitbreiden naar andere provincies binnen Belgi¨e. Tijdens het onderzoek zal worden bekeken of het mogelijk is om de sturing van de huidige automaat te vervangen door een Arduino. De huidige sturing is opgebouwd met behulp van een controller voor een onbemand pompstation. Het wijzigen van de sturing heeft als doel dat Made Advertising de productie van de automaat voor eigen rekening kan nemen. Hierdoor kunnen de productiekosten worden gedrukt. De werking van de automaat zal worden bestudeerd en neergeschreven in de analyse. In de voorbereiding zal aan de hand van de vereisten worden beslist welke sensoren moeten vervangen worden om compatibel te zijn met de Arduino. Wanneer er voldaan is aan de vereisten zal een testopstelling gemaakt worden met de Arduino als sturing. Het resultaat is een volledig werkende opstelling met een Arduino Mega als basis. De opstelling is echter enkel geschikt voor testdoeleinden. Voor een finale implementatie moet alles in case worden gemonteerd die minder gevoelig is voor vandalisme. Made Advertising is momenteel in onderhandeling met verschillende partners om een samenwerking op te starten en uit te breiden buiten de provincie Antwerpen. Wanneer deze onderhandelingen afgerond zijn en tot een overeenkomst hebben geleid zal de productie van de automaten met een nieuwe sturing van start gaan. De nieuwe automaten zullen verschijnen in het straatbeeld en verschillende klanten bedienen.
ii
Inhoudsopgave
Dankwoord
i
Abstract
ii
1 Situering 1.1 Het Probleem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Analyseren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Uitvoeren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 2 2 3
2 Bespreking 2.1 Vereisten . . . . . . . . . . . 2.2 Algemene Opbouw Automaat 2.3 Analyseren . . . . . . . . . . 2.3.1 Algemene Werking . . 2.3.2 Input . . . . . . . . . 2.3.3 Verwerking . . . . . . 2.3.4 Output . . . . . . . . 2.4 Voorbereiden . . . . . . . . . 2.4.1 Input . . . . . . . . . 2.4.2 Verwerking . . . . . . 2.4.3 Output . . . . . . . . 2.4.4 Kostenraming . . . . 2.4.5 Structuur . . . . . . . 2.5 Uitvoeren . . . . . . . . . . . 2.5.1 Input . . . . . . . . . 2.5.2 Verwerking . . . . . . 2.5.3 Output . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
3 Resultaten
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
4 4 5 6 6 8 13 16 18 18 19 20 21 22 23 23 29 33 38
iii
INHOUDSOPGAVE
iv
4 Besluit
39
A Handleiding A.1 Programmeren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2 Assembleren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3 Gebruik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40 40 41 43
B Onderdelenlijst B.1 Input . . . . . . B.2 Verwerking . . . B.3 Output . . . . . B.4 Totale Kostprijs
. . . .
45 45 46 46 46
C Souce Code C.1 Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C.2 Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47 47 49
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Lijst van figuren
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13
EMP 850.xx V6 . . . . . . Interfaces 850.xx V6 . . . . Aansluiting Munter . . . . . MPX2010GP Case . . . . . PCB Aansluitingen . . . . . Aansluiting MC35i . . . . . Aansluiting Voeding MC35i Flowchart . . . . . . . . . . Logic Level Arduino . . . . Comparator Testopstelling . Anti Pin . . . . . . . . . . ST EMP Output . . . . . . OneButton Diagram . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
8 10 11 13 15 16 17 22 23 24 25 26 28
A.1 ST EMP Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
v
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
Hoofdstuk
1
Situering Made Advertising BVBA is een bedrijf dat actief is in de provincie Antwerpen. Ze staan in voor het uitbaten en onderhouden van hun eigen paraplu-automaten. Vanwege het grote succes wordt er nagedacht over de productie van zelf ontworpen paraplu-automaten, zodat ze kunnen uitbreiden naar andere provincies binnen Belgi¨e. Tijdens mijn bachelorproef bij Made Advertising zal ik de elektronica bestuderen van de huidige automaten. Deze is aanwezig voor de verwerking van de verschillende sensoren en het aansturen van de motor. Het doel van de bachelorproef is een nieuw ontwerp van de elektronica te maken, zodat in de toekomst de kostprijs van de productie kan worden verminderd. Om deze kostprijs te drukken wordt gebruik gemaakt van een Arduino. Hiermee zullen verschillende componenten aangestuurd worden en uitgelezen. De sensoren en motoren zullen, waar mogelijk, behouden worden. De verwerking van signalen wordt opnieuw uitgedacht.
1
HOOFDSTUK 1. SITUERING
1.1
2
Het Probleem
Made Advertising heeft reeds verschillende automaten verspreid over de provincie Antwerpen, die gebruikt worden om paraplu’s te verkopen. Wegens succes wordt overwogen het ontwerpen van de automaten volledig zelf te doen. Dit om kosten te drukken. De eerste paraplu-automaten werden ge¨ımporteerd uit Azi¨e. Later werd besloten om de automaten te laten produceren bij verschillende Belgische bedrijven. Momenteel wordt de kast van de automaat vervaardigt bij een Belgisch bedrijf dat aan metaalbewerking op maat doet. Het ontwerpen van de controller gebeurt bij E.D & A., een bedrijf dat gevestigd is in Kalmthout. De controller is volledig aangepast aan de hardware die Made Advertising wenste te gebruiken. In de toekomst wilt Made Advertsing uitbreiden met de verkoop van paraplu’s naar andere Belgische Provincies. Hierdoor zullen er meerdere nieuwe automaten nodig zijn. Alvorens de productie van de nieuwe automaten te starten moet er onderzoek gedaan worden, om te zien of de automaten goedkoper geproduceerd kunnen worden. Binnen het bedrijf zal ik verantwoordelijk zijn voor het herzien van de elektronica. Dit houdt in het verwerken van de input van de sensoren, en het aansturen van de randapparatuur (motor display, gsm-module, relais, munter).
1.2
Analyseren
Eerst werden de componenten van de huidige automaat bestudeerd en de werkwijze geanalyseerd. Via een uitgebreid interview met de externe promotor is een duidelijk overzicht opgesteld voor de vereisten van de nieuwe automaat. Vervolgens wordt elke component van de automaat individueel behandeld. Er wordt nagegaan welke functionaliteit aanwezig is, en wat echt noodzakelijk is in het nieuwe ontwerp. Tijdens deze analyse wordt ook bekeken welke signalen de verschillende componenten nodig hebben om correct te werken en of ze gebruik maken van bepaalde protocollen. Tijdens deze fase is het belangrijk dat er een afweging gemaakt wordt tussen de verschillende vereisten. Aangezien de tijdsduur van het project beperkt is, zal er rekening gehouden moeten worden met de tijd die nodig is om aan een bepaalde vereisten te voldoen. Na het analyseren van de huidige automaten en het opstellen van de vereisten voor de nieuwe automaat kan worden begonnen met de voorbereiding. Met de bekomen informatie worden de vereisten verder aangepast. Met behulp van de analyse en de nieuwe vereisten kan een overzicht gemaakt worden van welke hardware hergebruikt zal worden en welke onderdelen vervangen zullen worden door alternatieven. Dit onderdeel is cruciaal in het bepalen van de uiteindelijke kostprijs. Tijdens
HOOFDSTUK 1. SITUERING
3
het bepalen van de componenten moeten alle componenten uitgebreid vergeleken worden. Het is belangrijk om een goed evenwicht te vinden tussen: tijdsduur voor implementatie, prijs van de hardware, kostprijs van het eindproduct.
1.3
Uitvoeren
Nadat uit de analyse is gebleken dat het project haalbaar is kan er worden begonnen aan de uitvoering. Om het overzicht te bewaren, wordt onderdeel per onderdeel afgewerkt. Hierdoor worden fouten die moeilijk op te sporen zijn vermeden. Wanneer een bepaalde component werkt, zal deze worden toegevoegd aan het geheel. Het eindresultaat van deze fase zal een volledig werkende automaat zijn met een nieuwe sturing.
Hoofdstuk
2
Bespreking Dit hoofdstuk omschrijft de verschillende fases die ik tijdens mijn onderzoek heb doorlopen en de problemen die ik ben tegengekomen.
2.1
Vereisten
De vereisten voor de nieuwe automaat zijn afgeleid uit verschillende interviews en gesprekken met de externe promotor. Verminderen Kostprijs
De kostprijs van het nieuwe ontwerp moet lager zijn dan de kostprijs van de huidige sturing. Geen wisselgeld
De automaat moet geen wisselgeld kunnen teruggeven. Wanneer de automaat wisselgeld moet kunnen geven, zal er een duur sorteersysteem moeten ingebouwd worden. Bovendien zal er altijd geld aanwezig moeten zijn in de automaat, waardoor hij sneller het slachtoffer zal worden van vandalisme met als doel het stelen van het wisselgeld. Eenvoudige technische interventie
Wanneer een bepaald onderdeel van de automaat kapot is, moet het eenvoudig vervangen kunnen worden. Het benodigde gereedschap voor een technische interventie moet dus beperkt zijn. Een onderdeel moet eenvoudig te verwijderen zijn zonder dat er bepaalde contacten moeten gedesoldeerd worden. Communicatie via SMS
4
HOOFDSTUK 2. BESPREKING
5
De informatie die door de nieuwe sturing wordt verzonden naar de server moet op dezelfde manier gestructureerd worden zodat het script op de server niet moet worden aangepast. De automaten met een nieuwe sturing moeten compatibel zijn met de server die gebruikt wordt door de oude automaten. Munter
Het mechanisme voor het aanvaarden van muntstukken moet geproduceerd zijn door ”wh Berlin”. In het verleden zijn er vaak problemen geweest met goedkopere muntproevers omdat deze kwalitatief gezien minderwaardig waren. Bediening
De structuur van de menu en het bedienen van de automaat met nieuwe sturing mag niet te hard verschillen van het oude ontwerp. De twee drukknoppen om te navigeren doorheen het menu moeten behouden worden. Wanneer ze beide gelijktijdig worden ingedrukt wordt het menu item geopend die het mogelijk maakt de automaat bij te vullen. Geen extra componenten
Voor het nieuwe ontwerp moeten er zo weinig mogelijk extra componenten gebruikt worden. Concreet wilt dit zeggen dat de componenten out of the box gebruikt moeten kunnen worden zonder dat er aanpassingen aan moeten gebeuren. Eventuele aanpassingen vragen vaak meer tijd waardoor de productie van de sturing langer duurt. Drukknoppen
De drukknoppen die momenteel gebruikt worden in de automaat zijn redelijk onhandig. Het nieuwe ontwerp moet grotere drukknoppen hebben die eenvoudiger zijn in gebruik. Menu automatisch sluiten
Wanneer de menu van de automaat wordt geopend is het niet mogelijk om geld in te werpen. De menu wordt ook niet vanzelf gesloten. Hierdoor kunnen er geen paraplu’s verkocht worden wanneer de verkoper is vergeten de menu te sluiten. Er kan niet gecontroleerd worden vanop afstand of het menu van de automaat is geopend. Om deze problemen in de toekomst te vermijden is het automatisch sluiten van het menu een vereiste.
2.2
Algemene Opbouw Automaat Input - Coins Selector - Push Buttons - Power Supply - Retro-Reflex Sensor
Verwerking - Mirocontroller
Output - DC Geared Motor - LCD Display - GSM / GPRS Terminal
HOOFDSTUK 2. BESPREKING
2.3
6
Analyseren
Tijdens de analyse is het originele ontwerp van de paraplu-automaat grondig bestudeerd. In dit hoofdstuk wordt interactie met de automaat besproken, maar ook de hardware die verantwoordelijk is voor de invoer van signalen naar de processor,de processor die de signalen verwerkt en de hardware die verantwoordelijk is voor de output van de signalen. De analyse is opgesplitst in vier verschillende delen: algemene werking, input, verwerking en output.
2.3.1
Algemene Werking
Klant
De automaat is heel eenvoudig in gebruik voor de klanten. Dit komt omdat er slechts ´e´en soort paraplu verkocht wordt en de klant slechts ´e´en actie kan uitvoeren, namelijk geld inwerpen. De display toont een welkomstboodschap en het bedrag dat moet worden ingeworpen om een paraplu te kopen. Wanneer de klant voldoende geld heeft ingeworpen zal de automaat automatisch een paraplu verkopen. Na de verkoop wordt er geen wisselgeld teruggegeven, de klant moet dus het gepaste bedrag inwerpen! Wanneer er te veel geld is ingeworpen zal het bedrag dat overblijft afgetrokken worden van het bedrag dat moet worden ingeworpen voor de volgende aankoop. Indien de volgende verkoop niet plaatsvind binnen een bepaalde tijd zal het resterend bedrag gereset worden. Verkoper
De verkoper beschikt over de mogelijkheid om de automaat te openen met behulp van twee verschillende sleutels. Hierdoor kan hij de automaat bijvullen met nieuwe paraplu’s. De automaat heeft twee schachten die paraplu’s bevatten. Wanneer de automaat volledig gevuld is bevat hij 50 paraplu’s. De automaat beschikt over slechts twee drukknoppen, deze zijn zichtbaar wanneer het paneel langs de voorkant wordt verwijderd. Met behulp van deze twee knoppen kan de automaat volledig worden ingesteld via het menu. Door lang (2 sec.) op knop R te blijven drukken wordt het menu geopend. Door kort te drukken worden de verschillende opties doorlopen: – Cash In Het totale bedrag dat zich in de automaat bevindt, wordt weergegeven. Door knop L lang in te drukken wordt het bedrag gereset. Het bedrag moet manueel gereset worden door de verkoper wanneer de opvangbak voor het geld wordt geledigd. Cash In wordt ook automatisch op nul gezet wanneer er een reload wordt uitgevoerd.
HOOFDSTUK 2. BESPREKING
7
– Rollader Geeft weer hoe vaak de rollader van de automaat rondgedraaid heeft sinds de laatste reload. – Totaal laders Geeft weer hoeveel paraplu’s de automaat in totaal heeft verkocht sinds de laatste reload. – Value Puls De munter communiceert door middel van pulsen met de sturing van de automaat. Voor elke 10 eurocent die wordt ingeworpen geeft de munter ´e´en puls. Een muntstuk van 1 euro zorgt er dus voor dat er 10 pulsen worden verzonden. De sturing kent een bepaalde waarde toe aan elke puls. Wat de waarde is van elke puls kan worden ingesteld via dit onderdeel van het menu. Wanneer elke puls een waarde 1 heeft zal de de totale waarde van een 1 euro muntstuk dus 10 zijn. Door kort op de linker knop te drukken wordt de waarde die gelijk staat aan ´e´en puls verhoogt met 1. Door deze waarde te wijzigen kan men de prijs van een item vari¨eren. – Price Token Deze waarde bepaald hoeveel pulsen er nodig zijn alvorens er een paraplu wordt verkocht. Aan elke puls wordt de waarde die ingesteld is via de value puls toegekend. De som van deze waardes wordt opgeslagen in het geheugen van de sturing. Wanneer de som van de waardes groter is of gelijk aan de price token zal de automaat een item verkopen. Wanneer de value puls staat ingesteld op 10, en de price token staat ingesteld op 100 moet een klant 1 euro inwerpen om een paraplu te kopen. Wanneer de Value puls waarde 1 heeft en de price token 30 is, zal er pas een item verkocht worden na het inwerpen van 3 euro. Door gebruik te maken van dit systeem kan de kostprijs van de paraplu ingesteld worden tot op 1 eurocent.
HOOFDSTUK 2. BESPREKING
8
– GSM Deze menu toont de unieke ID van de automaat en hoe goed de ontvangst van de GSM module is. De automaat beschikt over een GSM module om te communiceren met de server.De unieke ID wordt verzonden in elke SMS zodat de server weet van welke automaat de SMS afkomstig is. De server geeft een melding wanneer een bepaalde automaat uitverkocht is of wanneer er zich een storing voordoet. – Machine Reload Deze optie bevindt zich helemaal op het einde van het menu, maar kan ook bereikt worden door L en R gedurende twee seconden in te drukken. Dit item moet worden gebruikt om de automaat te vullen. Standaard staat het aantal paraplu’s op 48, dit kan gewijzigd worden door kort op de L knop te drukken. Niet enkel de drukknoppen maar ook de GSM Module geeft de verkoper toegang tot de automaat. Wanneer een nieuwe automaat in gebruik wordt genomen moet er een unieke ID worden toegekend aan de automaat. Deze unieke ID wordt gebruikt voor de communicatie met de server. Het instellen van de ID gebeurt door een SMS te sturen naar de SIM-kaart die in de GSM module van de automaat werd geplaatst.
2.3.2
Input
Coin Selector
De “coin selector” of munteproever, die momentel gebruikt wordt in de parapluautomaten, is de EMP 850.00 V6 /E /I. De munter is ontwikkeld door wh M¨unzpr¨ufer Berlin gmbh. Het is een model dat sinds mei 2008 in omloop is. De muntproever bevindt zich aan de voorkant van de automaat en beschikt over een roestvrij stalen frontplaat. De frontplaat beschermt de munter tegen vandalisme. Er zijn drie verschillende soorten frontplaten voor de munter. De onderstaande versie (fig. 2.1) is ingebouwd in de automaat.
Figuur 2.1: Munter met roestvrij stalen frontplaat
HOOFDSTUK 2. BESPREKING
9
Er zijn verschillende modellen beschikbaar. Ze verschillen op gebied van de interfaces, het mechanisme en in prijs. Alle EMP 800 V6 sensoren zijn uitgerust met een low voltage microprocessor (3.3v). De munter heeft een werkspanning die varieert van 10V tot 26V. Het constante verbruik is bij het standaard model ¡30mA. Wanneer er een munt in het toestel wordt geworpen verbruikt de munter kortstondig 300mA. Het modelnummer, dat af te lezen is op de muntproever geeft weer over welke opties het apparaat beschikt. – EMP 850.00 V6 /E /I Het tweede cijfer van het modelnummer geeft weer over welke mechanische versie van de munter het gaat. Samen met de EMP 800.xx V6 en de EMP 890.xx V6 behoort de EMP 850.xx V6 tot het gamma van munter dat rechtstreeks achter een frontplaat gemonteerd kan worden. De EMP 850.xx V6 onderscheidt zich samen met de EMP 890.xx V6 op mechanisch gebied van alle andere munters omdat deze modellen het muntgeld langs voor aanvaarden. Andere modellen ontvangen het geld langs boven. Door de mechanische opbouw is het model zeer geschikt voor implementatie in systemen waar weinig plaats is. Het nadeel is echter dat het mechanisme langs binnen gemakkelijk beschadigt kan raken door vandalisme. De overige modellen zoals EMP 820.00 V6 en EMP 840.00 V6 zijn ontworpen voor channel mounting. Dit wil zeggen dat ze niet rechtstreeks achter een frontplaat worden geplaatst. Meestal worden ze in een chassis geplaatst. Bij deze modellen vallen de muntstukken langs boven in de munter, hierdoor is de kans op beschadiging door vandalisme veel kleiner. De gevoelige delen zijn namelijk niet rechtstreeks bereikbaar via de gleuf die wordt gebruikt om geld in te werpen. – EMP 850.00 V6 /E /I De twee cijfers na het punt geven weer met welke elektronische interfaces de munter is uitgerust. De EMP 8x0.xx V6 versie laat toe om een bepaalde munt toe te wijzen aan een bepaalde parallel output. Er zijn zes verschillende lijnen die gebruikt kunnen worden om een puls uit te sturen. Indien er gebruik gemaakt wordt van de Inventory Impuls zijn er slechts 5 kanalen beschikbaar. De lengte van de puls en de pin waarover het signaal wordt verzonden kan geprogrammeerd worden met behulp van Wheasy. Van alle outputs die beschikbaar zijn, wordt bij het model dat ter beschikking was gesteld enkel de ST EMP output gebruikt. De ST EMP output beschikt over 10 verschillende pins.
HOOFDSTUK 2. BESPREKING
10
Figuur 2.2: Interfaces van de munter De dipswitches op de achterkant van de munter laten toe om bepaalde muntstukken te weigeren. Elk muntstuk heeft zijn eigen kanaal, door deze in de ON state te plaatsen wordt een bepaalde munt niet meer aanvaard. Zo kan er, door kanaal 3 in de ON state te plaatsen, een muntstuk van 0,10 euro geweigerd worden. – EMP 850.00 V6 /E /I Er zijn verschillende opties beschikbaar voor de munters. De optie /E, geeft weer dat de munter bestand is tegen temperaturen van -20 tot +70°C en bestand is tegen vochtigheid van klasse E en D. – EMP 850.00 V6 /E /I Deze optie geeft weer dat de munter is uitgerust met de inventory impuls. De impuls kan gebruikt worden voor het tellen van de bijgehouden munten. De duur van een impuls en de tijd tussen verschillende impulsen kan worden aangepast met behulp van het programma wheasy. Standaard staat de inventory impuls op output 4 van de ST EMP output. Bij het herprogrammeren is de inventorty impuls op output 7 geplaatst alvorens hij in de automaat werd geplaatst. De reden hiervan heb ik niet kunnen achterhalen. Standaard heeft de impuls duty factor ingesteld op 50ms/50ms. De lengte van de impuls kan worden aangepast tot maximum 255ms. Een puls komt overeen met de kleinste waarde die wordt aanvaard door de munter. De automaat aanvaardt muntstukken vanaf 0,10 euro. Hierdoor zal dus een muntstuk van 0.50 euro 5 pulsen veroorzaken en een muntstuk van 2.00 euro 20 pulsen.
HOOFDSTUK 2. BESPREKING
11
Momenteel worden er slechts 4 van de 10 aansluitingen gebruikt voor de munter, 2 ´ en aansluiting is de inventory impuls en van de aansluitingen zijn voor de voeding. E´ de vierde is voor het aanvaarden of weigeren van munten (blocking pin).
Figuur 2.3: Aansluiting Munter Push Buttons
De twee drukknoppen die ervoor zorgen dat er genavigeerd kan worden door het menu, zijn beide gesoldeerd op ´e´en printplaat. Ze zijn gemonteerd aan de binnenkant en dus enkel beschikbaar voor de verkoper. De knoppen zijn met behulp van een bout bevestigd aan de binnenkant. De drukknoppen zijn verbonden aan de sturing door middel van drie kabels. De eerste twee kabels dienen voor het signaal van de drukknoppen, de derde levert een voedingsspanning van 5V. Power Supply
De automaat kan worden aangesloten op de netstroom. Zoals verwacht werkt de automaat niet op wisselstroom maar op gelijkstroom. De omvorming gebeurt door de voeding die zich in de behuizing bevindt.
HOOFDSTUK 2. BESPREKING
12
De voeding is van het type S-40-24. Dit model kan een stroom leveren van 0 tot 1,8 Amp`ere bij 24V, wat dus wilt zeggen dat het totale vermogen van de voeding 43,2 Watt bedraagt. Door middel van een potentiometer kan de voedingsspanning aangepast worden tussen 21,6 en 26,4 Volt. De voeding bevat een beveiliging tegen overbelasting en spanningspieken. De beveiliging wordt Hiccup-mode genoemd. Hiccup-mode beschermt de voeding tegen eventuele defecten bij overbelasting of spanningspieken. Het zorgt ervoor dat de voeding automatisch herstart wanneer de fout zich niet meer voordoet. De beveiliging werkt als volgt: wanneer het circuit dat de stroom monitort een overbelasting waarneemt, schakelt de controller de voeding voor een bepaalde tijd uit. Wanneer deze tijd verstreken is, wordt de voeding opnieuw opgestart. Indien de fout zich niet meer voordoet werkt de voeding normaal. In het andere geval, neemt de controller weer een overbelasting waar en wordt de cyclus herhaald. Retro-Reflex Sensor
Onderaan de automaat onder de rollader is er een retro-reflex sensor gemonteerd. Deze sensor detecteert wanneer er een paraplu uit de schacht komt. De sensor is nodig omdat het soms gebeurt dat de rollader geen paraplu grijpt. Op het moment dat er een paraplu voorbij de sensor komt, stopt de motor met draaien omdat er een verkoop heeft plaatsgevonden. Indien na een bepaalde tijd de sensor niets detecteert, gaat de automaat naar sold-out mode. Dit omdat er mogelijk een technische fout is in de schacht of er een verkeerd aantal paraplu’s is ingesteld bij het vullen. In een retro reflex sensor zitten de zender en ontvanger in dezelfde behuizing. De zender stuurt een IR straal uit, de ontvanger ontvangt deze straal. De sensor moet dus steeds gebruikt worden in combinatie met een reflector. Wanneer de straal onderbroken wordt zal de output veranderen. De sensor een gepolariseerde filter, als reflector kan een chroom of blinkend oppervlak gebruikt worden. Het type spiegel dat gebruikt wordt heeft invloed op het bereik van de sensor. De belangrijkste technische eigenschap van de sensor is dat hij gebruikt kan worden bij temperaturen van -25 tot 60°C. Bij 24V is het stroomverbruik kleiner als 30mA. De sensor heeft 500µs nodig om te reageren op de verandering van het input signaal. Wanneer de sensor schakelt zal er een spanningsval zijn van minder als 2,5V en wordt er een stroom van 100mA doorgestuurd. Afhankelijk van het type beschikt de sensor over een NC (normally closed) of NO (normally opened) contact. De sensor heeft drie kabels nodig. Twee voor de voeding en ´e´en voor de output. Hij voldoet aan de ip67 standaard. De 6 geeft aan dat hij bestand is tegen stof onafhankelijk de grootte, de 7 geeft aan dat de sensor waterbestendig is (onderdompeling van 15cm tot 1m).
HOOFDSTUK 2. BESPREKING
2.3.3
13
Verwerking
Microcontroller
De sturing is in vergelijking met de andere componenten van de automaat redelijk groot. Ze wordt ondergebracht in een aparte behuizing. Wat direct opviel aan de sturing is dat er heel veel aansluitingen niet in gebruik waren. Waarom dat zo is, was moeilijk verklaren. De informatie is opgezocht aan de hand van het opschrift op de componenten. Hierdoor werd snel duidelijk dat een 16- bit microcontroller van AMD (Am188 ER 25KI) de verwerking van alle signalen voor zijn rekening neemt. Op de printplaat stond onder andere het opschrift ”E.D& A. PCB 0177 V6”. Via het internet werd duidelijk dat de PCB ontwikkeld is door een bedrijf in kalmthout dat ”E.D & A”heet. Via mail ben ik in contact gekomen met Patrick Smout, de mananger van research and development afdeling. Hij kon mij helaas geen informatie verschaffen over de PCB omdat het een klantspecifieke sturing is. Dankzij Michel Neven heb ik de contactgegevens verkregen van de persoon die verantwoordelijk was voor het ontwikkelen van de sturing. Hij kon mij wel verder helpen aan informatie over de PCB. De PCB is ontwikkeld in 2003 voor de Rijkswaterstaat in Nederland. Het oorspronkelijke doel van de PCB is het besturen van kleine onbemande pompstations die Nederland droog moeten houden. Dit verklaart waarom er bepaalde aansluitingen en componenten niet gebruikt worden. Een van de componenten die opviel was de sensor MPX2010GP. Ik kon niet verklaren waarom een druksensor nodig zou zijn in een sturing die paraplu’s verkoopt. Blijkbaar was dit een overblijfsel van het vorige leven van de PCB.
Figuur 2.4: MPX2010GP Case De taal waarmee de Microcontroller is geprogrammeerd is een afgeleide van Pascal en C. De programmeertaal werd speciaal ontwikkeld door E.D. & A in 1995. Ondanks het feit dat de programmeertaal sinds 1995 gebruikt wordt, kan ze 1:1 ge¨ımplementeerd worden in de laatste nieuwe projecten. De code die uitgevoerd wordt door de microcontroller kan niet van het apparaat gehaald worden omdat deze als executable in het geheugen staat.
HOOFDSTUK 2. BESPREKING
14
Zoals reeds vermeld, worden bepaalde onderdelen niet gebruikt. Zo is de GSM aansluiting niet in gebruik. De relais die oorspronkelijk gebruikt werden voor het aansturen van pompen, wordt in de automaat gebruikt voor het aansturen van de DC motor. De in- en uitgangen die wel gebruikt worden zijn aangeduid in figuur 2.5 op pagina 15. 1. Voeding Deze aansluiting voorziet de PCB van 24V DC voeding. 2. Munter, DC MOTOR en Retro Reflex Sensor Deze aansluitingen voorziet de voeding voor de munter maar regelen ook de locking pin van de munter. De bovenste verbinding van deze aansluiting doet dienst als ground voor de munter maar ook voor de retro-reflex sensor. De twee onderste verbindingen worden gebruikt voor het aansturen van de motor. De onderste verbinding levert 24V aan de motor en de munter. De tweede verbinding van onderaan te beginnen verbindt de DC motor aan de ground, met behulp van een relais. 3. Retro Reflex Sensor en Munter De onderste verbinding van deze aansluiting levert 5V aan de retro reflex sensor. De eerste verbinding van boven te beginnen verwerkt de inventory impuls van de munter. De tweede van bovenaan te beginnen verwerkt de output van de retro reflex sensor. 4. Drukknoppen De 3 onderste verbindingen van deze aansluiting verbinden de drukknoppen met de sturing. De onderste verbinding levert 5V aan de drukknoppen. 5. Display Deze aansluiting wordt gebruikt voor het aansturen van het display, en is tevens de grootste aansluiting. De PCB heeft ook de mogelijkheid om te communiceren met een bankkaart. Hiervoor is echter een high-level controller nodig die ontworpen is door E.D.& A.. Deze is niet ge¨ımplementeerd omdat hij te veel processorkracht eist, en de bedragen niet groot genoeg zijn om te betalen met bancontact.
HOOFDSTUK 2. BESPREKING
Figuur 2.5: PCB Aansluitingen
15
HOOFDSTUK 2. BESPREKING
2.3.4
16
Output
GSM/GPRS Terminal
De automaat beschikt over een gsm module van het type MC35i.Deze is geproduceerd door Cinterion Wireless. De module werkt met een voedingsspanning van 8 – 30 V DC, en verbruikt 200mA bij 12V en dus 100mA bij 24V. De module wordt gebruikt in de automaat om na elke verkoop een SMS naar de server te verzenden. De server houdt bij wanneer de verkoop heeft plaatsgevonden en hoeveel paraplu’s er nog in de automaat zitten. Wanneer een automaat uitverkocht is of er een technische storing heeft plaatsgevonden zal de verkoper gewaarschuwd worden. De module bevindt zich aan de binnenkant van de behuizing. Het enige wat zichtbaar is langs de buitenkant is een antenne. De antenne werd langs de buitenkant geplaatst omdat het metaal van de behuizing het signaal dempt. De antenne is aangesloten aan de MC35i door middel van een FME connector. Er worden twee interfaces gebruikt voor de communicatie tussen de sturing en de GSM module. De audio interface is niet in gebruik omdat er geen communicatie is door middel van geluid met de server.
Figuur 2.6: Aansluiting MC35i – Power Supply Deze fiche heeft zes verschillende aansluitingen. Pin 1 en 6 worden gebruikt voor het aansluiten van de voeding. Pin 3 wordt gebruikt om de module in te schakelen. Het uitschakelen gebeurt door een spanning, die groter is als 5V, voor minimum 3,5 seconden aan te sluiten. Inschakelen gebeurt met behulp van pin 4, door een signaal met een rising edge aan te leggen. De spanning van het signaal moet groter zijn als 5V en gedurende twee seconden worden aangelegd. Van deze verbinding worden er drie kabels gebruikt door de sturing. Alle kabels zijn rechtstreeks verbonden met de voeding. Pin 1 en 2 zorgen voor de voeding. Omdat pin 4 rechtstreeks is verbonden met de voeding, zal deze en spanning groter dan 5V
HOOFDSTUK 2. BESPREKING
17
naar de GSM module leiden. Wanneer de voeding in het stopcontact wordt gestoken zal de modem dus steeds actief zijn.
Figuur 2.7: Aansluiting Voeding MC35i – RS 232 Deze aansluiting wordt gebruikt voor het beheren van de MC35i Terminal en het verzenden van de data. De modem is een DCE, de sturing doet dus dienst als DTE. De modem kan aangestuurd worden door AT Commands te verzenden over de RS232 aansluiting. LCD Display
De LCD display is ontwikkeld door Displaytech. Het model dat ik ter beschikking heb is de 162A. Uit de naam en de datsheet is af te leiden dat deze display twee lijnen heeft met 16 karakters. De display is langs de binnenkant bevestigd aan de automaat, hij staat recht boven de munter. Alle pinouts zijn verbonden met een flatcable aan de sturing. Op de sturing van de automaat staat een potentiometer, die toelaat om de helderheid van het scherm te regelen. Het display heeft ten opzichte van alle andere componenten de meeste aansluitingen nodig. DC Geared Motor
De motor bevindt zich onderaan in de automaat. De motor drijft twee rolladers aan met behulp van een aandrijfriem. De twee rolladers staan 180° gedraaid ten opzichte van elkaar. Hierdoor moet de as van de motor slechts een halve omwenteling doen om een paraplu naar beneden te laten vallen. De motor werkt op 24V en heeft 3 verschillende aansluitingen. Twee aansluitingen zijn voor de 24V voeding en ´e´en aansluiting is gekoppeld aan een microswitch. De microswitch laat toe om het aantal omwentelingen die de motor maakt te tellen. Hier wordt echter
HOOFDSTUK 2. BESPREKING
18
geen gebruik van gemaakt. De draden van de voeding worden aangestuurd door een relais die zich op de PCB van de sturing bevindt. De motor heeft een ingebouwde reductie van 1 op 394. Wat wilt zeggen dat de motor 394 omwentelingen moet maken om de aandrijfas ´e´en omwenteling te laten maken. Wanneer de motor onbelast draait verbruikt hij minder als 260 mA en maakt de as 17 rotaties per minuut. Wanneer de motor belast wordt verbruikt hij maximaal 1200 mA. Door de belasting ligt het aantal omwentelingen iets lager, namelijk 15. De motor heeft een koppel van 4,9 Nm. Dit wilt zeggen dat hij op een afstand van 1 meter van de as een massa van 499 g kan verplaatsen. Afhankelijk van de manier waarop de motor wordt aangesloten kan hij met de klok mee, of tegen de klok in draaien. In de automaat moet de motor met de klok mee draaien.
2.4
Voorbereiden
Tijdens de voorbereiding zal bekeken worden welke hardware hergebruikt kan worden en welke onderdelen vervangen zullen worden. Op het einde van dit hoofdstuk volgt een kostenoverzicht van het nieuwe ontwerp met een Arduino als sturing.
2.4.1
Input
Coin Selector
Om aan de vereisten te voldoen zal er een munter moeten gebruikt worden die geproduceerd is door ”wh Berlin”. De inventory impuls van de huidige munter kan via een digitale of analoge poort uitgelezen worden via de Arduino. Push Buttons
De knoppen die gebruikt worden voor het instellen van de automaat moeten vervangen worden door een beter type om aan de vereisten te voldoen. De huidige knoppen zijn gesoldeerd op een PCB. Om de kostprijs te drukken zullen de drukknoppen niet op een PCB geplaatst worden. Dit kan enkel op voorwaarde dat er geen extra hardware nodig is om de knoppen aan te sluiten, waardoor eenvoudige technische interventies mogelijk zijn. Power Supply
Er zal gebruik gemaakt worden van een Arduino in de nieuwe sturing. Het is niet mogelijk om een Arduino te voeden met een spanning van 24V. De Arduino beschikt over een
HOOFDSTUK 2. BESPREKING
19
voltage regulator die kan werken met spanningen van 6 tot 20V. Bij spanning hoger als 12V zal de voltage regulator oververhitten, en is de kans bestaande dat hij de microcontroller zal beschadigen. De aanbevolen spanning voor de voeding van een Arduino bedraag 7 tot 12V. Door het interview met Patrick Vandeput, kwam ik te weten dat de gebruikelijke spanning voor verkoopautomaten 24V is. De munter kan werken met spanning van 10V tot 26V, de motor heeft een aanbevolen werkspanning van 24V. In het ontwerp met de nieuwe sturing zal gebruik gemaakt worden van een 24V voeding. Om ervoor te zorgen dat de voltage regulator van de Arduino niet oververhit zal een DC Step Down converter gebruikt worden. Retro-Reflex Sensor
Momenteel wordt er gebruik gemaakt van een industri¨ele sensor die aan verschillende normen voldoet. Aangezien de condities in de automaat niet zo extreem is het perfect mogelijk om een goedkopere sensor te gebruiken. De huidige sensor wordt aan de behuizing bevestigd met behulp van twee bouten. Er zijn verschillende modellen die gemonteerd kunnen worden zonder gereedschap. De nieuwe sensor zal dus goedkoper zijn en eenvoudig te monteren zonder gereedschap.
2.4.2
Verwerking
Arduino
Er zijn verschillende Arduino Boards op de markt. Ze verschillen in grootte, processor snelheid en geheugen. Een van de belangrijkste verschillen waar rekening mee moet worden gehouden is het beschikbare geheugen. Door de complexiteit van het programma en de eventuele libraries voor het aansturen van sensoren neemt de grootte van de sketch snel toe. Het merendeel van de Arduino boards beschikt over een geheugen 16 of 32KB. Slechts drie modellen hebben meer geheugen: Arduino Mega ADK (256KB), Arduino Mega 2560 (256KB) en Arduino Due (512KB). Ook het aantal General-purpose input/output pinnen verschilt tussen de modellen. De meeste beschikken over 14 digitale aansluitingen en 6 PWM aansluitingen. De bovenstaande modellen met meer geheugen beschikken ook automatisch over meer aansluitingen: 54 digitale aansluitingen, 15 PWM aansluitingen. De kostprijs van de drie geschikte modellen is ongeveer gelijk. Er is echter een groot prijsverschil tussen de offici¨ele Arduino’s die geproduceerd worden in Itali¨e en de Funduino’s die gemaakt worden in China. Maar er is geen verschil in kwaliteit bovendien werken beide modellen met dezelfde microcontroller.
HOOFDSTUK 2. BESPREKING
2.4.3
20
Output
GSM / GPRS Terminal
De huidige GSM terminal is verbonden met de sturing door middel van twee kabels die speciaal gemaakt moeten worden. Hierdoor neemt de productietijd toe. Bovendien is de module redelijk duur. Er zijn verschillende GSM modules op de markt die compatibel zijn met de verschillende Arduino boards. Opnieuw is er een groot prijsverschil tussen de originele baord die geproduceerd worden in Itali¨e en de goedkopere die in China vervaardigd worden. De meeste GSM modules kunnen eenvoudig als shield op de Arduino geklikt worden, hierdoor is de productie van de automaat eenvoudig en kunnen technische interventies worden uitgevoerd zonder gereedschap. LCD Display
De display die momenteel gebruikt wordt voldoet aan alle eisen en is compatibel met de Arduino. Het nadeel is echter wel dat hij is aangesloten via 8 verschillende verbindingen. Door de vele aansluitingen is een eenvoudige technische interventie niet mogelijk. Bij de nieuwe sturing zal gebruik gemaakt worden van een i2c adapter voor de communicatie tussen de Arduino en de display. Hier zijn slechts vier aansluitingen voor nodig. De totale kost van het scherm zal dus iets duurder zijn omdat de i2c adapter moet worden aangekocht. Maar de tehcnische interventies zullen eenvoudiger zijn. DC Geared Motor
Momenteel wordt er gebruik gemaakt van de verschillende relais die zich op de sturing bevinden om de motor aan te sturen. Een Arduino heeft geen ingebouwde relais . De motor kan niet worden aangestuurd met behulp van de digitale pinnen, deze hebben een spanning van 5V en kunnen maximum een stroom van 40mA leveren. Een extra relais die de motor verbindt met de voeding zal gebruikt moeten worden. Op het internet worden verschillende relais modules aangeboden, die toelaten om een relais eenvoudig aan te sluiten met jumper wires. Bovendien moet er niet meer gesoldeerd worden en zijn eenvoudige technische interventies mogelijk.
HOOFDSTUK 2. BESPREKING
2.4.4
21
Kostenraming
Bepaalde onderdelen zullen vervangen worden met als doel het nastreven van de vereisten. Een vereenvoudigde kostenraming toont dat de kostprijs van de nieuwe sturing in combinatie met het vervangen van bepaalde sensoren een groot verschil in kostprijs veroorzaakt. Een volledige onderdelenlijst is toegevoegd als bijlage. Oude sturing Input EMP 850.00 V6 /E /I Drukknoppen op PCB Voeding 24V 25W Wenglor LK89 ND8 Verwerking Pump Controller
Nieuwe sturing 156,00 24,80 16,86 119,00 325,00
156,00 0,75 10,10 3,31 5,06
EMP 850.00 V6 /E /I 2 Drukknoppen Voeding 24V 48W Step Down Converter fotoelektrische Sensor
14,40 4,45
Funduino Mega Mega Protoshield
Output Siemens MC35I FME Antenne LCD Display DC Motor + toebehoren
102,00 25,00 9,10 244,41
Diversen RS 232 Kabel Totaal:
12,35 1034,52 488,91
23,00 TinySine Arduino Shield 19,99 SMA Antenne 5,17 LCD met I2c adapter 244,41 DC Motor + toebehoren 2,27 Relais Module
HOOFDSTUK 2. BESPREKING
2.4.5
Structuur
Flowchart
Figuur 2.8: Flowchart
22
HOOFDSTUK 2. BESPREKING
2.5 2.5.1
23
Uitvoeren Input
Coin Selector
– Digitaal Uitlezen ´ en van De Arduino die de sturing zal vervangen beschikt over 54 digitale poorten. E´ deze poorten zal gebruikt worden om de inventory impuls van de munter uit te lezen. 6 Digitale pins kunnen toegewezen worden aan een interrupt service routine. Een interrupt service routine moet aan een aantal voorwaarden voldoen. Het is een speciale functie die geen parameters heeft en geen return waarde. Dit komt omdat de ISR op elk moment moet kunnen aangeroepen worden wanneer de interrupt zich voordoet. De Arduino kan slechts ´e´en interrupt gelijktijdig afhandelen. Andere interrupts kunnen dus niet verwerkt worden wanneer de microcontroller een interrupt uitvoert! Na verschillende testopstellingen werd al snel duidelijk dat het niet mogelijk was om de inventory impuls waar te nemen met behulp van een digitale pin. Werken met een ISR was daardoor ook geen mogelijkheid meer. De duur van de puls vormde geen probleem, het kleine spanningsverschil echter wel. De verandering kon niet worden waargenomen door de sturing. De output pin van de munter is actief hoog, dit wilt zeggen dat de pin altijd verbonden is met de grond. Wanneer er een puls wordt verzonden zal deze gedurende 50 ms hoog zijn. Doordat de spanning die wordt geleverd door de munter niet groter was dan 3V was het waarnemen van een verandering met behulp van de Arduino niet mogelijk.
Figuur 2.9: Logic Level Arduino
HOOFDSTUK 2. BESPREKING
24
– Analoog Uitlezen Omdat de inventory impuls niet groot genoeg is kan hij niet worden waargenomen met een digitale pin. De microcontroller op de Arduino Mega heeft echter 15 aansluitingen die toelaten om een signaal analoog uit te lezen. De analogRead() functie van Arduino Mega maakt gebruik van een 10-bit analoog naar digitaal converter. De spanning die zich tussen de 0 en 5V bevindt zal standaard worden vertaald naar een getal tussen 0 en 1023. Dit wilt zeggen dat ´e´en eenheid overeenkomt met 4,9mV. Met behulp van de analogReference() functie kan de resolutie worden gewijzigd. Wanneer ”INTERNAL1V1”wordt meegegeven als parameter, vergelijkt de analogRead() functie de spanning van de pin met een referentiespanning van 1,1V. Hierdoor komt ´e´en eenheid overeen met ongeveer 1mV. Het uitvoeren van de functie duurt ongeveer 100µs. Dit wilt zeggen dat een analoge pin maximaal 10.000 keer kan worden uitgelezen per seconde. Aangezien het signaal 50ms hoog is, vormt dit geen probleem. De eerste testopstellingen waren positief. Het werd echter snel duidelijk dat er een puls met zeer kleine spanning werd verzonden, maximaal 10mV. Hierdoor werden bepaalde pulsen niet waargenomen met fouten als gevolg. De munter is het belangrijkste onderdeel en zelfs een kleine foutmarge is niet aanvaardbaar! – Analoog Uitlezen met Comparator Een eventuele oplossing voor de te lage spanning is werken met een comparator. Een comparator vergelijkt twee spanning met elkaar. Onderstaande testopstelling maakt het mogelijk om twee spanningen met elkaar te vergelijken. Pin 2 en 5 hebben een referentiespanning van 2,5V. Wanneer de spanning van pin 3 en 6 lager is dan de referentiespanning zal LED1 branden en LED2 niet. Wanneer de spanning van pin 3 en 6 hoger is zal LED1 niet branden en LED2 wel.
Figuur 2.10: Comparator Testopstelling
HOOFDSTUK 2. BESPREKING
25
De opstelling kan als eventuele oplossing dienen door de output van de munter te vergelijken met een referentiespanning. Omdat de spanning zo laag is en de puls redelijk kort, zal een ruisarme operationele versterker gebruikt moeten worden met een kleine slewrate. Een mogelijke kanshebber is de AD797. De kostprijs van deze operationele versterker is spijtig genoeg redelijk hoog. Bovendien zal er ook nog een PCB moeten worden ontworpen met het bijhorende circuit. Hierdoor zal de productie langer duren en de kostprijs stijgen. – Blocking Pin Per 0,10 eurocent geeft de munter een puls die 50ms hoog is en 50ms laag. Wanneer er dus een muntstuk van 2,00 euro wordt ingeworpen wilt dit zeggen dat de munter gedurende 2 seconden een signaal uitstuurt. Indien er binnen deze tijd een nieuw muntstuk wordt ingeworpen zendt de munter hier ook onmiddellijk een signaal voor uit. Het gevolg hiervan was dat de ingeworpen muntstukken niet goed konden worden waargenomen door de Arduino. De eerste poging om dit probleem op te lossen was meteen succesvol. Nadat de eerste puls van een ingeworpen munt ontvangen wordt, zet de Arduino de blocking pin van de munter hoog. Hierdoor kunnen er geen munten meer worden ingeworpen. Nadat de laatste puls van een muntstuk is ontvangen wordt de pin terug laag gezet, waardoor opnieuw geld kan worden ingeworpen. – Nieuwe Munter Na verschillende pogingen om de munter te laten werken met de Arduino heb ik contact opgenomen met Automation Europe. Dit bedrijf is de offici¨ele importeur van de munters van WH Berlin. De oprichter, Patrick Vandenput, heeft mij een rondleiding gegeven in zijn bedrijf en verschillende tips gegeven. Hij adviseerde mij om een Anti Pin systeem te gebruiken voor de automaat. Dit systeem zorgt ervoor dat er geen vreemde voorwerpen in de munter kunnen gestoken worden. Hierdoor kan de munter dus niet beschadigt worden aan de binnenkant.
Figuur 2.11: Anti Pin
HOOFDSTUK 2. BESPREKING
26
Een andere tip was het installeren van een Escrow. Dit onderdeel zorgt ervoor dat de munten die worden ingeworpen door de klant niet onmiddellijk in de opvangbak terechtkomen. Hierdoor is het mogelijk om het geld terug te geven aan de klant wanneer er geen succesvolle verkoop heeft plaatsgevonden. Patrick Vandenput heeft de huidige munter die in de paraplu-automaat zat bestudeerd. Hij vertelde dat dit model vaak gebruikt wordt voor toepassingen waar er weinig ruimte is voor het installeren van een munter. Hij vond het wel opmerkelijk dat de inventory impuls gebruikt werd voor het registreren van muntstukken. Dit was hij in heel zijn carri`ere nog maar twee keer tegengekomen. Na de rondleiding heeft hij samen met mij een goed munter gekozen voor de automaat. Het nieuwe model maakt geen gebruik van de inventory impuls, maar van de coin channels in de ST EMP connector. Elk muntstuk dat kan worden ingeworpen heeft een eigen output. Zo komen de outputs 1, 2, 3, 4, 5 en 6 respectievelijk overeen met ¿0.20, ¿0.50,¿1.00, ¿2.00 en de token. Dit model laat toe om met behulp van de DIP switches bepaalde munten te blokkeren. – Digitaal Uitlezen Nieuwe munter De coin outputs van de nieuwe munter zijn standaard hoog. Wanneer er een munt wordt ingeworpen wordt het signaal gedurende 50ms laag. De spanning bedraagt meer als 3V wanneer de pin hoog is. Hierdoor kan de verandering van de pin worden waargenomen door de Arduino Het nadeel aan deze munter is dat er 6 verschillende pins worden gebruikt in plaats van 1. Het voordeel is echter dat er geen externe hardware nodig is om het output signaal te verwerken. Aangezien er 6 verschillende aansluitingen zijn is het niet mogelijk om interrupt based te werken. De kostprijs van de nieuwe munter is gelijk aan die van het ander model.
Figuur 2.12: ST EMP Output
HOOFDSTUK 2. BESPREKING
27
Push Buttons
– External Pull-down Bij de eerste testopstelling wordt gebruik gemaakt van een externe pull-down weerstand. Deze weerstand zorgt ervoor dat wanneer de knop niet wordt ingedrukt hij, verbonden is met de grond. Wanneer de pull-down weerstand niet aanwezig is en de knop niet is ingedrukt, zal de input van de Arduino zweven en voor problemen zorgen bij het uitlezen. Het nadeel aan deze opstelling is dat er gebruik gemaakt wordt van extra componenten die gesoldeerd moeten worden. – Internal Pull-up Om de benodigde hardware te verminderen kan er gebruik gemaakt worden van de interne pull-up weerstanden van de Arduino. Hierdoor zijn er geen extra weerstanden nodig en moeten enkel de knoppen verbonden worden aan de sturing. De interne weerstanden hebben een waarde van 50k-ohm. Wanneer de digitale pin wordt uitgelezen als de knop niet is ingedrukt zal deze hoog zijn. Wanneer de knop wordt ingedrukt is hij verbonden met ground en zal hij een laag signaal geven. Het inschakelen van de interne pull-up weerstand gebeurt door middel van code. – Onbutton Library Om door de menu te kunnen navigeren moeten verschillende patronen kunnen worden waargenomen. Er zijn verschillende methoden om de patronen waar te nemen. Als basis voor het finaal ontwerp is gebruik gemaakt van de OneButton Library van Matthias Hertel. Deze library laat toe om een enkele klik, dubbele klik en het indrukken van een knop waar te nemen. De detectie van deze patronen gebeurt met behulp van de tick() functie die elke keer opnieuw wordt aangeroepen in de loop van het Arduino programma. Het ontwerp van de klasse is gebaseerd op een Finite State Machine en de implementatie van het onderstaande diagram. Elke keer wanneer de tick() functie wordt uitgevoerd wordt de huidige status geanalyseerd en vergeleken met de vorige. Wanneer en bepaald patroon zoals het dubbel klikken op een knop voorkomt zal de bijhorende code worden uitgevoerd. De tick() functie wordt elke keer opnieuw uitgevoerd en controleert de state van de drukknop, vervolgens wordt de state vergeleken met de vorige opgeslagen state. Afhankelijk van de tijd tussen de twee state wordt een bepaalde actie uitgevoerd.
HOOFDSTUK 2. BESPREKING
28
De library maakt geen gebruik van delay() of gelijkaardige functies. Hierdoor is er bijna geen vertraging en wordt de loop snel opnieuw uitgevoerd. Dit is belangrijk aangezien het signaal van de munter slechts 50 ms te detecteren is. Wanneer het uitvoeren van de tick() functie bijvoorbeeld 100ms duurt is de kans bestaande dat het ingeworpen geld niet wordt gedetecteerd.
Figuur 2.13: OneButton Diagram Power Supply
De voeding van de huidige automaat zal hergebruikt worden in het nieuwe ontwerp. Aangezien de nieuwe sturing niet op 24V werkt zal er gebruik gemaakt worden van een DC Step down converter om de voltage regulator op de Arduino chip niet te overbelasten. De converter die gebruikt wordt werkt met spanningen van 5 tot 36V en kan deze verlagen naar spanning tussen de 1,5 en 32V. Hierdoor is het dus perfect mogelijk om een inputspanning van 24V om te vormen naar een spanning van ongeveer 7V die kan gebruikt worden door de Arduino. Het is belangrijk dat de voedingsspanning die naar de Arduino gaat niet lager is dan 7V volt, dit kan zorgen voor een onstabiele uitvoering van de code. De voedingsspanning mag ook niet groter zijn dan 12V, want dit zal de ingebouwde spanningsregelaar overbelasten waardoor hij de microcontroller kan beschadigen.
HOOFDSTUK 2. BESPREKING
29
De uitgang van de step down converter kan onmiddellijk worden aangesloten aan de Arduino door gebruik te maken van de VIN en de GND pin. De uitgangsspanning van de converter kan worden ingesteld met behulp van de DIP switches. De som van de waardes die naast de schakelaar staan vermeld, is de uiteindelijke spanning die wordt geleverd. De converter is uitgerust met de LM2596S, deze Step-Down voltage regulator kan een maximum stroom verwerken van 3A, maar heeft vanaf 2A een goede heatsink nodig om de warmte af te geven aan de omgeving. Het stroomverbruik van de Arduino en de verschillende sensoren is ongeveer 300mA bij 5V. De belasting voor de Step-Down converter is dus niet zo groot, waardoor een extra heatsink niet nodig is. Retro-Reflex Sensor
De industri¨ele Retro-reflex sensor wordt vervangen door een goedkoper alternatief. De nieuwe sensor beschikt ook over drie aansluitingen. Twee aansluitingen worden gebruikt voor de voeding, de derde voor het signaal. Wanneer de sensor een object waarneemt zal de derde lijn hoog gezet worden. Aan de achterkant is er een LED ingebouwd in het omhulsel, deze zorgt voor de visuele feedback. De LED begint ook te branden wanneer er een object wordt waargenomen voor de sensor. Het is mogelijk om de gevoeligheid van de sensor te wijzigen, dit kan met behulp van de potentiometer aan de achterkant. In tegenstelling tot de duurdere sensor heeft dit model geen reflecterende tape nodig. De duurdere sensor maakt gebruik van een stuk reflecterende tape. Wanneer de nieuwe sensor hierop wordt gericht geeft hij altijd een hoog signaal aan de output, zelf wanneer de gevoeligheid zo laag mogelijk staat. Deze sensor is eenvoudig aan te sluiten op de sturing, door het kleine stroomverbruik kan de sensor gevoed worden door de Arduino. Het signaal afkomstig van de output kan aangesloten worden via een digitale pin.
2.5.2
Verwerking
Arduino
– EEPROM Er zijn verschillende gegevens die bewaard moeten blijven na het herstarten van de automaat: nummer van de server, het aantal items in de automaat, totaal ingeworpen bedrag. Het EEPROM geheugen laat toe om gegevens op te slaan en ze vervolgens opnieuw uit te lezen.
HOOFDSTUK 2. BESPREKING
30
Er zijn enkele standaard functies beschikbaar voor het schrijven naar het geheugen. Deze functies kunnen slechts ´e´en byte per keer schrijven. Ze zijn dus heel geschikt voor het opslaan van getallen tussen 0 en 255. Wanneer grotere getallen of datastructuren moeten worden opgeslagen die niet in ´e´en byte passen moeten de functies meerdere keren worden aangeroepen. Door gebruikt te maken van de EEPROMWriteAnything wordt het wegschrijven van data naar het geheugen en het uitlezen van gegevens vereenvoudigt. Om gegevens weg te schrijven moeten de geheugenlocatie en de variabele worden meegegeven als parameter. Wanneer de automaat voor de eerste keer geprogrammeerd en opgestart wordt, wordt er gecontroleerd of de standaard fabrieksinstellingen reeds zijn opgeslagen in het geheugen. Indien dit niet het geval is worden ze opgeslagen. Vervolgens wordt met behulp van de controleplaats aangeduid dat de fabrieksinstellingen zijn weggeschreven. De controleplaats in het geheugen is nodig om te vermijden dat de waardes overschreven worden met de fabrieksinstellingen wanneer de automaat opnieuw opstart. Om het beheren van het geheugen makkelijker te maken is er een memory klasse. Deze klasse bevat verschillende functies zoals sale() en refill() die kunnen worden aangeroepen op de gepaste moment. Elke functie voert verschillende lees- en schrijfbewerkingen uit naar het geheugen. Zo zal de sale() functie het aantal verkochte items verhogen met ´e´en, de verkoopprijs optellen bij het totaal ontvangen geld en ingeworpen geld. – Finite State Machine De volledige automaat is opgebouwd met een fintite state machine als basis. De automaat beschikt over vijf verschillende states: idle, vending, soldout, menu en message. Wanneer de automaat opstart wordt er bekeken hoeveel items er aanwezig zijn. Wanneer het aantal groter is als 0 komt de automaat in de idle state en kan er geld worden ingeworpen. Indien er geen items aanwezig zijn in de automaat wordt hij in sold-out state geplaatst. De drukknoppen kunnen de state van de automaat wijzigen van vending of soldout naar menu. Hierdoor kunnen de waardes in de menu altijd gewijzigd worden. Het indrukken van de knoppen zal een onmiddellijk overgang van state tot gevolg hebben.
HOOFDSTUK 2. BESPREKING
31
* Idle
Wanneer de automaat zich in de idle state bevindt kan er geld worden ingeworpen. Elke keer wanneer deze state opnieuw wordt aangeroepen door de loop wordt er gecontroleerd of het ingeworpen bedrag groter of gelijk is aan de kostprijs van een item. Indien dit het geval is zal de automaat de overgang maken van de idle naar de vending state. Het ingeworpen bedrag wordt vermindert met de kostprijs. Het wisselgeld dat over is kan niet worden teruggegeven, omdat de automaat niet over de nodige hardware beschikt. Het resterende bedrag wordt echter afgetrokken van de aankoopprijs van het volgende item. Indien er binnen de 3 minuten geen geld wordt ingeworpen zal de prijs opnieuw gewijzigd worden naar de oorspronkelijke kostprijs. * Vending
In deze state zal er een item verkocht worden en kan er geen geld worden ingeworpen. Een animatie wordt getoond op het scherm en de motor begint met ronddraaien. Indien de Retro-Reflex sensor niets detecteert blijft de motor ronddraaien. Wanneer er na 10 seconden nog steeds geen item uit de rollader is gekomen heeft er zich een technische fout voorgedaan. Er zijn twee mogelijke oorzaken voor de fout. Het aantal items dat is ingegeven kwam niet overeen met het werkelijk aantal, waardoor er volgens de automaat nog items aanwezig waren. Er kan dus geen paraplu verkocht worden. Een tweede mogelijkheid is dat de paraplu’s geblokkeerd zitten in de schacht. Wanneer de Retro-Reflex sensor wel iets detecteer heeft er een verkoop plaatsgevonden, de rolladers stoppen onmiddellijk met ronddraaien. Op het einde van deze state wordt er gecontroleerd hoeveel items er nog aanwezig zijn in de automaat. Indien het aantal groter is als 0, gaat de automaat opnieuw in de idle state. Wanneer het aantal gelijk is aan 0 wordt de automaat in sold out state geplaatst. * Sold Out
In deze state kan er geen geld worden ingeworpen. Het verlaten van deze state is enkel mogelijk door interactie van de verkoper via SMS of met behulp van de drukknoppen.
HOOFDSTUK 2. BESPREKING
32
* Menu
De nieuwe sturing beschikt over een menu die gebaseerd is op het origineel. Er zijn enkele aanpassingen gemaakt om het instellen eenvoudiger te maken. Het menu kan geopend worden door lang te drukken op de bovenste drukknop. Wanneer het menu geopend is kan er gebladerd worden door de verschillende items. Door lang te drukken op de bovenste knop wordt de volgend item getoond. Er zijn twee items die kunnen worden aangepast met behulp van het menu. Als eerste wordt ”RELOAD ITEMS”getoond. Deze variabele bepaald het aantal waarmee de automaat zal worden bijgevuld. Door kort te drukken op de onderste knop zal het aantal verhoogt worden met 1, door twee keer achter elkaar te drukken wordt het aantal verhoogt met 5. De bovenste knop heeft dezelfde functie maar vermindert het aantal items. Door lang te drukken op de onderste knop wordt het aantal items gereset naar 48. Dit is het standaard aantal waarmee de paraplu-automaat meestal wordt gevuld. Door het instellen van het aantal items dat moet worden gebruikt om de automaat te vullen is hij nog niet hervuld. Om in het menu item te komen voor de automaat te hervullen moet de onderste knop lang worden ingedrukt in combinatie met de bovenste knop. Vervolgens moeten de bovenste en onderste knop worden losgelaten. De boodschap dat er 5 keer gedrukt moet worden om te hervullen wordt getoond. Deze feature is toegevoegd om te vermijden dat er per ongeluk wordt hervuld. Na het uitvoeren van de machine reload zal de automaat opnieuw opstarten. De prijs van de producten die verkocht worden kan ook worden ingesteld op dezelfde manier als de reload items. De standaard prijs is echter 3.00 euro. De minimumprijs is 0,10 euro en de maximumprijs is 15,00 euro. Door dubbel te drukken zal de prijs gewijzigd worden met 1.00 euro door ´e´en keer te drukken wordt de prijs met 10 eurocent gewijzigd. Wanneer de prijs van het product dat verkocht wordt door de automaat wordt gewijzigd, verandert ook de waarde van de token die kan worden ingeworpen. De waarde van de token is steeds gelijk aan de verkoopprijs. Hierdoor is het inwerpen van ´e´en token voldoende om een item te kopen. Wanneer er gedurende 20 seconden geen actie meer heeft plaatsgevonden in de menu zal de automaat alle wijzigingen opslaan in het geheugen en opnieuw opstarten. Na het uitvoeren van de reset of reload, start de automaat vanzelf opnieuw op. Hierdoor is het dus niet meer mogelijk dat de automaat per ongeluk in de menu state te laten staan.
HOOFDSTUK 2. BESPREKING
33
* Message
Dit is de vijfde state die automatisch wordt aangeroepen elke 30 seconden. Deze state controleert of er berichten werden verzonden naar de automaat. Afhankelijk van de inhoud van het bericht wordt de overeenkomstige code uitgevoerd. – Debug Tijdens het schrijven en testen van de code is het heel makkelijk wanneer er extra informatie wordt geprint naar de seri¨ele monitor. Het is echter tijdrovend om elke keer opnieuw debug code toe te voegen en te verwijderen. Een goede oplossing hiervoor is de onderstaande regel code. #define DEBUGLOG In de code staan er verschillende #ifdef statements. De code die hierop volgt wordt enkel uitgevoerd wanneer DEBUGLOG gedefinieerd is. De code die ervoor zorgt dat er na elke verkoop een sms wordt gestuurd is ook omringd door een #ifdef statement. Hierdoor worden er dus geen berichten gestuurd naar de server wanneer DEBUGLOG actief is. Zo worden hoge kosten door het verzenden van SMS berichten en foutieve gegevens op de server vermeden.
2.5.3
Output
Relay
Op de PCB van de originel sturing was reeds een relais aanwezig. Bij de nieuwe sturing op basis van de Arduino is dat niet het geval. Om het soldeerwerk te verminderen maakt de nieuwe sturing gebruik van een volledig afgewerkt relais-board. Er is een rode LED aanwezig om aan te geven wanneer de relais geschakeld wordt. De relais beschikt over 3 inputs en 3 outputs. Van de drie inputs worden er twee gebruikt voor de voeding en de derde voor het aansturen van de relais. Van de drie outputs wordt de NO (normally open) aansluiting gebruikt en de center pin. Er is dus enkel verbinding tussen de center pin en de NO pin wanneer de relais wordt aangestuurd. LCD Display
Verschillende testopstellingen zijn opgebouwd alvorens bij het finale ontwerp van de display met I2c adapter terecht te komen. Het was echter al van in het begin zeker dat hetzelfde type display gebruikt zou worden.
HOOFDSTUK 2. BESPREKING
34
– Helderheid en Contrast De display beschikt over 16 verschillende aansluitingen. Pin 15 is de anode en pin 16 is de kathode van de achtergrondverlichting. Het contrast wordt bepaald door de spanning die wordt aangelegd op pin 3. Tijdens het testen van de display zijn er twee verschillende opstellingen gemaakt voor het wijzigen van de helderheid en het contrast. * Manueel
De helderheid en het contrast van de display kunnen be¨ınvloed worden met behulp van een potentiometer. De middelste uitgang van de 10k potentiometer wordt verbonden met pin 3 van de display. De twee andere worden verbonden met GND en 5V. Voor de helderheid kan de potentiometer tussen de kathode en de GND geplaatst worden of tussen de anode en de 5V. De middelste uitgang en ´e´en van de zijkant moeten steeds met de display worden verbonden, de andere met GND of 5V. * Digitaal
De helderheid en het contrast kunnen ook digitaal geregeld worden door middel van transistoren. De emitter van de NPN transistor moet worden verbonden met de ground en de collector met pin 16 van de display. Pin 15 moet verbonden worden de Vcc (5V) van de Arduino en een PWM pin naar keuze moet verbonden worden met de base van de transistor door middel van een 2k2 weerstand. Met behulp van de analogWrite() functie kan de helderheid worden gewijzigd. Het rechtstreeks aansluiten van de PWM pin op de display is ook een mogelijkheid, hierdoor zal de display echter flikkeren. – I2c adapter Tijdens het maken van de verschillende testopstellingen zorgde de vele kabels die nodig waren voor het aansluiten van de display voor veel frustratie. Wanneer er ´e´en kabel niet goed verbonden was, had dit als gevolg dat de volledige display niet functioneerde. Het resultaat van een zoektocht naar mogelijk oplossingen was de I2c adapter. Deze adapater laat toe om de display te bedienen met slechts 4 aansluitingen. Een potentiometer voor het instellen van het contrast bevindt zich aan de achterkant, door middel van een jumper kan de achtergrondverlichting worden inof uitgeschakeld.
HOOFDSTUK 2. BESPREKING
35
De kostprijs van een display met I2c adapter is iets duurder als een display zonder. De meerprijs weegt echter niet op tegen de voordelen. Technische interventies zijn heel makkelijk omdat fouten snel zijn op te sporen. Bovendien kan de adapter bijna hetzelfde als de twee potentiometers, maar er moeten geen extra componenten voor gebruikt worden omdat de adapter ze allemaal bevat. GSM / GPRS Terminal
– Aanpassingen De GSM module is compatibel met verschillende Arduino Boards. Wanneer ze gebruikt wordt in combinatie met een Arduino Mega 2560 moeten de jumpers van de RX en TX pins op de module worden verwijdert. Vervolgens moeten deze met behulp van jumper wires worden verbonden met de RX1 en TX1 van de Arduino Mega. Zonder deze verbinding is communicatie niet mogelijk. Voor het gebruik van de shield in combinatie met een Arduino Mega moeten er ook nog enkele kleine aanpassingen gebeuren in de library. De define statements gevolgd door UNO moeten in comentaar gezet worden. De statements gevolgd door MEGA moeten uit comentaar gehaald worden. De GSM shield wordt gevoed door de Arduino. Wanneer er enkel gebruik gemaakt wordt van de SMS functionaliteit is een extra voeding niet noodzakelijk. – Sms Verzenden Het verzenden van berichten door de automaat wordt beperkt tot het minimum. Hierdoor worden onnodige kosten vermeden. De automaat zal slechts onder bepaalde omstandigheden berichten verzenden: * Na de verkoop van een item.
De automaat zal een overzicht doorsturen naar de server zodat deze de status van de automaat nauwkeurig kan opvolgen. * Wanneer het commando dat werd verzonden via sms niet kon worden herkend.
Indien er een SMS wordt verzonden ter bevestiging van het doorvoeren van een bepaalde instelling lopen de kosten snel op. Daarom zal de automaat enkel een sms verzenden wanneer de instelling die wordt verzonden via SMS niet verwerkt kan worden. * Wanneer er een info aanvraag wordt ontvangen.
Ter controle kan een SMS gestuurd worden met een aanvraag voor de huidige status. De automaat zal een bericht verzenden naar de verzender van de aanvraag. De inhoud van het bericht is hetzelfde als het bericht dat na de verkoop van een item wordt verzonden naar de server.
HOOFDSTUK 2. BESPREKING
36
– Sms ontvangen en verwerken Verschillende instellingen kunnen worden gewijzigd door een bericht te sturen naar de automaat. Het commando moet voor het ”=”teken geplaatst worden, de parameter daarna. * Server=XXXXXXXXXXXXX
Dit bericht geeft de verkoper de mogelijkheid om het servernummer te wijzigen. Het nummer dat wordt meegegeven als parameter zal gebruikt worden om een SMS naar te verzenden na elke verkoop. * info=
Wanneer dit bericht wordt ontvangen door de automaat zal er geantwoord worden met een kort overzicht van de status van de automaat. * refill=XX
Dit bericht laat toe om de automaat vanop afstand te hervullen. Hierdoor is het niet nodig om terug te keren naar een automaat wanneer de verkoper is vergeten om de automaat via de menu bij te vullen. * reset=
Door het verzenden van dit bericht naar de server wordt de automaat volledig gereset naar de fabrieksinstellingen. De prijs zal gewijzigd worden naar 3 euro en alle parameters (cash, sold, totalcash, totalsold, items) worden op 0 gezet. De automaat zal opnieuw opstarten en vervolgens naar de sold-out state gaan. * price=XX.XX
Deze SMS laat toe om de prijs van de items die verkocht worden te wijzigen. De prijs die wordt meegegeven als parameter moet geschreven worden met een punt en niet met een komma. De minimumprijs bedraagt 0,10 eurocent en de maximumprijs die in te stellen is via sms is 15,00 euro. * id=XXXXX
Door het verzenden van deze sms kan de unieke id die wordt gebruikt voor de communicatie met de server gewijzigd worden. Wanneer 00000 wordt gebruikt als parameter zal de automaat geen berichten meer verzenden naar de server. De id die wordt toegekend aan een automaat moet uniek zijn, meestal worden de vijf laatste cijfers van het gsm nummer van de simkaart gebruikt. * state=X
Met behulp van deze sms kan de automaat in sold-out state of vending state geplaatst worden. ”V”plaatst de automaat in vending state en ”A”plaatst de automaat in sold-out state.
HOOFDSTUK 2. BESPREKING
37
– Info Na elke verkoop of wanneer er via sms info over de status wordt opgevraagd zal de automaat een bericht samenstellen. De opmaak van het bericht is dezelfde als de berichten die worden verzonden door de oude automaten. Voorbeeld: 0000340/0000036/00/V/48747 * 0000340/
Dit getal geeft weer hoeveel geld er aanwezig is in de automaat. Het bedrag is uitgedrukt in centiemen. * 0000036/
Dit getal geeft weer hoeveel items er nog in de automaat zitten. * 00/V
De huidige status wordt door deze karakters weergegeven. Er zijn twee combinaties mogelijk: ”00/V”, ”01/A”. ”00/V”geeft aan dat de automaat zich in de vending state bevind. ”01/A”wilt zeggen dat de automaat uitverkocht is en dus geen items meer bezit. Hij kan ook in deze state geplaatst zijn door het verzenden van ”state=V”naar de automaat. * 48747
Deze cijfers zijn de unieke id. Ze worden toegevoegd aan het einde van de sms zodat de server kan achterhalen door welke automaat de sms werd verzonden. DC Geared Motor
De motor wordt aangestuurd met behulp van de relais. De draaitijd wordt bepaald met behulp van de retro-reflex sensor. De motor is verbonden met twee rolladers. Deze laders grijpen een paraplu uit de verticale schacht wanneer ze draaien. De twee rollen staan 180° gedraaid ten opzichte van elkaar. Hierdoor wordt er afwisselend uit elke schacht een paraplu verkocht. Het is ook mogelijk dat er slechts ´e´en schacht volledig gevuld wordt of dat een rollader niet van de eerste keer een paraplu meegrijpt. Hierdoor verschilt de tijd dat de motor moet draaien. Met behulp van de retro-reflex sensor wordt de motor onmiddellijk gestopt wanneer er een paraplu naar beneden valt.
Hoofdstuk
3
Resultaten Het resultaat van het onderzoek is een volledig werkende automaat met een nieuwe sturing gebaseerd op een Arduino Mega. De sturing is ingebouwd met behulp van een frame dat vervaardigd is uit plexi. Hierdoor zijn de aansluitingen en componenten duidelijk zichtbaar. De nieuwe sturing kan in ´e´en stuk worden verwijderd en gebruikt worden als didactische opstelling. De ingebouwde sturing is een demonstratiemodel en kan dus niet gebruikt worden buiten een testomgeving. Ze is niet bestand tegen vandalisme en vochtige omgevingen. Uit dit onderzoek is gebleken dat het vervangen van de sturing door een Arduino mogelijk is. Bovendien is door het vervangen van de sturing en bepaalde sensoren de kostprijs met 60% gedaald ten opzichte van de originele kostprijs. De nieuwe sturing die gebaseerd is op de Arduino kost 465,61 Euro. De oude sturing gebaseerd op de pump controller kost 1.127,75 Euro Door gebruik te maken van het Arduino platform kan met een beperkte kennis de sturing volledig geprogrammeerd worden. Het aansluiten en vervangen van sensoren vereist een beperkte technische kennis omdat er gesoldeerd moet worden. Het solderen is niet nodig voor de opbouw van een werkende testopstelling maar wel aangeraden om het loskomen van contacten te vermijden. Made Advertising zal dit nieuwe ontwerp van de sturing volledig zelf kunnen produceren en onderhouden. Hierdoor zijn ze niet meer afhankelijk van externe partners en kunnen ze een lagere kostprijs garanderen voor de productie.
38
Hoofdstuk
4
Besluit De resultaten van het onderzoek zijn zoals verwacht. Na de analyse was duidelijk dat het vervangen van de sturing door een Arduino mogelijk was. Onverwachte problemen met de munter en het aansluiten van de display konden snel worden opgelost waardoor er geen vertraging werd opgelopen. Het ontwerp kan echter nog enkele verbeteringen gebruiken om de productie te vereenvoudigen. Een ontwerp voor een PCB die toelaat de verschillende sensoren op een eenvoudige en gestructureerde manier aan te sluiten. Dit zal de totale kostprijs verhogen, maar de productiekost en technische interventies eenvoudiger maken. Er kan verder onderzoek verricht worden naar een energiezuinig ontwerp dat een autonomie heeft van een paar weken tot een maand. Zodat het gebruiken van een batterij een alternatief wordt. De autonomie kan misschien verlengd worden door opladen met behulp van een zonnepaneel. Made Advertising is momenteel in onderhandeling met verschillende partners om een samenwerking op te starten en uit te breiden buiten de provincie Antwerpen. Wanneer deze onderhandelingen afgerond zijn en tot een overeenkomst hebben geleid zal de productie van de automaten met een nieuwe sturing van start gaan. De nieuwe automaten zullen verschijnen in het straatbeeld en verschillende klanten bedienen.
39
Bijlage
A
Handleiding Deze bijlage is een overzicht van de verschillende stappen die moeten worden doorlopen om de automaat te assembleren, programmeren en te gebruiken.
A.1
Programmeren
Libraries Om de Arduino te programmeren moet gebruik gemaakt worden van de Arduino environment.
De sketch die de code voor de automaat bevat maakt gebruik van verschillende libraries, onderstaande libraries zijn zelf geschreven en moeten zich in dezelfde map bevinden als de .ino file. Een library bestaat altijd uit een .h en .cpp file.
Buttons CoinSelector Display GearedMotor Memory Message
De sketch maakt ook gebruik van de library voor de GSM/GPRS module. De map ”GSMSHIELDMEGA”met de bestanden voor de library moet op de volgende locatie worden opgeslagen. C:/Program Files (x86)/Arduino/libraries
40
BIJLAGE A. HANDLEIDING
A.2
41
Assembleren
Verwerking
– Arduino Mega Klik het Arduino Prototype Board op de Arduino. Klik de GSM/GPRS module bovenop het Prototype Board. Input
– Coin Selector De Coin Selector maakt gebruikt van de ST EMP output. Verbind Arduino pin 27 met coin output 1 (pin 7). Verbind Arduino pin 29 met coin output 2 (pin 8). Verbind Arduino pin 31 met coin output 3 (pin 9). Verbind Arduino pin 33 met coin output 4 (pin 10). Verbind Arduino pin 35 met coin output 5 (pin 3). Verbind Arduino pin 37 met coin output 6 (pin 4). Verbind Arduino pin 39 met de blocking input (pin 6). Verbind Arduino pin 25 met de ground (pin 1). Verbind pin 2 van de Coin Selector met +V van de voeding.
Figuur A.1: ST EMP Output – Push Buttons Elke drukknop heeft twee aansluitingen voor de verbinding met de sturing. Verbind de twee aansluitingen van de eerste knop met pin 43 en 45 van de Arduino. Verbind de twee aansluitingen van de eerste knop met pin 47 en 49 van de Arduino. – Power Supply De voeding heeft drie inputs, twee outputs en een potentiometer om de spanning te regelen. Gebruik een stroomkabel van de gewenste lengte met een steker aan ´e´en zijde, de zijde zonder stekker moeten worden verbonden met de voeding. Verbind de blauwe draad van de stroomkabel met aansluiting N van de voeding. Verbind de rode draad van de stroomkabel met aansluiting L van de voeding. Verbind de gele draad van de stroomkabel met aansluiting N van de voeding.
BIJLAGE A. HANDLEIDING
42
Meet de output spanning en regel bij indien nodig. Verbind de -V output met de GND van de Arduino.
Sluit de voeding nog NIET aan op de netspanning! – Retro-Reflex Sensor De sensor Verbind Verbind Verbind
heeft drie aansluitingen. de gele kabel van de sensor met pin 51. de groene kabel met de 5V van de Arduino. de rode kabel met de GND van de Arduino.
– Step Down Converter De step down converter heeft twee inputs en twee outputs. Stel door middel van de DIP switches een uitgangsspanning van 7V in. Verbind IN + met +V van de voeding. Verbind IN - met -V van de voeding. Verbind OUT + met de VIN van de Arduino. Verbind OUT - met de GND van de Arduino Output
– Relais Module De Relais module heeft drie inputs en drie outputs. Verbind de S input met pin 53 van de Arduino. Verbind de middelste + input met de 5V van de Arduino. Verbind de - input met pin GND van de Arduino. Verbind de middelste output met de +V van de voeding. Verbind de NO output met de + pin van de motor. De NC output wordt niet gebruikt. – I2C LCD Display De I2C Adapter van de display heeft vier verschillende inputs. Verbind de GND pin met de GND van de Arduino. Verbind de VCC pin met de 5V van de Arduino. Verbind de SCL pin met de SCL21 pin van de Arduino. Verbind de SDA pin met de SDA20 pin van de Arduino. – GSM/GPRS Module De GSM module is een Arduino Shield en kan via de headers rechtsreeks worden verbonden met de Arduino. Verwijder de TX en RX jumper van de module. Verbind de TX pin met de TX118 pin van de Arduino. Verbind de RX pin met de RX119 pin van de Arduino. – DC Geared Motor De motor heeft drie verschillende aansluitingen. De + pin is reeds verbonden met de NO output van de relais module. De - pin moet verbonden worden met de -V aansluiting van de voeding. De S pin wordt niet gebruikt.
BIJLAGE A. HANDLEIDING
A.3
43
Gebruik
Verkoper
– Fabrieksinstelling Servernummer: 0032484176340 Phone id: 00000 Verkoopprijs: 3.00 euro – Navigeren door het Menu Houd de rechter knop gedurende 1000ms ingedrukt om het menu te openen. Om de volgende item te tonen houd de rechter knop gedurende 1000ms ingedrukt.
– Fabrieksinstellingen Terugzetten Er zijn twee mogelijkheden om de automaat te resetten naar de fabrieksinstellingen. * Via het menu Houd de rechter knop gedurende 1000ms ingedrukt om het menu te openen. Druk de rechter knop 8 keer gedurende 1000ms in, tot RESET wordt getoond. Druk 5 keer kort (t¡600ms) op de linker knop. Een animatie wordt getoond terwijl de instellingen worden toegepast. De automaat zal opnieuw opstarten met de fabrieksinstellingen. * Via sms Stuur een SMS met ”reset=”naar de simkaart in de automaat. Een animatie wordt getoond terwijl de instellingen worden toegepast. De automaat zal opnieuw opstarten met de fabrieksinstellingen.
– Fabrieksinstellingen Wijzigen * Prijs
De minimumprijs bedraagt 0,10 euro, de maximumprijs bedraagt 15,00 euro per item. Houd de rechter knop gedurende 1000ms ingedrukt om het menu te openen. Druk de rechter knop 6 keer gedurende 1000ms in, tot PRICE wordt getoond. Kort rechts/links drukken verlaagt/verhoogt de prijs met 0,10 euro. Dubbel rechts/links drukken verlaagt/verhoogt de prijs met 1,00 euro. Links ingedrukt houden gedurende 1000ms reset de prijs naar 3,00 euro. Na 20 seconden worden de wijzigingen automatisch opgeslagen. Een animatie wordt getoond terwijl de instellingen worden toegepast. De automaat zal opnieuw opstarten met de nieuwe instellingen.
De prijs kan ook worden gewijzigd via sms.
BIJLAGE A. HANDLEIDING
44
Stuur een SMS met ”price=x.xx”naar de simkaart in de automaat. Vervang ”x.xx”door de gewenste prijs. Een animatie wordt getoond terwijl de instellingen worden toegepast. De automaat zal opnieuw opstarten met de nieuwe instellingen.
* Servernummer Stuur een SMS met ”server=xxxxxxxxxxxxx”naar de simkaart in de automaat. Vervang ”xxxxxxxxxxxxx”door de gewenste servernummer (inclusief 0032). Een animatie wordt getoond terwijl de instellingen worden toegepast. De automaat zal opnieuw opstarten met de nieuwe instellingen. * Unieke id
Stuur een SMS met ¨ıd=xxxxx”naar de simkaart in de automaat. Vervang ”xxxxx”door de gewenste id. Een animatie wordt getoond terwijl de instellingen worden toegepast. De automaat zal opnieuw opstarten met de nieuwe instellingen.
– Status wijzigen
Stuur een SMS met ”state=x”naar de simkaart in de automaat. Vervang ”x”door V of A. Een animatie wordt getoond terwijl de instellingen worden toegepast. De automaat zal opnieuw opstarten met de nieuwe instellingen.
– Automaat vullen
Vul beide schachten van de automaat met nieuwe paraplu’s. Houd de rechter knop gedurende 1000ms ingedrukt om het menu te openen. Stel reload items gelijk aan het totaal aantal paraplu’s in de automaat. Kort rechts/links drukken verlaagt/verhoogt het aantal met 1. Dubbel rechts/links drukken verlaagt/verhoogt het aantal met 5. Links ingedrukt houden gedurende 1000ms reset het aantal naar 48 Houd links en rechts ingedrukt gedurende 1000ms. Laat eerst de rechter en vervolgend de linker knop los. Druk 5 keer kort (t¡600ms) op de linker knop. Een animatie wordt getoond terwijl de instellingen worden toegepast. De automaat zal opnieuw opstarten met de nieuwe instellingen.
Klant
– Paraplu kopen Werp het gepaste bedrag in. Neem uw paraplu uit de opvangbak. Wisselgeld wordt verrekend als korting voor de aankoop van een tweede paraplu.
Bijlage
B
Onderdelenlijst Deze bijlage is een overzicht van de gebruikte onderdelen voor het opbouwen van de testopstelling. Met een link naar de website waar het onderdeel kan worden aangekocht. De vermelde prijzen gelden voor ´e´en stuk en houden geen rekening met eventueel korting bij bulk aankoop of verzendingskosten!
B.1
Input
Electronic coin selector EMP 800 v6
156 Euro/stuk Set van 10 drukknoppen
0,75 Euro/paar Voeding 24V 48W
10,10 Euro/stuk Step Down Converter
3,31 Euro/stuk Infrarood Retro-Reflex sensor
5,06 Euro/stuk
45
BIJLAGE B. ONDERDELENLIJST
B.2
46
Verwerking
Funduino Mega
14,40 Euro/stuk Funduino Mega Protoshield
4,45 Euro/stuk
B.3
Output
Relais Module
2,27 Euro/stuk I2C LCD 1602
5,17 Euro/stuk GSM/GPRS Shield
23,00 Euro/stuk SMA Antenne
19,99 Euro/Stuk DC Geared motor + toebehoren
244,41 Euro/Set
B.4
Totale Kostprijs
Nieuwe Sturing: 488,91 Euro Oude Sturing: 1034,52 Euro De nieuwe sturing is ongeveer 50% goedkoper. Het grootste verschil in de kostprijs wordt veroorzaakt door het vervangen van de pump controller door een Arduino en de Siemens GSM module door een Arduino Shield. Door het wijzigen van de drukknoppen is er geen printplaat meer nodig en de GSM shield heeft geen dure kabels nodig om te worden aangesloten. De rolladers en motor blijven in vergelijking met de andere elektronische componenten redelijk duur. Door zonder tussenpersoon te werken voor de aankoop worden extra werkuren en eventuele commissie vermeden.
Bijlage
C
Souce Code C.1
Setup Listing C.1: MadeAdvertsing2.0.ino: Setup()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
void setup ( ) { S e r i a l . begin (9600); S e r i a l . p r i n t l n ( ” S t a r t i n g V e d n i n g Machine ” ) ;
//SETUP COINSELECTOR c o i n S e l e c t o r . acceptMoney ( f a l s e ) ; //VENDING MAHINE DOES NOT ACCEPT MONEY IN STARTUP //SETUP DISPLAY #i f d e f DEBUGLOG S e r i a l . p r i n t l n ( ” I n i t i a l i z i n g LCD” ) ; #e n d i f d i s p l a y . Begin ( i s I n i t i a l z e d ) ; d i s p l a y . ShowBoot ( 1 0 0 0 ) ; //SHOW ANIMATION ON SCREEN
//DEBUG SETUP GSM #i f d e f DEBUGLOG m e s s a g e I n t e r v a l = 3 0 0 0 0 ; //INTERVAL OF 30 SECONDS WHEN IN DEBUG, INSTEAD OF 300S (= // WARNING : WHEN MESSAGES ARE CHEKED NO MONEY CAN BE READ ! ! ! ! ! #e n d i f #i f d e f DEBUGLOG S e r i a l . p r i n t l n ( ” S t a r t i n g GSM Module ” ) ; #e n d i f i f ( gsm . b e g i n ( 4 8 0 0 ) ) { #i f d e f DEBUGLOG S e r i a l . p r i n t l n ( ”GSM Module S t a r t e d ” ) ; #e n d i f
47
BIJLAGE C. SOUCE CODE 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
s t a r t e d=t r u e ; f o r ( i =1; i <=20; i ++) //DELETE ALL MESSAGES FROM SIM { sms . DeleteSMS ( i ) ; } } else { #i f d e f DEBUGLOG S e r i a l . p r i n t l n ( ”GSM Module n o t w o r k i n g ” ) ; #e n d i f } #i f d e f DEBUGLOG S e r i a l . p r i n t l n ( ” V e n d i n g Machine s t a r t e d ” ) ; ShowMemory ( ) ; //SHOW VARS WRITTEN IN THE MEMORY #e n d i f };
48
BIJLAGE C. SOUCE CODE
C.2
49
Loop Listing C.2: MadeAdvertsing2.0.ino: Loop() zonder Debug Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
void loop ( ) { //THESE FUNCTIONS ARE ALWAYS EXECUTED c o i n S e l e c t o r . timeResetMoney ( ) ; // I F AMOUNT OF MONEY DOESN ’T CHANGE WITHIN 3 MIN , CheckForMessage ( ) ; // CHECK I F NEW MESSAGE I S RECEIVED b u t t o n s . t i c k ( ) ; // CHEK STATE OF BUTTONS i f ( b u t t o n s . b u t t o n P u s h e d ) //DEFINE STATE ! { s t a t e = S BUTTONS ; // I F A BUTTON I S PRESSED ,GO TO BUTTON STATE } e l s e i f ( s t a t e != S VENDING ) { s t a t e = memory . D e f i n e S t a t e ( ) ; // STATE DEPENDS ON AMOUNT OF ITEMS }
switch ( s t a t e ) { case S IDLE : { c o i n S e l e c t o r . acceptMoney ( t r u e ) ; //ALLOW MONEY TO BE INSERTED c o i n S e l e c t o r . m o n e y I n s e r t e d += c o i n S e l e c t o r . d e t e c t M o n e y ( ) ; //CHEK I F MONEY I S d i s p l a y . ShowMoney ( c o i n S e l e c t o r . m o n e y I n s e r t e d ) ; // SHOW MONEY THAT NEEDS TO B
i f ( c o i n S e l e c t o r . m o n e y I n s e r t e d >= memory . P r i c e ) { double c ha ng e = c o i n S e l e c t o r . m o n e y I n s e r t e d − memory . P r i c e ; // CALCULATE CH c o i n S e l e c t o r . m o n e y I n s e r t e d = c ha n ge ; s t a t e = S VENDING ; } } break ; case S VENDING : { c o i n S e l e c t o r . acceptMoney ( f a l s e ) ; //VENDING MAHINE DOES NOT ACCEPT MONEY IN d i s p l a y . ShowVending ( 1 0 0 0 ) ; //SHOW ANIMATION ON SCREEN memory . S a l e ( ) ; // REGISTER SALE IN MEMORY b o o l e a n temp = g e a r e d M o t o r . t u r n ( ) ; //TURN MOTOR i f ( temp == f a l s e ) //TECHNICAL PROBLEM, OR ITEMS SETTED WRONG AFTER REFILL { #i f d e f DEBUGLOG S e r i a l . p r i n t l n (” Technical error ” ); #e n d i f
BIJLAGE C. SOUCE CODE 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
50
d i s p l a y . S h o w E r r o r ( t r u e ) ; // SHOW ERROR MESSAGE WITH BLINK ! memory . C h a n g e S t a t e ( ”A” ) ; // CAHNGIING THIS LETTER WARNS THE SERVER WHEN M s t a t e = S SOLDOUT ; //NO ITEM COULD BE SOLD ! ITEMS WAS SET WRONG AFTER REFI
} else { d i s p l a y . ShowSold ( t r u e ) ; // } message . S a l e ( ) ; //SEND MESSAGE TO SERVER , ONLY WHEN NOT IN DEBUG MODE! s t a t e = memory . D e f i n e S t a t e ( ) ; // NEXT STATE DEPENDS ON AMOUNT OF ITEMS AND ST
} break ; case S SOLDOUT : { c o i n S e l e c t o r . acceptMoney ( f a l s e ) ; //VENDING MAHINE DOES NOT ACCEPT MONEY IN SO d i s p l a y . ShowSoldOut ( ) ; //SHOW SOLD OUT MESSAGE ON SCREEN s t a t e = memory . D e f i n e S t a t e ( ) ; // STATE DEPENDS ON AMOUNT OF ITEMS } break ; case S BUTTONS : { b u t t o n s . ShowMenu ( b u t t o n s . MenuItem ) ; // SHOW SELECTED MENU ITEM ON LCD
b u t t o n s . timeResetMenu ( ) ; //WHEN NO BUTTON I S PRESSED FOR 20 SECONDS LEAVE TH } break ; default : { s t a t e = memory . D e f i n e S t a t e ( ) ; // STATE DEPENDS ON AMOUNT OF ITEMS } break ; } };