Issuu on Google+

Màquina expenedora de productes

Índex 1. Introducció al projecte Tècnic 1.1 Objectius del treball........................................................................ 3 1.2 Inquietuds i motivacions personals................................................. 3 1.3 Introducció al treball....................................................................... 3 1.4 Abans de començar......................................................................... 4 2. Construcció 2.1 Mecànica 2.1.1 Estructura metàl·lica ....................................................... 5 2.1.2 Discriminador de monedes...............................................7 2.1.3 Tubs de recorregut i d’emmagatzematge......................... 8 2.1.4 Actuadors electromecànics (timbres)..............................10 2.1.5 Guies de metacrilat......................................................... 11 2.1.6 motors de productes amb finals de carrera..................... 12 2.1.7 dipòsit de productes........................................................ 13 2.1.8 Ranura d’inserció............................................................ 14 2.2 Electrònica 2.2.1 PIC, el cervell................................................................. 15 2.2.2 Codi font ........................................................................ 16 2.2.3 Programació del microcontrolador................................. 17 2.2.4 Mòdul del pic.................................................................. 18 2.2.5 Parell fotodíode-fototransistor........................................ 19 2.2.6 Motors, electrònica......................................................... 19 2.2.7 Mòdul de relés i electrònica dels actuadors.................... 20 2.2.8 Testejadors dels actuadors.............................................. 21 2.2.9 Pantalla........................................................................... 21 2.10 Font d’alimentació.......................................................... 22

1


Màquina expenedora de productes

3. Recerca i preu del material .............................................................................22 4. Conclusió i valoració personal........................................................................23 5. Propostes de millora........................................................................................23 6. Programes utilitzats.........................................................................................23 7. Agraïments......................................................................................................24 8. Bibliografia.....................................................................................................24 9. Annexos 9.1 Codi font del programa “la maquina expenedora”...........................25

2


Màquina expenedora de productes

1. Introducció al projecte tècnic 1.1 Objectius del treball L’objectiu del projecte es arribar a construir una màquina expenedora de productes que faci pràcticament les funcions principals d’una comercial, però evidentment amb un cost molt més reduït i aprofitant tant material reciclat com sigui possible. Crec que aquest treball suposa un gran repte per mi, te aspectes relacionats amb la programació i l’electrònica i tinc intenció de dedicar-me en cos i anima a acabar aquest projecte. 1.2 Inquietuds i motivacions personals Des de sempre he volgut crear aquells programes que veia a l’ordinador. Fa uns quants anys vaig començar a documentar-me sobre llenguatges de programació. En comptes d’iniciar-me a picar codi en un llenguatge mes proper al humà (d’alt nivell) vaig començar per un una mica més intricat, C, un llenguatge de nivell mitja. El llibre amb el que vaig començar s’anomena Programación estructurada en C, de l’editorial Prentice Hall. Aquesta passió per la programació i els aspectes informàtics i la meva atracció cap a la tecnologia m’han fet decidir crear un projecte que inclogui la programació com a part fonamental, en aquest cas, en el control.

1.3 Introducció al treball El treball es divideix en dues parts, una mecànica formada pel conjunt d’elements físics i d’actuació (tornar monedes, donar productes) , i una electrònica encarregada del control i l’alimentació. Com veureu més endavant aquest dossier no és una memòria detallada de la construcció sinó més aviat un apropament a tots els aspectes de la màquina. Per acompanyar a aquest dossier tinc realitzades també simulacions del funcionament mecànic i elèctric utilitzant diferents programes (Proteus, Isis, Ares).

3


Màquina expenedora de productes

1.4 Abans de començar Cal remarcar que aquest projecte no s’ha fet seguint la construcció d’un model existent, sinó que ha estat dissenyat a partir de l’observació del funcionament d’un. Primer fem un recompte inicial de quants elements componen la màquina. Una vegada sapiguem el nombre exacte i la funció de cadascun (Separar, emmagatzemar, tornar el canvi) passem a analitzar-los i construir-los. El mètode a seguir es pot veure en aquest diagrama (fig.1).

Fig.1

4


Màquina expenedora de productes

2. Construcció Un cop analitzat cada element i fet el disseny podem començar la construcció.

2.1 Mecànica 2.1.1 Estructura metàl·lica L’esquelet de la màquina esta fet integrament amb planxes de metall foradades, unides entre si mitjançant cargols, femelles i algun petit escaire foradat. L’estructura final (fig. 3) va partir d’una més petita (fig. 2) que va anar creixent a mesura que avançava la construcció i sortien nous reptes a suplir. Aquesta estructura s’encarrega de suportar tota la resta de components que formen la màquina, en un conjunt ordenat de forma funcional 1

Fig. 2

(el abans i el després)

Fig. 3

1

Això es, de forma que l’ordre dels components facilitin el correcte funcionament de la màquina, per exemple, deixant espais entre els actuadors (encarregats de tornar el canvi) i els tubs d’emmagatzematge, de forma que un element no obstaculitzi a l’altre.

5


Màquina expenedora de productes

Des de el principi, tenia clar que es necessitaria un bloc capaç d’integrar la resta d’elements, i que aquest hauria d’esser rígid i resistent, per això vaig optar per l’acer, a més, així aprofitava el material del taller d’altres anys. Per a la construcció vaig utilitzar 5 peces de metall rectangulars (fig. 4) i, acollant-les amb els corresponents cargols i femelles, va sortir el primer bloc capaç de mantenir, de moment, els dos o tres primers elements de la màquina, la qual es mantindria així, fins al moment de l’adició de la resta de components, arribant poc a poc a l’estructura final (fig. 3, pàg. anterior).

Femella

Fig. 4, peça X

cargol de cap cilíndric

Vaig haver d’augmentar un “pis” per tal d’integrar per una banda, la font d’alimentació i la part de control, i per l’altra, la cambra on es dipositarà el canvi i els productes. Posteriorment vaig obrir un espai entre la base de sota i els plafons del damunt amb uns petits escaires foradats per tal de deixar pas entre els actuadors i els tubs de recorregut. Els últims canvis van ser, per un costat, l’adició d’un plafó abatible gracies a unes frontisses que serveix per integrar els motors i els dipòsits que donin els productes, i per l’altra, una peça rectangular amb dos abraçadores al costat que serveix per a què tant les monedes com els productes rebotin i acabin al mateix lloc. S’aprofundirà en aquests elements més endavant.1

1

Per a una referència més gràfica de com queden integrats aquests element a l’estructura metàl·lica podeu veure la fig.17 a la pàg. 13.

6


Màquina expenedora de productes

2.1.2 Discriminador de monedes Necessitem separar cada tipus de moneda que entra a la màquina per posteriorment comptar i emmagatzemar els diners. D’aquesta tasca s’encarrega el discriminador, un escaire de PVC foradat amb el diàmetre de cada moneda de forma gradual ascendent1 (Fig. 5).

0 .1 0

€ 0 .0 5

€ 0 .2 0

Fig. 5

€ 1 € 0 .5 0

€ 2 €

Al poc temps de començar el disseny de la maquina va sortir el repte de discriminar les monedes. Diferents possibilitats em sortien del cap, de forma magnètica, selecció per pes, per mida; però necessitava una forma que estigues dintre de les possibilitats de construcció i que fos poc voluminosa. Vaig estar algun temps ideant amb ajuda del tutor la forma de fer-ho, fins que al final vam acabar per tenir la idea del escaire foradat. La construcció va ser laboriosa, com la resta del treball. Vaig tallar de forma rectangular un tros de plàstic sobrant d’altres projectes del taller. Amb la plegadora vaig doblegar el tros de plàstic per la meitat, de forma que es formava un escaire. Les mides dels forats les vaig fer prenent de model el diàmetre de les diferents monedes existents, i el tall amb una petita Dremel amb eina fresadora de tipus diamant.

1

Es a dir, de més petit a més gran.

7


Màquina expenedora de productes

Aquest escaire s’instal·la a la part mes alta de l’estructura metàl·lica amb una petita inclinació cap a baix. (fig. 6). El funcionament es senzill, al ficar una moneda, aquesta baixa pel discriminador fins que cau al seu dipòsit. L´escaire no forma un angle recte sinó que està a un angle inferior, d´uns 85º aproximadament per tal de facilitar que les monedes rellisquin sense caure.

Fig. 6

2.1.3 Tubs de recorregut i d’emmagatzematge Els tubs de recorregut s’encarreguen de portar les monedes del discriminador cap als tubs d’emmagatzematge, i aquests, com el seu nom indica, s’encarreguen d’acumularles. Són tubs de metacrilat i estan posats de forma que omplin tota l’amplada de la màquina (fig. 7)

Fig. 7

8


Màquina expenedora de productes

Vaig comprar dos tubs grans de metacrilat, un amb l’amplada suficient per a les monedes de 5 a 20 cèntims i l’altre des dels 50 cèntims fins als 2 euros. Els tubs d’emmagatzematge els vaig tallar de forma que arribessin des de la part mes alta de l’ultima planxa fins al fons.. Els tubs de recorregut els vaig tallar amb la mesura adient per a que poguessin arribar fins als d’emmagatzematge. Vaig haver de tallar seguint un angle en una de les dues parts del tub per tal de que quedessin de forma rasant just a sota del discriminador (fig. 8). A més una petita distància hauria de separar els tubs per tal de poder ficar-hi posteriorment uns fotodíodes, el muntatge dels quals explicaré mes endavant.

0 .1 0

€ 0 .0 5

€ 0 .2 0

€ 1 € 0 .5 0

€ 2 €

Mateix angle ~= 45º

F o to d ío d e s

M i d a d e l 'u l t i m a p l a n x a

Fig. 8

9


Màquina expenedora de productes

2.1.4 Actuadors electromecànics (timbres) Els actuadors electromecànics es componen d’un solenoide1 (fig. 9) travessats per una tija 2. Al alimentar el solenoide per cadascun del seus extrems produeix un camp electromagnètic que fa desplaçar la tija. Aquest moviment d’anada i tornada l’aprofitarem per retornar les diferents monedes.

Solenoideα (Fig. 9).

Aquest tipus d’inductors amb un nucli es poden trobar en infinitats de elements, tals com vàlvules electròniques, timbres, etc. Vaig veure que em sortia més a compte comprar els solenoides ensamblats en timbres, ja que el cost de la fabricació “casolana” pràcticament era igual o superior, amb l’afegit de que els industrials ja venen totalment muntats i acoblats a un suport. Una vegada comprats els vaig desmuntar i li vaig treure les parts que no eren necessàries.. Vaig tallar les arestes que em sobraven per tal de poder-les col·locar a la part que em restava pel darrera de l’esquelet de metall, amb dos cargols per peça. Per acabar vaig acollar un rectangle de cartó a la tija amb una junta de plàstic per que empenti les monedes dels tubs d’emmagatzematge (fig. 10, pàg. següent).

1 2

Molla de material fèrric esmaltat. Cilindre de metall. Fotografia presa per Jef Harris, lliurada sota llicència creative commons

10


Màquina expenedora de productes

L le n ç a la m o n e d a

C a p a l 'a l i m e n t a c i ó

Fig. 10

2.1.5 Guies de metacrilat Una vegada provats els actuadors vaig veure que les monedes a vegades sortien en direccions no desitjades, per això aconsellat

G u ie s

pel tutor, vaig construir unes guies que conduirien la moneda de forma recta una vegada engegat el inductor (fig. 11).

Amb plàstic sobrant d’altres anys vaig fer 3 rectangles per actuador i els vaig foradar.

Fig.11

11


Màquina expenedora de productes

dos més petits que anirien a cada costat del tub (fig. 12). i un que aniria just a sobre d’aquest dos (fig. 13), fent així un petit canal, el qual vaig ajustar a la mida de les monedes gracies a un nombre determinat de volanderes.

Fig. 12

Fig. 13

2.1.6 motors de productes amb finals de carrera

Tres motors amb pales, alimentats a cinc volts i amb els seus respectius finals de carrera són els encarregats d’expendre els productes (fig.14 ).

P a la f o r a d a d a

C o n j u n t d 'e n g r a n a t g e s r e d u c t o r s

O s q u e s p e r a n c la r

B a r r a d 'a c e r

M o to r D C 5 V Fig. 14

Els tres motors són reciclats de projectes d’altres anys i porten una reducció amb relació de transmissió 1/27. Com que van encapsulats aprofitem les osques dels mòduls per tal d’acollar els motors a la planxa abatible.

12


Màquina expenedora de productes

Per poder empènyer els productes necessitem instal·lar una pala al motor, la qual a més s’encarrega de prémer el final de carrera a cada passada. Les pales estan fetes amb trossos rectangulars de metall foradat. Els finals de carrera també s’instal·len al mòdul de forma que toquin amb les pales. 2.1.7 dipòsit de productes Uns dipòsits rectangulars amb una obertura s’encarreguen d’acumular els productes per que els motors puguin expendre’ls, de forma semblant als tubs d’emmagatzematge (fig.15)

Fig.15

Per a la construcció dels dipòsits he utilitzat plàstic sobrant d’altres anys. Vaig tallar un rectangle de 18x15cm i vaig plegar l’amplada de 18 centímetres en 5 parts. Tres de 5 cm i dos de 4, restant-me així per tant 2cm d’obertura.

13


Màquina expenedora de productes

Fig. 16 : Conjunt de motors amb pales i dipòsits de productes.

2.1.8 Ranura d’inserció L’últim element construït de la maquinà ha estat la ranura per a la inserció de monedes (fig.17), fent així més confortable la tasca de ficar-les.

Fig.17

Per construir la ranura d’inserció vaig utilitzar un rectangle de metacrilat doblegat en forma d’u i vaig fer-li una osca al costat on cauen les monedes. Vaig fer dos forats a l’extrem i amb dos cargols el vaig acollar.

14


Màquina expenedora de productes

2.2 Electrònica

2.2.1 PIC, el cervell Promagable Intelligent Computer, o, en català, computador programable inteligent, es un microcontrolador que funciona com un ordinador a petita escala. Consta dels següents elements: 1. Memòria de lectura (rom): és la memòria del microchip on s’emmagatzema el codi que donarà les instruccions a seguir. El contingut de la memòria no pot variar en calent1. 2. Memòria d’accés aleatori (ram): és la memòria on s’emmagatzemen les variables i els estats de les instruccions. A diferència de la rom aquesta si que pot variar en calent. 3. Rellotge de procés (clock): un oscil·lador extern (en aquest cas un cristall de quars) s’encarrega d’executar les instruccions seguint una freqüència (a més freqüència menys temps d’execució per instrucció). 4. Conjunt d’entrades i sortides digitals i analògiques (inputs/outputs): El pic consta d’un conjunt de “potes” que es poden assignar com entrades o sortides, el PIC rep diversos estímuls a les entrades (si es digital només un 1 ó 0, depenent de la senyal) amb els quals seguint las instruccions del codi actua per exemple donant diferents sortides o canviant el valor de les variables.

Fig.18β

1 β

Es a dir, quan està operatiu. Fotografia presa per Acdx (sobrenom), lliurada sota llicencia creative commons.

15


Màquina expenedora de productes

En aquest projecte el PIC es omnipresent, controla tots els processos amb les instruccions preestablertes en la ROM, des de comptar les monedes i mostrar el valor per pantalla fins a tornar el canvi. He utilitzat un PIC model 18F452. El vaig escollir perquè necessitava un gran nombre d’entrades i sortides , així com una gran quantitat de ram (a causa d’una funció del codi que ocupa molta) i aquest model satisfeia la meva demanda. 2.2.2 Codi font Com heu vist abans, el PIC per si mateix no te cap funció si no hi ha un programa a la memòria que li doni instruccions. Aquestes instruccions s’emmagatzemen en un tipus de codi anomenat “llenguatge màquina” (uns i ceros) que es l’únic que pot interpretar. Com que per a un humà es pràcticament impossible fer un programa elaborat en aquest codi s’utilitzen diferents tipus de llenguatges de programació, amb els quals una vegada escrits els podem passar a llenguatge màquina mitjançant un compilador específic. En aquest cas he utilitzat el que vaig aprendre l’any passat, en la optativa d´electrònica de primer curs de batxillerat sobre programació de PICs, i el meu coneixement del llenguatge “C” per elaborar el codi, compilar-lo i programar el microcontrolador. L’escriptura del programa m’ha portat moltes hores de reflexió, així com modificacions i proves en el PIC a la placa de proves (protoboard)1. Per escriure i compilar el programa vaig utilitzar el software MikroC, en la seva versió de demostració. Als annexos podeu trobar el codi final amb comentaris detallats a cada instrucció, a més en el diagrama de la pàgina següent podeu veure el funcionament de les instruccions del codi i l’execució del PIC (fig.19).

1

Es tracta d’una placa on es poden construir prototips de circuits electrònics sense soldadura.

16


Màquina expenedora de productes

Fig.19

2.2.3 Programació del microcontrolador Per passar el codi una vegada compilat al PIC vaig utilitzar un gravador del tipus JDM (fig.20) que és dotació del centre i el programa IC-Prog. El gravador es connecta a l’ordinador pel port COM i amb el software de gravació es programa el microcontrolador. Fig.20

2.2.4 Mòdul del pic

17


Màquina expenedora de productes

El pic i els elements passius adjacents van inserits en una placa REPRO, aquí podeu veure totes les connexions del mòdul i les seves sortides (fig.21).

Fig.21

Els sòculs1 de 16 potes que es veuen són per inserir uns integrats denominats uln2003a que es componen d’un parell de díodes en Darlington. S’utilitza per obrir o tancar circuits donant un 1 lògic a l’entrada de cada parell de díodes. En aquest cas com podeu veure els utilitzo per alimentar les bobines del mòdul de relés per un costat i els motors per l’altre. Totes les resistències que es veuen a la imatge són per evitar rebots en les entrades. Es pot veure els espasins2 que controlen la pantalla a la dreta de la imatge. L’oscil·lador com hem vist abans serveix per executar els programes de forma cíclica i els condensadors regulen la senyal.

2.2.5 Parell fotodíode-fototransistor

1 2

En castellà “Zócalo”, son uns petit acoblaments amb espasins que serveixen per inserir circuits integrats. Pins de metall que serveixen per conectar un cable extern.

18


Màquina expenedora de productes

Com hem vist a la part mecànica, en el pas entre tubs s’instal·len uns parells fotodíodefototransistor que fan de detectors de presència. El circuit de forma simbòlica es aquest (fig.22)

Fig.22

Aquest circuit es l’encarregat de detectar les monedes. Quan hi ha una interrupció del senyal entre el fotodíode i el fototransistor (quan cau la moneda) es produeix una sortida d’1 lògic (5v) cap al PIC. Aquest, seguint les instruccions, comptabilitza la moneda i ens mostra la quantitat. A més la quantitat queda emmagatzemada a la memòria per un us posterior (demanar producte, tornar el canvi, etc). 2.2.6 Motors, electrònica Com ja sabem, el microcontrolador s’encarrega d’accionar els motors. En aquest cas, com en el de les bobines, utilitzem un uln2003a per evitar pujades en la intensitat del corrent i rebots al PIC. Els finals de cursa indiquen al microcontrolador cada volta que fa el motor per tal de donar la quantitat de productes correcte.

2.2.7 Mòdul de relés i electrònica dels actuadors

19


Màquina expenedora de productes

Com els actuadors funcionen a 220 volts i el PIC funciona i dona sortides a 5V necessitem uns relés que obrin i tanquin de forma independent els circuits. Aquest mòdul en concret és un conjunt de 6 relés muntats en una placa REPRO (fig 23).

Fig.23

L’accionament de la bobina de cada relé esta controlat pel PIC mitjançant un uln2003a, així evitem rebots i possibles pujades de corrent al microcontrolador. Quan el pic dona una sortida de 5v (com ja sabem, un 1 lògic) s’obre el circuit independent de 220V i l’actuador s’acciona, donant així la moneda adient en aquest cas.

2.2.8 Testejadors dels actuadors

20


Màquina expenedora de productes

Un conjunt de polsadors (fig.24) connectats per un costat en paral·lel amb la sortida de cada relé, i per l’altra, al corrent altern, serveixen tant per provar els actuadors com per netejar de canvi la màquina.

Fig.24

2.2.9 Pantalla Una pantalla LCD de 20x4 caràcters (fig.25) controlada pel PIC s’encarrega de mostrarnos la informació de la venda.

Fig.25 (vistu es el meu sobrenom)

La pantalla te diferents connexions, 4 van al pic i s’encarreguen d’escriure a la pantalla i esborrar-la. Un conjunt de quatre , van dos a dos cap a l’alimentació, un per als caràcters i l’altre per la retroiluminació i funciona també a cinc volts. La resta dels contactes van directament a massa (0v) tret d’un que també va a massa però amb un potenciòmetre i serveix per regular el contrast. 2.10 Font d’alimentació

21


Màquina expenedora de productes

Per alimentar els elements que funcionen a 5 volts (tots tret dels actuadors) utilitzo una font d’alimentació reciclada d’un vell ordinador (fig.26). Per que la font s’engegui faig un pont entre el cable verd del molex1 de 16 pins i un negre qualsevol de la font que son els de massa. Els cables vermells de la font donen tots 5 volts. Fig.26

3. Recerca i preu del material Part Mecànica: Tot el material és

reciclat o dotació del centre tret dels tubs de

metacrilat que van ser comprats a una botiga especialitzada. Part Electrònica: Tot el material és reciclat o dotació del centre excepte dels actuadors (timbres), que són comprats a Leroy Merlin, i el PIC i la Pantalla, comprats a Ebay al venedor hein2312. Taula amb el preu aproximat (només material no reciclat) : Nom

Quantitat

Preu aproximat

Preu aproximat total (€) 5,26 €*

PIC 18f452

1

unitari (€) 5,26 €

Actuador ULN2003A

6 2

8,16 € 3€

49 €* 6€

Motor DC 5V LCD

3 1

3€ 9,85 €

9€ 9,85 €*

Tubs de metacrilat

2

15 €

30 €

Resta de material

30 €

no reciclat Total

138€

4. Conclusió i valoració personal

1

Tipus de connector que es troba en les fonts d’alimentació dels ordinadors. * Preu exacte

22


Màquina expenedora de productes

El projecte ha finalitzat amb moltes hores al damunt . Segurament en aquest dossier no es veu reflectit tot el treball que m’ha portat no sols la construcció de la maqueta, sinó també l´autoaprenentatge en temes d’electrònica i programació, el disseny i els plànols, les diferents simulacions i proves realitzades, així com el haver-m’hi buscat la vida per trobar molts del elements que ara es poden veure. La construcció ha sigut complicada per que no he tingut màniga llarga per obtenir aparells capaços de fer les funcions que jo requeria, i he agut d’utilitzar molt enginy per donar-li funcions noves a elements que per si mateixos no eren capaços de realitzar. Crec que aquest treball m’ha realitzat mòlt i he aconseguit veure algunes de les meves possibilitats quan hem plantejo alguna cosa, que sol ser molt poques vegades.

5. Propostes de millora Algunes de les millores que se m’hi ocorreixen són, per un costat, una millora substancial en la quantitat d’informació extreta per pantalla, per exemple, mostrant en tot moment la quantitat de diners que falta per a pagar un producte concret, i per altre banda les millores que es podrien trobar en la substitució del materials utilitzats per altres més cars i eficients, creats amb una finalitat especifica.

6. Programes utilitzats •

MikroC – Per a la escriptura i compilació del codi

IC-prog – Per gravar el codi al PIC

Proteus – Per simular el circuit

Autoscketch – Per construir els plànols

Microsoft Word – Per escriure aquest dossier

7. Agraïments

23


Màquina expenedora de productes

Daniel Cueva, professor d’electrotècnia. IES Can Mas, Ripollet.

Jordi Polo, professor de tecnologia. IES Can Mas, Ripollet.

Als meus companys de taller Diego i Sergio, per la seva ajuda en moments puntuals.

A les institucion Wikimedia Fundation i Creative Commons.

8. Bibliografia •

Consulta dels datasheets1 <http://www.alldatasheet.com>

Consulta sobre aspectes de programació i electrònica de PICs <http://www.jvmbots.com/viewtopic.php?t=18>

Recerca d’imatges <http://flickrcc.com>

Recerca d’imatges <http://search.creativecommons.org>

Recerca d’informació <http://en.wikipedia.org> i <http://es.wikipedia.org>

Creació i consulta dels diagrames <http://www.drawanywhere.com>

9. Annexos

1

Full amb dades sobre un aparell especific.

24


Màquina expenedora de productes

9.1 Codi font del programa “la maquina expenedora”

void devolucion(void);

Prototip de funció que no torna cap valor

char *text = "Benvingut" ; char *textt = "a la Maquina"; char *texttt= "expenedora"; char *textv = "***Vistu***"; char text2[40]; char *euro = " euros"; char *texti = "cantidad introduida";

Cadenes de caràcters

char *textp1 = "introdueixi" ; char *textp11 = "mes diners (0,55)" ; char *textp2 = "mes diners (1,20)"; char *textp3 = "mes diners (2,50)"; char *textpro = "Processant comanda"; char *textdev = "La devolucio es de"; long cantidad = 0; float contador = 0.00;

Variable de tipus enter llarg Variable de tipus real

void main() {

Funció principal

ADCON1=0xFF; TRISC = 0xFF; PORTE.F2 = 1; TRISD = 0; PORTD = 0; TRISA.F0 = 0; TRISA.F1 = 0; TRISA.F2 = 0; TRISA.F3 = 0; TRISA.F4 = 1; TRISA.F5 = 1; TRISE.F0 = 1; TRISE.F1 = 1; TRISB.F0 = 1; TRISB.F1 = 1; PORTA.F0 = 0; PORTA.F1 = 0; PORTA.F2 = 0;

Tots els ports com entrades i sortides digitals Port C com entrada Port E pin 2 com entrada Port D com sortida Pin 0 al 3 de port A sortides

Pin 4 y 5 del port A entrades Pin 0 i 1 del port E entrades

Reset de tots els pins

25


Màquina expenedora de productes

PORTA.F3 = 0; PORTA.F4 = 0; PORTA.F5 = 0; PORTE.F0 = 0; PORTE.F1 = 0; Lcd_Init(&PORTB); Lcd_Cmd(LCD_CLEAR); Lcd_Cmd(LCD_CURSOR_OFF); Lcd_Out(1,6, text); Lcd_Out(2,5, textt); Lcd_Out(3,6, texttt); Lcd_Out(4,6, textv);

while (1){

Inicia el LCD en el port B Neteja el display Apaga cursor Imprimeix el text, primera línea, primera columna

Bucle infinit

//Entrada de monedes

if (PORTC.F2){ Delay_ms(100); contador += 0.05; cantidad += 5; sprintf(text2, "%2.2f", contador) ; Lcd_Cmd(LCD_CLEAR) ; strcat(text2, euro); Lcd_Out(1,1, texti); Lcd_Out(2,6, text2);}

Si el fototransistor de 5 cèntims dona senyal Retràs d’1 dècima de segon Adició de 0,05 a la variable real contador. Adició de 5 a la variable enter cantidad. Pas de tipus “float” a “string” Concatenació de text2 i euro

else if (PORTC.F3){ Delay_ms(100); contador += 0.10; cantidad += 10; sprintf(text2, "%2.2f", contador) ; Lcd_Cmd(LCD_CLEAR) ; strcat(text2, euro); Lcd_Out(1,1, texti); Lcd_Out(2,6, text2);} else if (PORTC.F4){ Delay_ms(100); contador += 0.20; cantidad += 20; sprintf(text2, "%2.2f", contador) ;

26


Màquina expenedora de productes

Lcd_Cmd(LCD_CLEAR) ; strcat(text2, euro); Lcd_Out(1,1, texti); Lcd_Out(2,6, text2);} else if (PORTC.F5){ Delay_ms(100); contador += 0.50; cantidad += 50; sprintf(text2, "%2.2f", contador) ; Lcd_Cmd(LCD_CLEAR) ; strcat(text2, euro); Lcd_Out(1,1, texti); Lcd_Out(2,6, text2);} else if (PORTC.F6){ Delay_ms(100); contador += 1.00; cantidad += 100; sprintf(text2, "%2.2f", contador) ; Lcd_Cmd(LCD_CLEAR) ; strcat(text2, euro); Lcd_Out(1,1, texti); Lcd_Out(2,6, text2);} else if (PORTC.F7){ Delay_ms(100); contador += 2.00; cantidad += 200; sprintf(text2, "%2.2f", contador) ; Lcd_Cmd(LCD_CLEAR) ; strcat(text2, euro); Lcd_Out(1,1, texti); Lcd_Out(2,6, text2);} //Canvi else if (PORTE.F2) devolucion();

Si prems polsador de devolució

//Comandes else if (PORTE.F1){

Si prems producte 1

if(cantidad == 0){ Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,4, textp1); Lcd_Out(2,1, textp11); Delay_ms(2000); Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,6, text);

Si la quantitat es 0 Mostra el preu del producte

27


Màquina expenedora de productes

Lcd_Out(2,5, textt); Lcd_Out(3,6, texttt); Lcd_Out(4,6, textv); } else if(cantidad < 55){ Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,4, textp1); Lcd_Out(2,1, textp11); Delay_ms(2000); Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1, texti); Lcd_Out(2, 6, text2);}

Si la quantitat és mes baixa de 55

else if(cantidad >= 55) { Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,1, textpro); cantidad -= 55; contador -= 0.55; PORTA.F0 = 1; Delay_ms(250); PORTA.F0 = 0; while(PORTA.F4 == 0){ PORTA.F0 = 1;} PORTA.F0 = 0; Delay_ms(1000); devolucion();}}

Si la quantitat es major o igual a 55

else if (PORTE.F0){

Producte 2

Mostra el preu del producte

Resta 0,55 i 55 a les variables Engega el motor 250 milisegons Mentre no es premi el final de cursa El motor segueix girant. Truca a la funció devolució

if(cantidad == 0){ Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,4, textp1); Lcd_Out(2,1, textp2); Delay_ms(2000); Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,6, text); Lcd_Out(2,5, textt); Lcd_Out(3,6, texttt); Lcd_Out(4,6, textv); } else if(cantidad < 120){ Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,4, textp1); Lcd_Out(2,1, textp2); Delay_ms(2000); Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1, texti); Lcd_Out(2, 6, text2);} else if(cantidad >= 120) {

28


Màquina expenedora de productes

Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,1, textpro); cantidad -= 120; contador -= 1.20; PORTA.F1 = 1; Delay_ms(250); PORTA.F1 = 0; while(PORTB.F0 == 0){ PORTA.F1 = 1;} PORTA.F0 = 0; Delay_ms(1000); devolucion();}} else if (PORTA.F5){

Producte 3

if(cantidad == 0){ Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,4, textp1); Lcd_Out(2,1, textp3); Delay_ms(2000); Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,6, text); Lcd_Out(2,5, textt); Lcd_Out(3,6, texttt); Lcd_Out(4,6, textv); } else if(cantidad < 250){ Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,4, textp1); Lcd_Out(2,1, textp3); Delay_ms(2000); Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1, texti); Lcd_Out(2, 6, text2);} else if(cantidad >= 250) { Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,1, textpro); cantidad -= 250; contador -= 2.50; PORTA.F2 = 1; Delay_ms(250); PORTA.F2 = 0; while(PORTB.F1 == 0){ PORTA.F2 = 1;} PORTA.F2 = 0; Delay_ms(1000); devolucion();} }

29


Màquina expenedora de productes

}} void devolucion(void) {

Funció devolució (si es truca ve aquí)

while(cantidad > 0){

Bucle mentre hi hagi diners

Lcd_Cmd(LCD_CLEAR) ; sprintf(text2, "%2.2f", contador) ; strcat(text2, euro); Lcd_Out(1,1, textdev); Lcd_Out(2,6, text2); if(cantidad >= 200){ while(cantidad >= 200){ PORTD.F7 = 1; Delay_ms(500) ; //0.5 sec PORTD.F7 = 0; Delay_ms(500); cantidad -= 200;} }

Tornar 2 €

else if(cantidad >= 100){ while(cantidad >= 100){ PORTD.F6 = 1; Delay_ms(500); PORTD.F6 = 0; Delay_ms(500); cantidad -= 100; }}

Tornar 1 €

else if(cantidad >= 50){ while(cantidad >= 50){ PORTD.F5 = 1; Delay_ms(500) ; //0.1 sec PORTD.F5 = 0; Delay_ms(500); cantidad -= 50; }}

Tornar 0.50 €

else if(cantidad >= 20){ while(cantidad >= 20){ PORTD.F4 = 1; Delay_ms(500) ; //0.1 sec PORTD.F4 = 0; Delay_ms(500); cantidad -= 20; }}

Tornar 0.20 €

30


Màquina expenedora de productes

else if(cantidad >= 10){ while(cantidad >= 10){ PORTD.F3 = 1; Delay_ms(500) ; //0.1 sec PORTD.F3 = 0; Delay_ms(500); cantidad -= 10; }} else if(cantidad >= 5){ while(cantidad >= 5){ PORTD.F2 = 1; Delay_ms(500) ; //0.1 sec PORTD.F2 = 0; Delay_ms(500); cantidad -= 5; }} }

Tornar 0.10 €

Tornar 0.05 €

Lcd_Cmd(LCD_CLEAR) ; Lcd_Out(1,6, text); Lcd_Out(2,5, textt); Lcd_Out(3,6, texttt); Lcd_Out(4,6, textv); contador = 0.00; }

Contador torna a 0

31


Màquina Expenedora