Upload
marti-serra-vivancos
View
220
Download
3
Embed Size (px)
DESCRIPTION
CodePi tutorial.
Citation preview
Apregraven a programar amb la CodePiUnitat didagravectica creada per a intruduir la programacioacute a lrsquoaula a partir del micro-ordinador Raspberry Pi i drsquouns tutorials que ens permetran gestionar petits circuits electrogravenics de manera amena i entenedora
Gabriel Esteban GulloacutenRamon Fernaacutendez MirMartiacute Serra Vivancos
Iacutendex
1 Quegrave es la Raspberry Pi
2 Per a quegrave la farem servir
3 Quegrave necessitarem per a muntar-la
4 Apregraven a muntar la caixa de la CodePi
5 Afegim un sistema operatiu a la CodePi
6 Primer inici i configuracioacute de la CodePi
7 Pragravectiques
8 Vols saber-ne meacutes
9 Glos
3
4
5
6
9
13
16
32
34
3
1 Quegrave eacutes la Raspberry PiLa RaspberryPi eacutes una placa computadora de baix cost feta a partir de components per a teleacutemogravebils eacutes a dir un petit ordinador amb les mateixes prestacions drsquoun smartphone de gama mitjana i amb sistema operatiu de base Linux
La Raspberry Pi va neacuteixer a Anglaterra el 2009 com un projecte amb lrsquoobjectiu de crear un ordinador de molt baix cost (30$) per a popularitzar la programacioacute entre els joves
Des del seu llanccedilament la fundacioacute Raspber-ryPi ha venut meacutes drsquoun milioacute de copies de la seva petita placa i srsquoha convertit en un dels siacutembols meacutes representatius de lrsquoelectrogravenica actual La comunitat drsquoaficionats a lrsquoelectrograveni-ca i la programacioacute ha acollit molt beacute a aquest producte i es poden trobar infinitats de tuto-rials projectes i drsquoaltres curiositats a la xarxa
4
2 Per a quegrave la utilitzaremUtilitzarem la RaspberryPi per a crear un ordi-nador amb el qual aprendrem electrogravenica i pro-gramacioacute A traveacutes de petits programes amb llenguatge C podrem gestionar els ports de la GPIO que encendran i apagaran LEDs lle-giran els estats drsquointerruptors i LDRs etc
Tot aixograve ho farem drsquouna manera fagravecil i entretin-guda a partir de diferents tutorials ordenats de menor a major dificultat comenccedilant per prin-cipis bagravesics de lrsquoelectrogravenica i la programacioacute fins a fer programes complexos per gestion-ar diferents LEDs segons diferents variables
Ara beacute abans de comenccedilar amb lrsquoelectrogravenica pu-rament hem de muntar la caixa que ens serviragrave per transportar la Raspberry Pi el teclat el ratoliacute la protoboard els components electrogravenics etc
5
3 Quegrave necessitarem per a muntar-laAquests soacuten els materials que necessitarem per muntar la CodePi Per una banda tenim les fus-tes i drsquoaltres eines que ens serviran per construir la caixa per transportar la CodePi
MaterialbullFusta de 320x320x6 (6 recomanat perograve pot ser meacutes gruixut)bullClaus bullFrontisses
EinesbullMartellbullLlima bullSerra per a fusta (manual o elegravectrica)bullCargol de banc
Per altra banda tambeacute necessitarem tots els components electrogravenics eines per portar a terme els tutorials i com no la Raspberry Pi Aixograve eacutes tot el que necesitarem
bullRaspberry Pi model BbullTargeta SDHC de com a miacutenim 4GB Classe 4 bullTeclatbullRatoliacute convencionalbullProtoboardbullCables electrogravenicsbullLEDsbullResistegravencies 180 i 10K ohmsbullPolsadors
3euro1euro1euro
33euro7euro5euro5euro4euro3euro1euro1euro1euro
Preu total 61euro
6
4 Apregraven a muntar la caixa de la CodePi
Abans de comenccedilar a tallar la fusta prepararem el seguumlent esquema en el nostre tauloacute de fusta A la part del centre deixarem un espai de 6 mm per poder clavar beacute una costat sobre un costat per acabar tenint una caixa de 160mm x 160mm
Amb un regle i un llapis marquem les liacutenies per on tallarem el tauloacute seguint lrsquoesquema anterior
A continuacioacute tallar el tauloacute amb una serra elegravec-trica En cas de no tenir-ne srsquohauragrave de posar la fullola en un cargol de banc i tallar-la amb una ser-ra manual
No passa res si la fusta no queda del tot ben tal-lada ja que despreacutes podrem retocar les imperfec-cions llimant-les i meacutes endavant posant massilla
7
Atencioacute Eacutes altament recomanable utilitzar guants i ulleres protectores durant tot el proceacutes de manip-ulacioacute de la fusta
Els guants ens protegiran de possibles talls ras-cades o drsquoaltres lesions a les mans Les ulleres impediran que petites estelles de la fusta amb que estiguem treballant vagin a parar als ulls
Agrupar les quatre parts que faran de parets de la caixa en un cargol de banc Cal assegurar-se que per la part inferior les fustes estan igualades Eacutes recomanable posar dues fustes entre la boca del cargol i el tauloacute per impedir que aquesta es pugui malmetre a causa de la pressioacute
Llimar les fustes verticalment ja que drsquoaquesta manera es treballa sobre meacutes superfiacutecie Reco-manem utilitzar una llima amb fulla molt rugosa per poder realitzar el treball meacutes ragravepidament Llimar tambeacute les dues peces que faran de tapa i contra tapa
Per millorar les llimadures utilitzar una llima amb la fulla meacutes fina o un paper de vidre
8
Un cop les fustes estiguin ben llimades utilitzar els claus per collar les parets Cal prestar atencioacute en la posicioacute dels claus ja que la fusta eacutes molt prima i es poden torccedilar Aquest hauria de ser el resultat final
Seguint el mateix proceacutes clavar la fullola que faragrave de tapa inferior Cal vigilar a on es posen els claus ja que pot ser que es toquin amb els que hem po-sat anteriorment
Agafar les frontisses i clavar-les amb dos claus pe-tits a la fullola que faragrave de tapa superior Despreacutes clavar els dos forats restants a una de les parets aquesta faragrave de part posterior de la CodePi
Recomanacioacute Si volem que la fusta ens duri du-rant meacutes temps eacutes recomanable envernissar la caixa amb un verniacutes per a fustes
9
Per descarregar Raspbian el sistema operatiu que utilitza la CodePi haurem drsquoobrir una nova fi-nestra del navegador i anar a la web de Raspberry Pi httpwwwraspberrypiorg
Eacutes recomanable fer aquest proceacutes al mateix ordi-nador en el que es procediragrave a instalmiddotlar Raspbian a la targeta SD
Recorda que aquest ordinador ha de tenir lector de targetes o un adaptador USB connectatDespreacutes haurem drsquoanar a lrsquoapartat de descagraverreg-ues on trobarem tots els enllaccedilos que necessitem per descarregar el sistema operatiu de la Rasp-berry Pi
5 Afegim un sistema ope- ratiu a la CodePi
51 Descarregar Raspbian
Lrsquouacuteltim pas per descarregar Raspbian eacutes clicar sobre lrsquoenllaccedil on posa Direct Download Es reco-mana realitzar aquest proceacutes en un lloc amb una connexioacute estable i ragravepida ja que srsquoha de descar-regar molta informacioacute
Despreacutes de clicar aquest enllaccedil sersquons obriragrave una nova finestra i automagraveticament Raspbian comenccedilaragrave a descarregar-se La descagraverrega pot trigar entre 5 i 15 minuts depenent de la teva con-nexioacute a internet Ja podem tancar aquesta finestra i continuar cap al pas seguumlent
10
52 Instalmiddotlar RaspbianUna vegada que ja tenim descarregada lrsquouacuteltima versioacute de Raspbian segons el sistema opera-tiu des del que vulguem instalmiddotlar-lo haurem de seguir uns passos diferents per completar la in-stalmiddotlacioacute
Windows
Per instalmiddotlar Raspbian amb Windows haurem de descarregar i instalmiddotlar Win32DiskImager Abans de continuar amb la instalmiddotlacioacute haurem de de-scomprimir el fitxer que ens hem descarregat Per descomprimir-lo utilitzarem un compressor drsquoarxius com (7zip) Clicant amb el botoacute dret so-bre aquest arxiu i clicarem on posa descomprimir aquiacute o buscarem el nom del nostre descompres-sor i despreacutes buscarem aquesta opcioacute
Ara introduirem la targeta de memograveria que vul-guem utilitzar a lrsquoentrada per targetes del nostre ordinador o a lrsquoadaptador corresponent
A continuacioacute iniciarem el programa i clicarem sobre el logo de la carpeta i escollirem el lloc on hem descomprimit el contingut del zip buscarem lrsquoar-xiu amb extensioacute img i acceptarem el diagraveleg Meacutes tard escollirem en quin dispositiu volem in-stalmiddotlar el sistema operatiu aquest eacutes un punt on hem drsquoestar segurs drsquoon estem instalmiddotlant aquests arxius ja que si lrsquoestigueacutessim instalmiddotlant en una destinacioacute diferent podriacuteem perdre totes les dades de lrsquoordinador Per saber a quin dispositiu hem drsquoinstalmiddotlar Raspbian obrirem ldquoEl Meu Ordinadorrdquo i buscarem la targeta de memograveria ens fixarem en quina lletra hi ha al final del nom aquesta seragrave la mateixa que haurem de posar al programaQuan ja haguem inserit aquests dos paragravemetres al programa clicarem sobre el botoacute de Write i es comenccedilara a instalmiddotlar el sistema operatiu
11
Linux
Per instalmiddotlar Raspbian des drsquoun sistema operatiu Linux utilitzarem lrsquoordre dd al terminal Abans de fer servir aquest ordre haurem de descomprimir el contingut del zip a la carpeta que vulguem (es recomana utilitzar la carpeta personal homeusu-ari)
Un cop tenim descomprimit el contingut del zip obrirem una sessioacute al terminal i escriurem
cd ~
df -h
umount devsdd1
sudo dd bs=4M if=~2013-02-09-wheezy-raspbianimg of=devsdd
Anirem a la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~)
Buscarem la targeta sd i el seu nom a la seguumlent llista ens haurem drsquoapuntar el que posi a la prime-ra columna com devsdd (sense el numero) Assegureu-vos que aquest eacutes el dispositiu on vo-leu instalmiddotlar el Raspbian
Abans drsquoinstalmiddotlar Raspbian haurem de des-muntar les particions corresponents a la targeta SD utilitzant lrsquoordre umount en el cas de tenir meacutes drsquouna particioacute haurem drsquoexecutar aquesta ordre meacutes drsquouna vegada
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom del arxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
12
Mac OS X
Per instalmiddotlar Raspbian a Mac OS X tambeacute utilitza-rem lrsquoordre dd pero el funcionament per buscar en quin disc volem instalmiddotlar raspbian eacutes diferent Recomanem extreure el contingut del zip a la car-peta Usersusuari
Comenccedilarem buscant la targeta on volem instalmiddotlar raspbian executant la seguumlent ordre i copiarem el disk4 (sense agafar la particioacute)
Desmuntarem el disk en quumlestioacute
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom de lrsquoarxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
diskutil list
diskutil unmountDisk devdisk4
sudo dd bs=1m if=~2013-02-09-wheezy-raspbianimg of=devsdb
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
Iacutendex
1 Quegrave es la Raspberry Pi
2 Per a quegrave la farem servir
3 Quegrave necessitarem per a muntar-la
4 Apregraven a muntar la caixa de la CodePi
5 Afegim un sistema operatiu a la CodePi
6 Primer inici i configuracioacute de la CodePi
7 Pragravectiques
8 Vols saber-ne meacutes
9 Glos
3
4
5
6
9
13
16
32
34
3
1 Quegrave eacutes la Raspberry PiLa RaspberryPi eacutes una placa computadora de baix cost feta a partir de components per a teleacutemogravebils eacutes a dir un petit ordinador amb les mateixes prestacions drsquoun smartphone de gama mitjana i amb sistema operatiu de base Linux
La Raspberry Pi va neacuteixer a Anglaterra el 2009 com un projecte amb lrsquoobjectiu de crear un ordinador de molt baix cost (30$) per a popularitzar la programacioacute entre els joves
Des del seu llanccedilament la fundacioacute Raspber-ryPi ha venut meacutes drsquoun milioacute de copies de la seva petita placa i srsquoha convertit en un dels siacutembols meacutes representatius de lrsquoelectrogravenica actual La comunitat drsquoaficionats a lrsquoelectrograveni-ca i la programacioacute ha acollit molt beacute a aquest producte i es poden trobar infinitats de tuto-rials projectes i drsquoaltres curiositats a la xarxa
4
2 Per a quegrave la utilitzaremUtilitzarem la RaspberryPi per a crear un ordi-nador amb el qual aprendrem electrogravenica i pro-gramacioacute A traveacutes de petits programes amb llenguatge C podrem gestionar els ports de la GPIO que encendran i apagaran LEDs lle-giran els estats drsquointerruptors i LDRs etc
Tot aixograve ho farem drsquouna manera fagravecil i entretin-guda a partir de diferents tutorials ordenats de menor a major dificultat comenccedilant per prin-cipis bagravesics de lrsquoelectrogravenica i la programacioacute fins a fer programes complexos per gestion-ar diferents LEDs segons diferents variables
Ara beacute abans de comenccedilar amb lrsquoelectrogravenica pu-rament hem de muntar la caixa que ens serviragrave per transportar la Raspberry Pi el teclat el ratoliacute la protoboard els components electrogravenics etc
5
3 Quegrave necessitarem per a muntar-laAquests soacuten els materials que necessitarem per muntar la CodePi Per una banda tenim les fus-tes i drsquoaltres eines que ens serviran per construir la caixa per transportar la CodePi
MaterialbullFusta de 320x320x6 (6 recomanat perograve pot ser meacutes gruixut)bullClaus bullFrontisses
EinesbullMartellbullLlima bullSerra per a fusta (manual o elegravectrica)bullCargol de banc
Per altra banda tambeacute necessitarem tots els components electrogravenics eines per portar a terme els tutorials i com no la Raspberry Pi Aixograve eacutes tot el que necesitarem
bullRaspberry Pi model BbullTargeta SDHC de com a miacutenim 4GB Classe 4 bullTeclatbullRatoliacute convencionalbullProtoboardbullCables electrogravenicsbullLEDsbullResistegravencies 180 i 10K ohmsbullPolsadors
3euro1euro1euro
33euro7euro5euro5euro4euro3euro1euro1euro1euro
Preu total 61euro
6
4 Apregraven a muntar la caixa de la CodePi
Abans de comenccedilar a tallar la fusta prepararem el seguumlent esquema en el nostre tauloacute de fusta A la part del centre deixarem un espai de 6 mm per poder clavar beacute una costat sobre un costat per acabar tenint una caixa de 160mm x 160mm
Amb un regle i un llapis marquem les liacutenies per on tallarem el tauloacute seguint lrsquoesquema anterior
A continuacioacute tallar el tauloacute amb una serra elegravec-trica En cas de no tenir-ne srsquohauragrave de posar la fullola en un cargol de banc i tallar-la amb una ser-ra manual
No passa res si la fusta no queda del tot ben tal-lada ja que despreacutes podrem retocar les imperfec-cions llimant-les i meacutes endavant posant massilla
7
Atencioacute Eacutes altament recomanable utilitzar guants i ulleres protectores durant tot el proceacutes de manip-ulacioacute de la fusta
Els guants ens protegiran de possibles talls ras-cades o drsquoaltres lesions a les mans Les ulleres impediran que petites estelles de la fusta amb que estiguem treballant vagin a parar als ulls
Agrupar les quatre parts que faran de parets de la caixa en un cargol de banc Cal assegurar-se que per la part inferior les fustes estan igualades Eacutes recomanable posar dues fustes entre la boca del cargol i el tauloacute per impedir que aquesta es pugui malmetre a causa de la pressioacute
Llimar les fustes verticalment ja que drsquoaquesta manera es treballa sobre meacutes superfiacutecie Reco-manem utilitzar una llima amb fulla molt rugosa per poder realitzar el treball meacutes ragravepidament Llimar tambeacute les dues peces que faran de tapa i contra tapa
Per millorar les llimadures utilitzar una llima amb la fulla meacutes fina o un paper de vidre
8
Un cop les fustes estiguin ben llimades utilitzar els claus per collar les parets Cal prestar atencioacute en la posicioacute dels claus ja que la fusta eacutes molt prima i es poden torccedilar Aquest hauria de ser el resultat final
Seguint el mateix proceacutes clavar la fullola que faragrave de tapa inferior Cal vigilar a on es posen els claus ja que pot ser que es toquin amb els que hem po-sat anteriorment
Agafar les frontisses i clavar-les amb dos claus pe-tits a la fullola que faragrave de tapa superior Despreacutes clavar els dos forats restants a una de les parets aquesta faragrave de part posterior de la CodePi
Recomanacioacute Si volem que la fusta ens duri du-rant meacutes temps eacutes recomanable envernissar la caixa amb un verniacutes per a fustes
9
Per descarregar Raspbian el sistema operatiu que utilitza la CodePi haurem drsquoobrir una nova fi-nestra del navegador i anar a la web de Raspberry Pi httpwwwraspberrypiorg
Eacutes recomanable fer aquest proceacutes al mateix ordi-nador en el que es procediragrave a instalmiddotlar Raspbian a la targeta SD
Recorda que aquest ordinador ha de tenir lector de targetes o un adaptador USB connectatDespreacutes haurem drsquoanar a lrsquoapartat de descagraverreg-ues on trobarem tots els enllaccedilos que necessitem per descarregar el sistema operatiu de la Rasp-berry Pi
5 Afegim un sistema ope- ratiu a la CodePi
51 Descarregar Raspbian
Lrsquouacuteltim pas per descarregar Raspbian eacutes clicar sobre lrsquoenllaccedil on posa Direct Download Es reco-mana realitzar aquest proceacutes en un lloc amb una connexioacute estable i ragravepida ja que srsquoha de descar-regar molta informacioacute
Despreacutes de clicar aquest enllaccedil sersquons obriragrave una nova finestra i automagraveticament Raspbian comenccedilaragrave a descarregar-se La descagraverrega pot trigar entre 5 i 15 minuts depenent de la teva con-nexioacute a internet Ja podem tancar aquesta finestra i continuar cap al pas seguumlent
10
52 Instalmiddotlar RaspbianUna vegada que ja tenim descarregada lrsquouacuteltima versioacute de Raspbian segons el sistema opera-tiu des del que vulguem instalmiddotlar-lo haurem de seguir uns passos diferents per completar la in-stalmiddotlacioacute
Windows
Per instalmiddotlar Raspbian amb Windows haurem de descarregar i instalmiddotlar Win32DiskImager Abans de continuar amb la instalmiddotlacioacute haurem de de-scomprimir el fitxer que ens hem descarregat Per descomprimir-lo utilitzarem un compressor drsquoarxius com (7zip) Clicant amb el botoacute dret so-bre aquest arxiu i clicarem on posa descomprimir aquiacute o buscarem el nom del nostre descompres-sor i despreacutes buscarem aquesta opcioacute
Ara introduirem la targeta de memograveria que vul-guem utilitzar a lrsquoentrada per targetes del nostre ordinador o a lrsquoadaptador corresponent
A continuacioacute iniciarem el programa i clicarem sobre el logo de la carpeta i escollirem el lloc on hem descomprimit el contingut del zip buscarem lrsquoar-xiu amb extensioacute img i acceptarem el diagraveleg Meacutes tard escollirem en quin dispositiu volem in-stalmiddotlar el sistema operatiu aquest eacutes un punt on hem drsquoestar segurs drsquoon estem instalmiddotlant aquests arxius ja que si lrsquoestigueacutessim instalmiddotlant en una destinacioacute diferent podriacuteem perdre totes les dades de lrsquoordinador Per saber a quin dispositiu hem drsquoinstalmiddotlar Raspbian obrirem ldquoEl Meu Ordinadorrdquo i buscarem la targeta de memograveria ens fixarem en quina lletra hi ha al final del nom aquesta seragrave la mateixa que haurem de posar al programaQuan ja haguem inserit aquests dos paragravemetres al programa clicarem sobre el botoacute de Write i es comenccedilara a instalmiddotlar el sistema operatiu
11
Linux
Per instalmiddotlar Raspbian des drsquoun sistema operatiu Linux utilitzarem lrsquoordre dd al terminal Abans de fer servir aquest ordre haurem de descomprimir el contingut del zip a la carpeta que vulguem (es recomana utilitzar la carpeta personal homeusu-ari)
Un cop tenim descomprimit el contingut del zip obrirem una sessioacute al terminal i escriurem
cd ~
df -h
umount devsdd1
sudo dd bs=4M if=~2013-02-09-wheezy-raspbianimg of=devsdd
Anirem a la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~)
Buscarem la targeta sd i el seu nom a la seguumlent llista ens haurem drsquoapuntar el que posi a la prime-ra columna com devsdd (sense el numero) Assegureu-vos que aquest eacutes el dispositiu on vo-leu instalmiddotlar el Raspbian
Abans drsquoinstalmiddotlar Raspbian haurem de des-muntar les particions corresponents a la targeta SD utilitzant lrsquoordre umount en el cas de tenir meacutes drsquouna particioacute haurem drsquoexecutar aquesta ordre meacutes drsquouna vegada
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom del arxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
12
Mac OS X
Per instalmiddotlar Raspbian a Mac OS X tambeacute utilitza-rem lrsquoordre dd pero el funcionament per buscar en quin disc volem instalmiddotlar raspbian eacutes diferent Recomanem extreure el contingut del zip a la car-peta Usersusuari
Comenccedilarem buscant la targeta on volem instalmiddotlar raspbian executant la seguumlent ordre i copiarem el disk4 (sense agafar la particioacute)
Desmuntarem el disk en quumlestioacute
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom de lrsquoarxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
diskutil list
diskutil unmountDisk devdisk4
sudo dd bs=1m if=~2013-02-09-wheezy-raspbianimg of=devsdb
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
3
1 Quegrave eacutes la Raspberry PiLa RaspberryPi eacutes una placa computadora de baix cost feta a partir de components per a teleacutemogravebils eacutes a dir un petit ordinador amb les mateixes prestacions drsquoun smartphone de gama mitjana i amb sistema operatiu de base Linux
La Raspberry Pi va neacuteixer a Anglaterra el 2009 com un projecte amb lrsquoobjectiu de crear un ordinador de molt baix cost (30$) per a popularitzar la programacioacute entre els joves
Des del seu llanccedilament la fundacioacute Raspber-ryPi ha venut meacutes drsquoun milioacute de copies de la seva petita placa i srsquoha convertit en un dels siacutembols meacutes representatius de lrsquoelectrogravenica actual La comunitat drsquoaficionats a lrsquoelectrograveni-ca i la programacioacute ha acollit molt beacute a aquest producte i es poden trobar infinitats de tuto-rials projectes i drsquoaltres curiositats a la xarxa
4
2 Per a quegrave la utilitzaremUtilitzarem la RaspberryPi per a crear un ordi-nador amb el qual aprendrem electrogravenica i pro-gramacioacute A traveacutes de petits programes amb llenguatge C podrem gestionar els ports de la GPIO que encendran i apagaran LEDs lle-giran els estats drsquointerruptors i LDRs etc
Tot aixograve ho farem drsquouna manera fagravecil i entretin-guda a partir de diferents tutorials ordenats de menor a major dificultat comenccedilant per prin-cipis bagravesics de lrsquoelectrogravenica i la programacioacute fins a fer programes complexos per gestion-ar diferents LEDs segons diferents variables
Ara beacute abans de comenccedilar amb lrsquoelectrogravenica pu-rament hem de muntar la caixa que ens serviragrave per transportar la Raspberry Pi el teclat el ratoliacute la protoboard els components electrogravenics etc
5
3 Quegrave necessitarem per a muntar-laAquests soacuten els materials que necessitarem per muntar la CodePi Per una banda tenim les fus-tes i drsquoaltres eines que ens serviran per construir la caixa per transportar la CodePi
MaterialbullFusta de 320x320x6 (6 recomanat perograve pot ser meacutes gruixut)bullClaus bullFrontisses
EinesbullMartellbullLlima bullSerra per a fusta (manual o elegravectrica)bullCargol de banc
Per altra banda tambeacute necessitarem tots els components electrogravenics eines per portar a terme els tutorials i com no la Raspberry Pi Aixograve eacutes tot el que necesitarem
bullRaspberry Pi model BbullTargeta SDHC de com a miacutenim 4GB Classe 4 bullTeclatbullRatoliacute convencionalbullProtoboardbullCables electrogravenicsbullLEDsbullResistegravencies 180 i 10K ohmsbullPolsadors
3euro1euro1euro
33euro7euro5euro5euro4euro3euro1euro1euro1euro
Preu total 61euro
6
4 Apregraven a muntar la caixa de la CodePi
Abans de comenccedilar a tallar la fusta prepararem el seguumlent esquema en el nostre tauloacute de fusta A la part del centre deixarem un espai de 6 mm per poder clavar beacute una costat sobre un costat per acabar tenint una caixa de 160mm x 160mm
Amb un regle i un llapis marquem les liacutenies per on tallarem el tauloacute seguint lrsquoesquema anterior
A continuacioacute tallar el tauloacute amb una serra elegravec-trica En cas de no tenir-ne srsquohauragrave de posar la fullola en un cargol de banc i tallar-la amb una ser-ra manual
No passa res si la fusta no queda del tot ben tal-lada ja que despreacutes podrem retocar les imperfec-cions llimant-les i meacutes endavant posant massilla
7
Atencioacute Eacutes altament recomanable utilitzar guants i ulleres protectores durant tot el proceacutes de manip-ulacioacute de la fusta
Els guants ens protegiran de possibles talls ras-cades o drsquoaltres lesions a les mans Les ulleres impediran que petites estelles de la fusta amb que estiguem treballant vagin a parar als ulls
Agrupar les quatre parts que faran de parets de la caixa en un cargol de banc Cal assegurar-se que per la part inferior les fustes estan igualades Eacutes recomanable posar dues fustes entre la boca del cargol i el tauloacute per impedir que aquesta es pugui malmetre a causa de la pressioacute
Llimar les fustes verticalment ja que drsquoaquesta manera es treballa sobre meacutes superfiacutecie Reco-manem utilitzar una llima amb fulla molt rugosa per poder realitzar el treball meacutes ragravepidament Llimar tambeacute les dues peces que faran de tapa i contra tapa
Per millorar les llimadures utilitzar una llima amb la fulla meacutes fina o un paper de vidre
8
Un cop les fustes estiguin ben llimades utilitzar els claus per collar les parets Cal prestar atencioacute en la posicioacute dels claus ja que la fusta eacutes molt prima i es poden torccedilar Aquest hauria de ser el resultat final
Seguint el mateix proceacutes clavar la fullola que faragrave de tapa inferior Cal vigilar a on es posen els claus ja que pot ser que es toquin amb els que hem po-sat anteriorment
Agafar les frontisses i clavar-les amb dos claus pe-tits a la fullola que faragrave de tapa superior Despreacutes clavar els dos forats restants a una de les parets aquesta faragrave de part posterior de la CodePi
Recomanacioacute Si volem que la fusta ens duri du-rant meacutes temps eacutes recomanable envernissar la caixa amb un verniacutes per a fustes
9
Per descarregar Raspbian el sistema operatiu que utilitza la CodePi haurem drsquoobrir una nova fi-nestra del navegador i anar a la web de Raspberry Pi httpwwwraspberrypiorg
Eacutes recomanable fer aquest proceacutes al mateix ordi-nador en el que es procediragrave a instalmiddotlar Raspbian a la targeta SD
Recorda que aquest ordinador ha de tenir lector de targetes o un adaptador USB connectatDespreacutes haurem drsquoanar a lrsquoapartat de descagraverreg-ues on trobarem tots els enllaccedilos que necessitem per descarregar el sistema operatiu de la Rasp-berry Pi
5 Afegim un sistema ope- ratiu a la CodePi
51 Descarregar Raspbian
Lrsquouacuteltim pas per descarregar Raspbian eacutes clicar sobre lrsquoenllaccedil on posa Direct Download Es reco-mana realitzar aquest proceacutes en un lloc amb una connexioacute estable i ragravepida ja que srsquoha de descar-regar molta informacioacute
Despreacutes de clicar aquest enllaccedil sersquons obriragrave una nova finestra i automagraveticament Raspbian comenccedilaragrave a descarregar-se La descagraverrega pot trigar entre 5 i 15 minuts depenent de la teva con-nexioacute a internet Ja podem tancar aquesta finestra i continuar cap al pas seguumlent
10
52 Instalmiddotlar RaspbianUna vegada que ja tenim descarregada lrsquouacuteltima versioacute de Raspbian segons el sistema opera-tiu des del que vulguem instalmiddotlar-lo haurem de seguir uns passos diferents per completar la in-stalmiddotlacioacute
Windows
Per instalmiddotlar Raspbian amb Windows haurem de descarregar i instalmiddotlar Win32DiskImager Abans de continuar amb la instalmiddotlacioacute haurem de de-scomprimir el fitxer que ens hem descarregat Per descomprimir-lo utilitzarem un compressor drsquoarxius com (7zip) Clicant amb el botoacute dret so-bre aquest arxiu i clicarem on posa descomprimir aquiacute o buscarem el nom del nostre descompres-sor i despreacutes buscarem aquesta opcioacute
Ara introduirem la targeta de memograveria que vul-guem utilitzar a lrsquoentrada per targetes del nostre ordinador o a lrsquoadaptador corresponent
A continuacioacute iniciarem el programa i clicarem sobre el logo de la carpeta i escollirem el lloc on hem descomprimit el contingut del zip buscarem lrsquoar-xiu amb extensioacute img i acceptarem el diagraveleg Meacutes tard escollirem en quin dispositiu volem in-stalmiddotlar el sistema operatiu aquest eacutes un punt on hem drsquoestar segurs drsquoon estem instalmiddotlant aquests arxius ja que si lrsquoestigueacutessim instalmiddotlant en una destinacioacute diferent podriacuteem perdre totes les dades de lrsquoordinador Per saber a quin dispositiu hem drsquoinstalmiddotlar Raspbian obrirem ldquoEl Meu Ordinadorrdquo i buscarem la targeta de memograveria ens fixarem en quina lletra hi ha al final del nom aquesta seragrave la mateixa que haurem de posar al programaQuan ja haguem inserit aquests dos paragravemetres al programa clicarem sobre el botoacute de Write i es comenccedilara a instalmiddotlar el sistema operatiu
11
Linux
Per instalmiddotlar Raspbian des drsquoun sistema operatiu Linux utilitzarem lrsquoordre dd al terminal Abans de fer servir aquest ordre haurem de descomprimir el contingut del zip a la carpeta que vulguem (es recomana utilitzar la carpeta personal homeusu-ari)
Un cop tenim descomprimit el contingut del zip obrirem una sessioacute al terminal i escriurem
cd ~
df -h
umount devsdd1
sudo dd bs=4M if=~2013-02-09-wheezy-raspbianimg of=devsdd
Anirem a la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~)
Buscarem la targeta sd i el seu nom a la seguumlent llista ens haurem drsquoapuntar el que posi a la prime-ra columna com devsdd (sense el numero) Assegureu-vos que aquest eacutes el dispositiu on vo-leu instalmiddotlar el Raspbian
Abans drsquoinstalmiddotlar Raspbian haurem de des-muntar les particions corresponents a la targeta SD utilitzant lrsquoordre umount en el cas de tenir meacutes drsquouna particioacute haurem drsquoexecutar aquesta ordre meacutes drsquouna vegada
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom del arxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
12
Mac OS X
Per instalmiddotlar Raspbian a Mac OS X tambeacute utilitza-rem lrsquoordre dd pero el funcionament per buscar en quin disc volem instalmiddotlar raspbian eacutes diferent Recomanem extreure el contingut del zip a la car-peta Usersusuari
Comenccedilarem buscant la targeta on volem instalmiddotlar raspbian executant la seguumlent ordre i copiarem el disk4 (sense agafar la particioacute)
Desmuntarem el disk en quumlestioacute
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom de lrsquoarxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
diskutil list
diskutil unmountDisk devdisk4
sudo dd bs=1m if=~2013-02-09-wheezy-raspbianimg of=devsdb
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
4
2 Per a quegrave la utilitzaremUtilitzarem la RaspberryPi per a crear un ordi-nador amb el qual aprendrem electrogravenica i pro-gramacioacute A traveacutes de petits programes amb llenguatge C podrem gestionar els ports de la GPIO que encendran i apagaran LEDs lle-giran els estats drsquointerruptors i LDRs etc
Tot aixograve ho farem drsquouna manera fagravecil i entretin-guda a partir de diferents tutorials ordenats de menor a major dificultat comenccedilant per prin-cipis bagravesics de lrsquoelectrogravenica i la programacioacute fins a fer programes complexos per gestion-ar diferents LEDs segons diferents variables
Ara beacute abans de comenccedilar amb lrsquoelectrogravenica pu-rament hem de muntar la caixa que ens serviragrave per transportar la Raspberry Pi el teclat el ratoliacute la protoboard els components electrogravenics etc
5
3 Quegrave necessitarem per a muntar-laAquests soacuten els materials que necessitarem per muntar la CodePi Per una banda tenim les fus-tes i drsquoaltres eines que ens serviran per construir la caixa per transportar la CodePi
MaterialbullFusta de 320x320x6 (6 recomanat perograve pot ser meacutes gruixut)bullClaus bullFrontisses
EinesbullMartellbullLlima bullSerra per a fusta (manual o elegravectrica)bullCargol de banc
Per altra banda tambeacute necessitarem tots els components electrogravenics eines per portar a terme els tutorials i com no la Raspberry Pi Aixograve eacutes tot el que necesitarem
bullRaspberry Pi model BbullTargeta SDHC de com a miacutenim 4GB Classe 4 bullTeclatbullRatoliacute convencionalbullProtoboardbullCables electrogravenicsbullLEDsbullResistegravencies 180 i 10K ohmsbullPolsadors
3euro1euro1euro
33euro7euro5euro5euro4euro3euro1euro1euro1euro
Preu total 61euro
6
4 Apregraven a muntar la caixa de la CodePi
Abans de comenccedilar a tallar la fusta prepararem el seguumlent esquema en el nostre tauloacute de fusta A la part del centre deixarem un espai de 6 mm per poder clavar beacute una costat sobre un costat per acabar tenint una caixa de 160mm x 160mm
Amb un regle i un llapis marquem les liacutenies per on tallarem el tauloacute seguint lrsquoesquema anterior
A continuacioacute tallar el tauloacute amb una serra elegravec-trica En cas de no tenir-ne srsquohauragrave de posar la fullola en un cargol de banc i tallar-la amb una ser-ra manual
No passa res si la fusta no queda del tot ben tal-lada ja que despreacutes podrem retocar les imperfec-cions llimant-les i meacutes endavant posant massilla
7
Atencioacute Eacutes altament recomanable utilitzar guants i ulleres protectores durant tot el proceacutes de manip-ulacioacute de la fusta
Els guants ens protegiran de possibles talls ras-cades o drsquoaltres lesions a les mans Les ulleres impediran que petites estelles de la fusta amb que estiguem treballant vagin a parar als ulls
Agrupar les quatre parts que faran de parets de la caixa en un cargol de banc Cal assegurar-se que per la part inferior les fustes estan igualades Eacutes recomanable posar dues fustes entre la boca del cargol i el tauloacute per impedir que aquesta es pugui malmetre a causa de la pressioacute
Llimar les fustes verticalment ja que drsquoaquesta manera es treballa sobre meacutes superfiacutecie Reco-manem utilitzar una llima amb fulla molt rugosa per poder realitzar el treball meacutes ragravepidament Llimar tambeacute les dues peces que faran de tapa i contra tapa
Per millorar les llimadures utilitzar una llima amb la fulla meacutes fina o un paper de vidre
8
Un cop les fustes estiguin ben llimades utilitzar els claus per collar les parets Cal prestar atencioacute en la posicioacute dels claus ja que la fusta eacutes molt prima i es poden torccedilar Aquest hauria de ser el resultat final
Seguint el mateix proceacutes clavar la fullola que faragrave de tapa inferior Cal vigilar a on es posen els claus ja que pot ser que es toquin amb els que hem po-sat anteriorment
Agafar les frontisses i clavar-les amb dos claus pe-tits a la fullola que faragrave de tapa superior Despreacutes clavar els dos forats restants a una de les parets aquesta faragrave de part posterior de la CodePi
Recomanacioacute Si volem que la fusta ens duri du-rant meacutes temps eacutes recomanable envernissar la caixa amb un verniacutes per a fustes
9
Per descarregar Raspbian el sistema operatiu que utilitza la CodePi haurem drsquoobrir una nova fi-nestra del navegador i anar a la web de Raspberry Pi httpwwwraspberrypiorg
Eacutes recomanable fer aquest proceacutes al mateix ordi-nador en el que es procediragrave a instalmiddotlar Raspbian a la targeta SD
Recorda que aquest ordinador ha de tenir lector de targetes o un adaptador USB connectatDespreacutes haurem drsquoanar a lrsquoapartat de descagraverreg-ues on trobarem tots els enllaccedilos que necessitem per descarregar el sistema operatiu de la Rasp-berry Pi
5 Afegim un sistema ope- ratiu a la CodePi
51 Descarregar Raspbian
Lrsquouacuteltim pas per descarregar Raspbian eacutes clicar sobre lrsquoenllaccedil on posa Direct Download Es reco-mana realitzar aquest proceacutes en un lloc amb una connexioacute estable i ragravepida ja que srsquoha de descar-regar molta informacioacute
Despreacutes de clicar aquest enllaccedil sersquons obriragrave una nova finestra i automagraveticament Raspbian comenccedilaragrave a descarregar-se La descagraverrega pot trigar entre 5 i 15 minuts depenent de la teva con-nexioacute a internet Ja podem tancar aquesta finestra i continuar cap al pas seguumlent
10
52 Instalmiddotlar RaspbianUna vegada que ja tenim descarregada lrsquouacuteltima versioacute de Raspbian segons el sistema opera-tiu des del que vulguem instalmiddotlar-lo haurem de seguir uns passos diferents per completar la in-stalmiddotlacioacute
Windows
Per instalmiddotlar Raspbian amb Windows haurem de descarregar i instalmiddotlar Win32DiskImager Abans de continuar amb la instalmiddotlacioacute haurem de de-scomprimir el fitxer que ens hem descarregat Per descomprimir-lo utilitzarem un compressor drsquoarxius com (7zip) Clicant amb el botoacute dret so-bre aquest arxiu i clicarem on posa descomprimir aquiacute o buscarem el nom del nostre descompres-sor i despreacutes buscarem aquesta opcioacute
Ara introduirem la targeta de memograveria que vul-guem utilitzar a lrsquoentrada per targetes del nostre ordinador o a lrsquoadaptador corresponent
A continuacioacute iniciarem el programa i clicarem sobre el logo de la carpeta i escollirem el lloc on hem descomprimit el contingut del zip buscarem lrsquoar-xiu amb extensioacute img i acceptarem el diagraveleg Meacutes tard escollirem en quin dispositiu volem in-stalmiddotlar el sistema operatiu aquest eacutes un punt on hem drsquoestar segurs drsquoon estem instalmiddotlant aquests arxius ja que si lrsquoestigueacutessim instalmiddotlant en una destinacioacute diferent podriacuteem perdre totes les dades de lrsquoordinador Per saber a quin dispositiu hem drsquoinstalmiddotlar Raspbian obrirem ldquoEl Meu Ordinadorrdquo i buscarem la targeta de memograveria ens fixarem en quina lletra hi ha al final del nom aquesta seragrave la mateixa que haurem de posar al programaQuan ja haguem inserit aquests dos paragravemetres al programa clicarem sobre el botoacute de Write i es comenccedilara a instalmiddotlar el sistema operatiu
11
Linux
Per instalmiddotlar Raspbian des drsquoun sistema operatiu Linux utilitzarem lrsquoordre dd al terminal Abans de fer servir aquest ordre haurem de descomprimir el contingut del zip a la carpeta que vulguem (es recomana utilitzar la carpeta personal homeusu-ari)
Un cop tenim descomprimit el contingut del zip obrirem una sessioacute al terminal i escriurem
cd ~
df -h
umount devsdd1
sudo dd bs=4M if=~2013-02-09-wheezy-raspbianimg of=devsdd
Anirem a la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~)
Buscarem la targeta sd i el seu nom a la seguumlent llista ens haurem drsquoapuntar el que posi a la prime-ra columna com devsdd (sense el numero) Assegureu-vos que aquest eacutes el dispositiu on vo-leu instalmiddotlar el Raspbian
Abans drsquoinstalmiddotlar Raspbian haurem de des-muntar les particions corresponents a la targeta SD utilitzant lrsquoordre umount en el cas de tenir meacutes drsquouna particioacute haurem drsquoexecutar aquesta ordre meacutes drsquouna vegada
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom del arxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
12
Mac OS X
Per instalmiddotlar Raspbian a Mac OS X tambeacute utilitza-rem lrsquoordre dd pero el funcionament per buscar en quin disc volem instalmiddotlar raspbian eacutes diferent Recomanem extreure el contingut del zip a la car-peta Usersusuari
Comenccedilarem buscant la targeta on volem instalmiddotlar raspbian executant la seguumlent ordre i copiarem el disk4 (sense agafar la particioacute)
Desmuntarem el disk en quumlestioacute
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom de lrsquoarxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
diskutil list
diskutil unmountDisk devdisk4
sudo dd bs=1m if=~2013-02-09-wheezy-raspbianimg of=devsdb
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
5
3 Quegrave necessitarem per a muntar-laAquests soacuten els materials que necessitarem per muntar la CodePi Per una banda tenim les fus-tes i drsquoaltres eines que ens serviran per construir la caixa per transportar la CodePi
MaterialbullFusta de 320x320x6 (6 recomanat perograve pot ser meacutes gruixut)bullClaus bullFrontisses
EinesbullMartellbullLlima bullSerra per a fusta (manual o elegravectrica)bullCargol de banc
Per altra banda tambeacute necessitarem tots els components electrogravenics eines per portar a terme els tutorials i com no la Raspberry Pi Aixograve eacutes tot el que necesitarem
bullRaspberry Pi model BbullTargeta SDHC de com a miacutenim 4GB Classe 4 bullTeclatbullRatoliacute convencionalbullProtoboardbullCables electrogravenicsbullLEDsbullResistegravencies 180 i 10K ohmsbullPolsadors
3euro1euro1euro
33euro7euro5euro5euro4euro3euro1euro1euro1euro
Preu total 61euro
6
4 Apregraven a muntar la caixa de la CodePi
Abans de comenccedilar a tallar la fusta prepararem el seguumlent esquema en el nostre tauloacute de fusta A la part del centre deixarem un espai de 6 mm per poder clavar beacute una costat sobre un costat per acabar tenint una caixa de 160mm x 160mm
Amb un regle i un llapis marquem les liacutenies per on tallarem el tauloacute seguint lrsquoesquema anterior
A continuacioacute tallar el tauloacute amb una serra elegravec-trica En cas de no tenir-ne srsquohauragrave de posar la fullola en un cargol de banc i tallar-la amb una ser-ra manual
No passa res si la fusta no queda del tot ben tal-lada ja que despreacutes podrem retocar les imperfec-cions llimant-les i meacutes endavant posant massilla
7
Atencioacute Eacutes altament recomanable utilitzar guants i ulleres protectores durant tot el proceacutes de manip-ulacioacute de la fusta
Els guants ens protegiran de possibles talls ras-cades o drsquoaltres lesions a les mans Les ulleres impediran que petites estelles de la fusta amb que estiguem treballant vagin a parar als ulls
Agrupar les quatre parts que faran de parets de la caixa en un cargol de banc Cal assegurar-se que per la part inferior les fustes estan igualades Eacutes recomanable posar dues fustes entre la boca del cargol i el tauloacute per impedir que aquesta es pugui malmetre a causa de la pressioacute
Llimar les fustes verticalment ja que drsquoaquesta manera es treballa sobre meacutes superfiacutecie Reco-manem utilitzar una llima amb fulla molt rugosa per poder realitzar el treball meacutes ragravepidament Llimar tambeacute les dues peces que faran de tapa i contra tapa
Per millorar les llimadures utilitzar una llima amb la fulla meacutes fina o un paper de vidre
8
Un cop les fustes estiguin ben llimades utilitzar els claus per collar les parets Cal prestar atencioacute en la posicioacute dels claus ja que la fusta eacutes molt prima i es poden torccedilar Aquest hauria de ser el resultat final
Seguint el mateix proceacutes clavar la fullola que faragrave de tapa inferior Cal vigilar a on es posen els claus ja que pot ser que es toquin amb els que hem po-sat anteriorment
Agafar les frontisses i clavar-les amb dos claus pe-tits a la fullola que faragrave de tapa superior Despreacutes clavar els dos forats restants a una de les parets aquesta faragrave de part posterior de la CodePi
Recomanacioacute Si volem que la fusta ens duri du-rant meacutes temps eacutes recomanable envernissar la caixa amb un verniacutes per a fustes
9
Per descarregar Raspbian el sistema operatiu que utilitza la CodePi haurem drsquoobrir una nova fi-nestra del navegador i anar a la web de Raspberry Pi httpwwwraspberrypiorg
Eacutes recomanable fer aquest proceacutes al mateix ordi-nador en el que es procediragrave a instalmiddotlar Raspbian a la targeta SD
Recorda que aquest ordinador ha de tenir lector de targetes o un adaptador USB connectatDespreacutes haurem drsquoanar a lrsquoapartat de descagraverreg-ues on trobarem tots els enllaccedilos que necessitem per descarregar el sistema operatiu de la Rasp-berry Pi
5 Afegim un sistema ope- ratiu a la CodePi
51 Descarregar Raspbian
Lrsquouacuteltim pas per descarregar Raspbian eacutes clicar sobre lrsquoenllaccedil on posa Direct Download Es reco-mana realitzar aquest proceacutes en un lloc amb una connexioacute estable i ragravepida ja que srsquoha de descar-regar molta informacioacute
Despreacutes de clicar aquest enllaccedil sersquons obriragrave una nova finestra i automagraveticament Raspbian comenccedilaragrave a descarregar-se La descagraverrega pot trigar entre 5 i 15 minuts depenent de la teva con-nexioacute a internet Ja podem tancar aquesta finestra i continuar cap al pas seguumlent
10
52 Instalmiddotlar RaspbianUna vegada que ja tenim descarregada lrsquouacuteltima versioacute de Raspbian segons el sistema opera-tiu des del que vulguem instalmiddotlar-lo haurem de seguir uns passos diferents per completar la in-stalmiddotlacioacute
Windows
Per instalmiddotlar Raspbian amb Windows haurem de descarregar i instalmiddotlar Win32DiskImager Abans de continuar amb la instalmiddotlacioacute haurem de de-scomprimir el fitxer que ens hem descarregat Per descomprimir-lo utilitzarem un compressor drsquoarxius com (7zip) Clicant amb el botoacute dret so-bre aquest arxiu i clicarem on posa descomprimir aquiacute o buscarem el nom del nostre descompres-sor i despreacutes buscarem aquesta opcioacute
Ara introduirem la targeta de memograveria que vul-guem utilitzar a lrsquoentrada per targetes del nostre ordinador o a lrsquoadaptador corresponent
A continuacioacute iniciarem el programa i clicarem sobre el logo de la carpeta i escollirem el lloc on hem descomprimit el contingut del zip buscarem lrsquoar-xiu amb extensioacute img i acceptarem el diagraveleg Meacutes tard escollirem en quin dispositiu volem in-stalmiddotlar el sistema operatiu aquest eacutes un punt on hem drsquoestar segurs drsquoon estem instalmiddotlant aquests arxius ja que si lrsquoestigueacutessim instalmiddotlant en una destinacioacute diferent podriacuteem perdre totes les dades de lrsquoordinador Per saber a quin dispositiu hem drsquoinstalmiddotlar Raspbian obrirem ldquoEl Meu Ordinadorrdquo i buscarem la targeta de memograveria ens fixarem en quina lletra hi ha al final del nom aquesta seragrave la mateixa que haurem de posar al programaQuan ja haguem inserit aquests dos paragravemetres al programa clicarem sobre el botoacute de Write i es comenccedilara a instalmiddotlar el sistema operatiu
11
Linux
Per instalmiddotlar Raspbian des drsquoun sistema operatiu Linux utilitzarem lrsquoordre dd al terminal Abans de fer servir aquest ordre haurem de descomprimir el contingut del zip a la carpeta que vulguem (es recomana utilitzar la carpeta personal homeusu-ari)
Un cop tenim descomprimit el contingut del zip obrirem una sessioacute al terminal i escriurem
cd ~
df -h
umount devsdd1
sudo dd bs=4M if=~2013-02-09-wheezy-raspbianimg of=devsdd
Anirem a la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~)
Buscarem la targeta sd i el seu nom a la seguumlent llista ens haurem drsquoapuntar el que posi a la prime-ra columna com devsdd (sense el numero) Assegureu-vos que aquest eacutes el dispositiu on vo-leu instalmiddotlar el Raspbian
Abans drsquoinstalmiddotlar Raspbian haurem de des-muntar les particions corresponents a la targeta SD utilitzant lrsquoordre umount en el cas de tenir meacutes drsquouna particioacute haurem drsquoexecutar aquesta ordre meacutes drsquouna vegada
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom del arxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
12
Mac OS X
Per instalmiddotlar Raspbian a Mac OS X tambeacute utilitza-rem lrsquoordre dd pero el funcionament per buscar en quin disc volem instalmiddotlar raspbian eacutes diferent Recomanem extreure el contingut del zip a la car-peta Usersusuari
Comenccedilarem buscant la targeta on volem instalmiddotlar raspbian executant la seguumlent ordre i copiarem el disk4 (sense agafar la particioacute)
Desmuntarem el disk en quumlestioacute
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom de lrsquoarxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
diskutil list
diskutil unmountDisk devdisk4
sudo dd bs=1m if=~2013-02-09-wheezy-raspbianimg of=devsdb
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
6
4 Apregraven a muntar la caixa de la CodePi
Abans de comenccedilar a tallar la fusta prepararem el seguumlent esquema en el nostre tauloacute de fusta A la part del centre deixarem un espai de 6 mm per poder clavar beacute una costat sobre un costat per acabar tenint una caixa de 160mm x 160mm
Amb un regle i un llapis marquem les liacutenies per on tallarem el tauloacute seguint lrsquoesquema anterior
A continuacioacute tallar el tauloacute amb una serra elegravec-trica En cas de no tenir-ne srsquohauragrave de posar la fullola en un cargol de banc i tallar-la amb una ser-ra manual
No passa res si la fusta no queda del tot ben tal-lada ja que despreacutes podrem retocar les imperfec-cions llimant-les i meacutes endavant posant massilla
7
Atencioacute Eacutes altament recomanable utilitzar guants i ulleres protectores durant tot el proceacutes de manip-ulacioacute de la fusta
Els guants ens protegiran de possibles talls ras-cades o drsquoaltres lesions a les mans Les ulleres impediran que petites estelles de la fusta amb que estiguem treballant vagin a parar als ulls
Agrupar les quatre parts que faran de parets de la caixa en un cargol de banc Cal assegurar-se que per la part inferior les fustes estan igualades Eacutes recomanable posar dues fustes entre la boca del cargol i el tauloacute per impedir que aquesta es pugui malmetre a causa de la pressioacute
Llimar les fustes verticalment ja que drsquoaquesta manera es treballa sobre meacutes superfiacutecie Reco-manem utilitzar una llima amb fulla molt rugosa per poder realitzar el treball meacutes ragravepidament Llimar tambeacute les dues peces que faran de tapa i contra tapa
Per millorar les llimadures utilitzar una llima amb la fulla meacutes fina o un paper de vidre
8
Un cop les fustes estiguin ben llimades utilitzar els claus per collar les parets Cal prestar atencioacute en la posicioacute dels claus ja que la fusta eacutes molt prima i es poden torccedilar Aquest hauria de ser el resultat final
Seguint el mateix proceacutes clavar la fullola que faragrave de tapa inferior Cal vigilar a on es posen els claus ja que pot ser que es toquin amb els que hem po-sat anteriorment
Agafar les frontisses i clavar-les amb dos claus pe-tits a la fullola que faragrave de tapa superior Despreacutes clavar els dos forats restants a una de les parets aquesta faragrave de part posterior de la CodePi
Recomanacioacute Si volem que la fusta ens duri du-rant meacutes temps eacutes recomanable envernissar la caixa amb un verniacutes per a fustes
9
Per descarregar Raspbian el sistema operatiu que utilitza la CodePi haurem drsquoobrir una nova fi-nestra del navegador i anar a la web de Raspberry Pi httpwwwraspberrypiorg
Eacutes recomanable fer aquest proceacutes al mateix ordi-nador en el que es procediragrave a instalmiddotlar Raspbian a la targeta SD
Recorda que aquest ordinador ha de tenir lector de targetes o un adaptador USB connectatDespreacutes haurem drsquoanar a lrsquoapartat de descagraverreg-ues on trobarem tots els enllaccedilos que necessitem per descarregar el sistema operatiu de la Rasp-berry Pi
5 Afegim un sistema ope- ratiu a la CodePi
51 Descarregar Raspbian
Lrsquouacuteltim pas per descarregar Raspbian eacutes clicar sobre lrsquoenllaccedil on posa Direct Download Es reco-mana realitzar aquest proceacutes en un lloc amb una connexioacute estable i ragravepida ja que srsquoha de descar-regar molta informacioacute
Despreacutes de clicar aquest enllaccedil sersquons obriragrave una nova finestra i automagraveticament Raspbian comenccedilaragrave a descarregar-se La descagraverrega pot trigar entre 5 i 15 minuts depenent de la teva con-nexioacute a internet Ja podem tancar aquesta finestra i continuar cap al pas seguumlent
10
52 Instalmiddotlar RaspbianUna vegada que ja tenim descarregada lrsquouacuteltima versioacute de Raspbian segons el sistema opera-tiu des del que vulguem instalmiddotlar-lo haurem de seguir uns passos diferents per completar la in-stalmiddotlacioacute
Windows
Per instalmiddotlar Raspbian amb Windows haurem de descarregar i instalmiddotlar Win32DiskImager Abans de continuar amb la instalmiddotlacioacute haurem de de-scomprimir el fitxer que ens hem descarregat Per descomprimir-lo utilitzarem un compressor drsquoarxius com (7zip) Clicant amb el botoacute dret so-bre aquest arxiu i clicarem on posa descomprimir aquiacute o buscarem el nom del nostre descompres-sor i despreacutes buscarem aquesta opcioacute
Ara introduirem la targeta de memograveria que vul-guem utilitzar a lrsquoentrada per targetes del nostre ordinador o a lrsquoadaptador corresponent
A continuacioacute iniciarem el programa i clicarem sobre el logo de la carpeta i escollirem el lloc on hem descomprimit el contingut del zip buscarem lrsquoar-xiu amb extensioacute img i acceptarem el diagraveleg Meacutes tard escollirem en quin dispositiu volem in-stalmiddotlar el sistema operatiu aquest eacutes un punt on hem drsquoestar segurs drsquoon estem instalmiddotlant aquests arxius ja que si lrsquoestigueacutessim instalmiddotlant en una destinacioacute diferent podriacuteem perdre totes les dades de lrsquoordinador Per saber a quin dispositiu hem drsquoinstalmiddotlar Raspbian obrirem ldquoEl Meu Ordinadorrdquo i buscarem la targeta de memograveria ens fixarem en quina lletra hi ha al final del nom aquesta seragrave la mateixa que haurem de posar al programaQuan ja haguem inserit aquests dos paragravemetres al programa clicarem sobre el botoacute de Write i es comenccedilara a instalmiddotlar el sistema operatiu
11
Linux
Per instalmiddotlar Raspbian des drsquoun sistema operatiu Linux utilitzarem lrsquoordre dd al terminal Abans de fer servir aquest ordre haurem de descomprimir el contingut del zip a la carpeta que vulguem (es recomana utilitzar la carpeta personal homeusu-ari)
Un cop tenim descomprimit el contingut del zip obrirem una sessioacute al terminal i escriurem
cd ~
df -h
umount devsdd1
sudo dd bs=4M if=~2013-02-09-wheezy-raspbianimg of=devsdd
Anirem a la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~)
Buscarem la targeta sd i el seu nom a la seguumlent llista ens haurem drsquoapuntar el que posi a la prime-ra columna com devsdd (sense el numero) Assegureu-vos que aquest eacutes el dispositiu on vo-leu instalmiddotlar el Raspbian
Abans drsquoinstalmiddotlar Raspbian haurem de des-muntar les particions corresponents a la targeta SD utilitzant lrsquoordre umount en el cas de tenir meacutes drsquouna particioacute haurem drsquoexecutar aquesta ordre meacutes drsquouna vegada
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom del arxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
12
Mac OS X
Per instalmiddotlar Raspbian a Mac OS X tambeacute utilitza-rem lrsquoordre dd pero el funcionament per buscar en quin disc volem instalmiddotlar raspbian eacutes diferent Recomanem extreure el contingut del zip a la car-peta Usersusuari
Comenccedilarem buscant la targeta on volem instalmiddotlar raspbian executant la seguumlent ordre i copiarem el disk4 (sense agafar la particioacute)
Desmuntarem el disk en quumlestioacute
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom de lrsquoarxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
diskutil list
diskutil unmountDisk devdisk4
sudo dd bs=1m if=~2013-02-09-wheezy-raspbianimg of=devsdb
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
7
Atencioacute Eacutes altament recomanable utilitzar guants i ulleres protectores durant tot el proceacutes de manip-ulacioacute de la fusta
Els guants ens protegiran de possibles talls ras-cades o drsquoaltres lesions a les mans Les ulleres impediran que petites estelles de la fusta amb que estiguem treballant vagin a parar als ulls
Agrupar les quatre parts que faran de parets de la caixa en un cargol de banc Cal assegurar-se que per la part inferior les fustes estan igualades Eacutes recomanable posar dues fustes entre la boca del cargol i el tauloacute per impedir que aquesta es pugui malmetre a causa de la pressioacute
Llimar les fustes verticalment ja que drsquoaquesta manera es treballa sobre meacutes superfiacutecie Reco-manem utilitzar una llima amb fulla molt rugosa per poder realitzar el treball meacutes ragravepidament Llimar tambeacute les dues peces que faran de tapa i contra tapa
Per millorar les llimadures utilitzar una llima amb la fulla meacutes fina o un paper de vidre
8
Un cop les fustes estiguin ben llimades utilitzar els claus per collar les parets Cal prestar atencioacute en la posicioacute dels claus ja que la fusta eacutes molt prima i es poden torccedilar Aquest hauria de ser el resultat final
Seguint el mateix proceacutes clavar la fullola que faragrave de tapa inferior Cal vigilar a on es posen els claus ja que pot ser que es toquin amb els que hem po-sat anteriorment
Agafar les frontisses i clavar-les amb dos claus pe-tits a la fullola que faragrave de tapa superior Despreacutes clavar els dos forats restants a una de les parets aquesta faragrave de part posterior de la CodePi
Recomanacioacute Si volem que la fusta ens duri du-rant meacutes temps eacutes recomanable envernissar la caixa amb un verniacutes per a fustes
9
Per descarregar Raspbian el sistema operatiu que utilitza la CodePi haurem drsquoobrir una nova fi-nestra del navegador i anar a la web de Raspberry Pi httpwwwraspberrypiorg
Eacutes recomanable fer aquest proceacutes al mateix ordi-nador en el que es procediragrave a instalmiddotlar Raspbian a la targeta SD
Recorda que aquest ordinador ha de tenir lector de targetes o un adaptador USB connectatDespreacutes haurem drsquoanar a lrsquoapartat de descagraverreg-ues on trobarem tots els enllaccedilos que necessitem per descarregar el sistema operatiu de la Rasp-berry Pi
5 Afegim un sistema ope- ratiu a la CodePi
51 Descarregar Raspbian
Lrsquouacuteltim pas per descarregar Raspbian eacutes clicar sobre lrsquoenllaccedil on posa Direct Download Es reco-mana realitzar aquest proceacutes en un lloc amb una connexioacute estable i ragravepida ja que srsquoha de descar-regar molta informacioacute
Despreacutes de clicar aquest enllaccedil sersquons obriragrave una nova finestra i automagraveticament Raspbian comenccedilaragrave a descarregar-se La descagraverrega pot trigar entre 5 i 15 minuts depenent de la teva con-nexioacute a internet Ja podem tancar aquesta finestra i continuar cap al pas seguumlent
10
52 Instalmiddotlar RaspbianUna vegada que ja tenim descarregada lrsquouacuteltima versioacute de Raspbian segons el sistema opera-tiu des del que vulguem instalmiddotlar-lo haurem de seguir uns passos diferents per completar la in-stalmiddotlacioacute
Windows
Per instalmiddotlar Raspbian amb Windows haurem de descarregar i instalmiddotlar Win32DiskImager Abans de continuar amb la instalmiddotlacioacute haurem de de-scomprimir el fitxer que ens hem descarregat Per descomprimir-lo utilitzarem un compressor drsquoarxius com (7zip) Clicant amb el botoacute dret so-bre aquest arxiu i clicarem on posa descomprimir aquiacute o buscarem el nom del nostre descompres-sor i despreacutes buscarem aquesta opcioacute
Ara introduirem la targeta de memograveria que vul-guem utilitzar a lrsquoentrada per targetes del nostre ordinador o a lrsquoadaptador corresponent
A continuacioacute iniciarem el programa i clicarem sobre el logo de la carpeta i escollirem el lloc on hem descomprimit el contingut del zip buscarem lrsquoar-xiu amb extensioacute img i acceptarem el diagraveleg Meacutes tard escollirem en quin dispositiu volem in-stalmiddotlar el sistema operatiu aquest eacutes un punt on hem drsquoestar segurs drsquoon estem instalmiddotlant aquests arxius ja que si lrsquoestigueacutessim instalmiddotlant en una destinacioacute diferent podriacuteem perdre totes les dades de lrsquoordinador Per saber a quin dispositiu hem drsquoinstalmiddotlar Raspbian obrirem ldquoEl Meu Ordinadorrdquo i buscarem la targeta de memograveria ens fixarem en quina lletra hi ha al final del nom aquesta seragrave la mateixa que haurem de posar al programaQuan ja haguem inserit aquests dos paragravemetres al programa clicarem sobre el botoacute de Write i es comenccedilara a instalmiddotlar el sistema operatiu
11
Linux
Per instalmiddotlar Raspbian des drsquoun sistema operatiu Linux utilitzarem lrsquoordre dd al terminal Abans de fer servir aquest ordre haurem de descomprimir el contingut del zip a la carpeta que vulguem (es recomana utilitzar la carpeta personal homeusu-ari)
Un cop tenim descomprimit el contingut del zip obrirem una sessioacute al terminal i escriurem
cd ~
df -h
umount devsdd1
sudo dd bs=4M if=~2013-02-09-wheezy-raspbianimg of=devsdd
Anirem a la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~)
Buscarem la targeta sd i el seu nom a la seguumlent llista ens haurem drsquoapuntar el que posi a la prime-ra columna com devsdd (sense el numero) Assegureu-vos que aquest eacutes el dispositiu on vo-leu instalmiddotlar el Raspbian
Abans drsquoinstalmiddotlar Raspbian haurem de des-muntar les particions corresponents a la targeta SD utilitzant lrsquoordre umount en el cas de tenir meacutes drsquouna particioacute haurem drsquoexecutar aquesta ordre meacutes drsquouna vegada
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom del arxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
12
Mac OS X
Per instalmiddotlar Raspbian a Mac OS X tambeacute utilitza-rem lrsquoordre dd pero el funcionament per buscar en quin disc volem instalmiddotlar raspbian eacutes diferent Recomanem extreure el contingut del zip a la car-peta Usersusuari
Comenccedilarem buscant la targeta on volem instalmiddotlar raspbian executant la seguumlent ordre i copiarem el disk4 (sense agafar la particioacute)
Desmuntarem el disk en quumlestioacute
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom de lrsquoarxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
diskutil list
diskutil unmountDisk devdisk4
sudo dd bs=1m if=~2013-02-09-wheezy-raspbianimg of=devsdb
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
8
Un cop les fustes estiguin ben llimades utilitzar els claus per collar les parets Cal prestar atencioacute en la posicioacute dels claus ja que la fusta eacutes molt prima i es poden torccedilar Aquest hauria de ser el resultat final
Seguint el mateix proceacutes clavar la fullola que faragrave de tapa inferior Cal vigilar a on es posen els claus ja que pot ser que es toquin amb els que hem po-sat anteriorment
Agafar les frontisses i clavar-les amb dos claus pe-tits a la fullola que faragrave de tapa superior Despreacutes clavar els dos forats restants a una de les parets aquesta faragrave de part posterior de la CodePi
Recomanacioacute Si volem que la fusta ens duri du-rant meacutes temps eacutes recomanable envernissar la caixa amb un verniacutes per a fustes
9
Per descarregar Raspbian el sistema operatiu que utilitza la CodePi haurem drsquoobrir una nova fi-nestra del navegador i anar a la web de Raspberry Pi httpwwwraspberrypiorg
Eacutes recomanable fer aquest proceacutes al mateix ordi-nador en el que es procediragrave a instalmiddotlar Raspbian a la targeta SD
Recorda que aquest ordinador ha de tenir lector de targetes o un adaptador USB connectatDespreacutes haurem drsquoanar a lrsquoapartat de descagraverreg-ues on trobarem tots els enllaccedilos que necessitem per descarregar el sistema operatiu de la Rasp-berry Pi
5 Afegim un sistema ope- ratiu a la CodePi
51 Descarregar Raspbian
Lrsquouacuteltim pas per descarregar Raspbian eacutes clicar sobre lrsquoenllaccedil on posa Direct Download Es reco-mana realitzar aquest proceacutes en un lloc amb una connexioacute estable i ragravepida ja que srsquoha de descar-regar molta informacioacute
Despreacutes de clicar aquest enllaccedil sersquons obriragrave una nova finestra i automagraveticament Raspbian comenccedilaragrave a descarregar-se La descagraverrega pot trigar entre 5 i 15 minuts depenent de la teva con-nexioacute a internet Ja podem tancar aquesta finestra i continuar cap al pas seguumlent
10
52 Instalmiddotlar RaspbianUna vegada que ja tenim descarregada lrsquouacuteltima versioacute de Raspbian segons el sistema opera-tiu des del que vulguem instalmiddotlar-lo haurem de seguir uns passos diferents per completar la in-stalmiddotlacioacute
Windows
Per instalmiddotlar Raspbian amb Windows haurem de descarregar i instalmiddotlar Win32DiskImager Abans de continuar amb la instalmiddotlacioacute haurem de de-scomprimir el fitxer que ens hem descarregat Per descomprimir-lo utilitzarem un compressor drsquoarxius com (7zip) Clicant amb el botoacute dret so-bre aquest arxiu i clicarem on posa descomprimir aquiacute o buscarem el nom del nostre descompres-sor i despreacutes buscarem aquesta opcioacute
Ara introduirem la targeta de memograveria que vul-guem utilitzar a lrsquoentrada per targetes del nostre ordinador o a lrsquoadaptador corresponent
A continuacioacute iniciarem el programa i clicarem sobre el logo de la carpeta i escollirem el lloc on hem descomprimit el contingut del zip buscarem lrsquoar-xiu amb extensioacute img i acceptarem el diagraveleg Meacutes tard escollirem en quin dispositiu volem in-stalmiddotlar el sistema operatiu aquest eacutes un punt on hem drsquoestar segurs drsquoon estem instalmiddotlant aquests arxius ja que si lrsquoestigueacutessim instalmiddotlant en una destinacioacute diferent podriacuteem perdre totes les dades de lrsquoordinador Per saber a quin dispositiu hem drsquoinstalmiddotlar Raspbian obrirem ldquoEl Meu Ordinadorrdquo i buscarem la targeta de memograveria ens fixarem en quina lletra hi ha al final del nom aquesta seragrave la mateixa que haurem de posar al programaQuan ja haguem inserit aquests dos paragravemetres al programa clicarem sobre el botoacute de Write i es comenccedilara a instalmiddotlar el sistema operatiu
11
Linux
Per instalmiddotlar Raspbian des drsquoun sistema operatiu Linux utilitzarem lrsquoordre dd al terminal Abans de fer servir aquest ordre haurem de descomprimir el contingut del zip a la carpeta que vulguem (es recomana utilitzar la carpeta personal homeusu-ari)
Un cop tenim descomprimit el contingut del zip obrirem una sessioacute al terminal i escriurem
cd ~
df -h
umount devsdd1
sudo dd bs=4M if=~2013-02-09-wheezy-raspbianimg of=devsdd
Anirem a la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~)
Buscarem la targeta sd i el seu nom a la seguumlent llista ens haurem drsquoapuntar el que posi a la prime-ra columna com devsdd (sense el numero) Assegureu-vos que aquest eacutes el dispositiu on vo-leu instalmiddotlar el Raspbian
Abans drsquoinstalmiddotlar Raspbian haurem de des-muntar les particions corresponents a la targeta SD utilitzant lrsquoordre umount en el cas de tenir meacutes drsquouna particioacute haurem drsquoexecutar aquesta ordre meacutes drsquouna vegada
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom del arxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
12
Mac OS X
Per instalmiddotlar Raspbian a Mac OS X tambeacute utilitza-rem lrsquoordre dd pero el funcionament per buscar en quin disc volem instalmiddotlar raspbian eacutes diferent Recomanem extreure el contingut del zip a la car-peta Usersusuari
Comenccedilarem buscant la targeta on volem instalmiddotlar raspbian executant la seguumlent ordre i copiarem el disk4 (sense agafar la particioacute)
Desmuntarem el disk en quumlestioacute
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom de lrsquoarxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
diskutil list
diskutil unmountDisk devdisk4
sudo dd bs=1m if=~2013-02-09-wheezy-raspbianimg of=devsdb
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
9
Per descarregar Raspbian el sistema operatiu que utilitza la CodePi haurem drsquoobrir una nova fi-nestra del navegador i anar a la web de Raspberry Pi httpwwwraspberrypiorg
Eacutes recomanable fer aquest proceacutes al mateix ordi-nador en el que es procediragrave a instalmiddotlar Raspbian a la targeta SD
Recorda que aquest ordinador ha de tenir lector de targetes o un adaptador USB connectatDespreacutes haurem drsquoanar a lrsquoapartat de descagraverreg-ues on trobarem tots els enllaccedilos que necessitem per descarregar el sistema operatiu de la Rasp-berry Pi
5 Afegim un sistema ope- ratiu a la CodePi
51 Descarregar Raspbian
Lrsquouacuteltim pas per descarregar Raspbian eacutes clicar sobre lrsquoenllaccedil on posa Direct Download Es reco-mana realitzar aquest proceacutes en un lloc amb una connexioacute estable i ragravepida ja que srsquoha de descar-regar molta informacioacute
Despreacutes de clicar aquest enllaccedil sersquons obriragrave una nova finestra i automagraveticament Raspbian comenccedilaragrave a descarregar-se La descagraverrega pot trigar entre 5 i 15 minuts depenent de la teva con-nexioacute a internet Ja podem tancar aquesta finestra i continuar cap al pas seguumlent
10
52 Instalmiddotlar RaspbianUna vegada que ja tenim descarregada lrsquouacuteltima versioacute de Raspbian segons el sistema opera-tiu des del que vulguem instalmiddotlar-lo haurem de seguir uns passos diferents per completar la in-stalmiddotlacioacute
Windows
Per instalmiddotlar Raspbian amb Windows haurem de descarregar i instalmiddotlar Win32DiskImager Abans de continuar amb la instalmiddotlacioacute haurem de de-scomprimir el fitxer que ens hem descarregat Per descomprimir-lo utilitzarem un compressor drsquoarxius com (7zip) Clicant amb el botoacute dret so-bre aquest arxiu i clicarem on posa descomprimir aquiacute o buscarem el nom del nostre descompres-sor i despreacutes buscarem aquesta opcioacute
Ara introduirem la targeta de memograveria que vul-guem utilitzar a lrsquoentrada per targetes del nostre ordinador o a lrsquoadaptador corresponent
A continuacioacute iniciarem el programa i clicarem sobre el logo de la carpeta i escollirem el lloc on hem descomprimit el contingut del zip buscarem lrsquoar-xiu amb extensioacute img i acceptarem el diagraveleg Meacutes tard escollirem en quin dispositiu volem in-stalmiddotlar el sistema operatiu aquest eacutes un punt on hem drsquoestar segurs drsquoon estem instalmiddotlant aquests arxius ja que si lrsquoestigueacutessim instalmiddotlant en una destinacioacute diferent podriacuteem perdre totes les dades de lrsquoordinador Per saber a quin dispositiu hem drsquoinstalmiddotlar Raspbian obrirem ldquoEl Meu Ordinadorrdquo i buscarem la targeta de memograveria ens fixarem en quina lletra hi ha al final del nom aquesta seragrave la mateixa que haurem de posar al programaQuan ja haguem inserit aquests dos paragravemetres al programa clicarem sobre el botoacute de Write i es comenccedilara a instalmiddotlar el sistema operatiu
11
Linux
Per instalmiddotlar Raspbian des drsquoun sistema operatiu Linux utilitzarem lrsquoordre dd al terminal Abans de fer servir aquest ordre haurem de descomprimir el contingut del zip a la carpeta que vulguem (es recomana utilitzar la carpeta personal homeusu-ari)
Un cop tenim descomprimit el contingut del zip obrirem una sessioacute al terminal i escriurem
cd ~
df -h
umount devsdd1
sudo dd bs=4M if=~2013-02-09-wheezy-raspbianimg of=devsdd
Anirem a la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~)
Buscarem la targeta sd i el seu nom a la seguumlent llista ens haurem drsquoapuntar el que posi a la prime-ra columna com devsdd (sense el numero) Assegureu-vos que aquest eacutes el dispositiu on vo-leu instalmiddotlar el Raspbian
Abans drsquoinstalmiddotlar Raspbian haurem de des-muntar les particions corresponents a la targeta SD utilitzant lrsquoordre umount en el cas de tenir meacutes drsquouna particioacute haurem drsquoexecutar aquesta ordre meacutes drsquouna vegada
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom del arxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
12
Mac OS X
Per instalmiddotlar Raspbian a Mac OS X tambeacute utilitza-rem lrsquoordre dd pero el funcionament per buscar en quin disc volem instalmiddotlar raspbian eacutes diferent Recomanem extreure el contingut del zip a la car-peta Usersusuari
Comenccedilarem buscant la targeta on volem instalmiddotlar raspbian executant la seguumlent ordre i copiarem el disk4 (sense agafar la particioacute)
Desmuntarem el disk en quumlestioacute
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom de lrsquoarxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
diskutil list
diskutil unmountDisk devdisk4
sudo dd bs=1m if=~2013-02-09-wheezy-raspbianimg of=devsdb
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
10
52 Instalmiddotlar RaspbianUna vegada que ja tenim descarregada lrsquouacuteltima versioacute de Raspbian segons el sistema opera-tiu des del que vulguem instalmiddotlar-lo haurem de seguir uns passos diferents per completar la in-stalmiddotlacioacute
Windows
Per instalmiddotlar Raspbian amb Windows haurem de descarregar i instalmiddotlar Win32DiskImager Abans de continuar amb la instalmiddotlacioacute haurem de de-scomprimir el fitxer que ens hem descarregat Per descomprimir-lo utilitzarem un compressor drsquoarxius com (7zip) Clicant amb el botoacute dret so-bre aquest arxiu i clicarem on posa descomprimir aquiacute o buscarem el nom del nostre descompres-sor i despreacutes buscarem aquesta opcioacute
Ara introduirem la targeta de memograveria que vul-guem utilitzar a lrsquoentrada per targetes del nostre ordinador o a lrsquoadaptador corresponent
A continuacioacute iniciarem el programa i clicarem sobre el logo de la carpeta i escollirem el lloc on hem descomprimit el contingut del zip buscarem lrsquoar-xiu amb extensioacute img i acceptarem el diagraveleg Meacutes tard escollirem en quin dispositiu volem in-stalmiddotlar el sistema operatiu aquest eacutes un punt on hem drsquoestar segurs drsquoon estem instalmiddotlant aquests arxius ja que si lrsquoestigueacutessim instalmiddotlant en una destinacioacute diferent podriacuteem perdre totes les dades de lrsquoordinador Per saber a quin dispositiu hem drsquoinstalmiddotlar Raspbian obrirem ldquoEl Meu Ordinadorrdquo i buscarem la targeta de memograveria ens fixarem en quina lletra hi ha al final del nom aquesta seragrave la mateixa que haurem de posar al programaQuan ja haguem inserit aquests dos paragravemetres al programa clicarem sobre el botoacute de Write i es comenccedilara a instalmiddotlar el sistema operatiu
11
Linux
Per instalmiddotlar Raspbian des drsquoun sistema operatiu Linux utilitzarem lrsquoordre dd al terminal Abans de fer servir aquest ordre haurem de descomprimir el contingut del zip a la carpeta que vulguem (es recomana utilitzar la carpeta personal homeusu-ari)
Un cop tenim descomprimit el contingut del zip obrirem una sessioacute al terminal i escriurem
cd ~
df -h
umount devsdd1
sudo dd bs=4M if=~2013-02-09-wheezy-raspbianimg of=devsdd
Anirem a la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~)
Buscarem la targeta sd i el seu nom a la seguumlent llista ens haurem drsquoapuntar el que posi a la prime-ra columna com devsdd (sense el numero) Assegureu-vos que aquest eacutes el dispositiu on vo-leu instalmiddotlar el Raspbian
Abans drsquoinstalmiddotlar Raspbian haurem de des-muntar les particions corresponents a la targeta SD utilitzant lrsquoordre umount en el cas de tenir meacutes drsquouna particioacute haurem drsquoexecutar aquesta ordre meacutes drsquouna vegada
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom del arxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
12
Mac OS X
Per instalmiddotlar Raspbian a Mac OS X tambeacute utilitza-rem lrsquoordre dd pero el funcionament per buscar en quin disc volem instalmiddotlar raspbian eacutes diferent Recomanem extreure el contingut del zip a la car-peta Usersusuari
Comenccedilarem buscant la targeta on volem instalmiddotlar raspbian executant la seguumlent ordre i copiarem el disk4 (sense agafar la particioacute)
Desmuntarem el disk en quumlestioacute
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom de lrsquoarxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
diskutil list
diskutil unmountDisk devdisk4
sudo dd bs=1m if=~2013-02-09-wheezy-raspbianimg of=devsdb
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
11
Linux
Per instalmiddotlar Raspbian des drsquoun sistema operatiu Linux utilitzarem lrsquoordre dd al terminal Abans de fer servir aquest ordre haurem de descomprimir el contingut del zip a la carpeta que vulguem (es recomana utilitzar la carpeta personal homeusu-ari)
Un cop tenim descomprimit el contingut del zip obrirem una sessioacute al terminal i escriurem
cd ~
df -h
umount devsdd1
sudo dd bs=4M if=~2013-02-09-wheezy-raspbianimg of=devsdd
Anirem a la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~)
Buscarem la targeta sd i el seu nom a la seguumlent llista ens haurem drsquoapuntar el que posi a la prime-ra columna com devsdd (sense el numero) Assegureu-vos que aquest eacutes el dispositiu on vo-leu instalmiddotlar el Raspbian
Abans drsquoinstalmiddotlar Raspbian haurem de des-muntar les particions corresponents a la targeta SD utilitzant lrsquoordre umount en el cas de tenir meacutes drsquouna particioacute haurem drsquoexecutar aquesta ordre meacutes drsquouna vegada
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom del arxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
12
Mac OS X
Per instalmiddotlar Raspbian a Mac OS X tambeacute utilitza-rem lrsquoordre dd pero el funcionament per buscar en quin disc volem instalmiddotlar raspbian eacutes diferent Recomanem extreure el contingut del zip a la car-peta Usersusuari
Comenccedilarem buscant la targeta on volem instalmiddotlar raspbian executant la seguumlent ordre i copiarem el disk4 (sense agafar la particioacute)
Desmuntarem el disk en quumlestioacute
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom de lrsquoarxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
diskutil list
diskutil unmountDisk devdisk4
sudo dd bs=1m if=~2013-02-09-wheezy-raspbianimg of=devsdb
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
12
Mac OS X
Per instalmiddotlar Raspbian a Mac OS X tambeacute utilitza-rem lrsquoordre dd pero el funcionament per buscar en quin disc volem instalmiddotlar raspbian eacutes diferent Recomanem extreure el contingut del zip a la car-peta Usersusuari
Comenccedilarem buscant la targeta on volem instalmiddotlar raspbian executant la seguumlent ordre i copiarem el disk4 (sense agafar la particioacute)
Desmuntarem el disk en quumlestioacute
Ara executarem lrsquoordre dd amb permisos drsquoadmi- nistrador al modificador ldquoif=rdquo posarem la carpeta on hem descomprimit el zip (la de lrsquousuari eacutes per defecte o ~) amb el nom de lrsquoarxiu img descom-primit i al modificador ldquoof=rdquo escriurem el que hem copiat abans amb lrsquoanterior ordre
diskutil list
diskutil unmountDisk devdisk4
sudo dd bs=1m if=~2013-02-09-wheezy-raspbianimg of=devsdb
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
13
6 Primer inici i configuracioacute de la CodePiAra ja estem preparats per posar la targeta SD a la Raspberry Pi i connectar tots els cables per comenccedilar a programar A continuacioacute hem de se-guir uns passos que nomeacutes podrem fer durant la primera arrencada del sistema i que ens perme-tran iniciar lrsquoescriptori automagraveticament posar la CodePi en catalagrave i configurar la disposicioacute del te-clat entre drsquoaltres coses
Quan iniciem per primera vegada la Raspberry Pi amb el sistema operatiu Raspbian ens apareixeragrave la seguumlent pantalla on ens mourem utilitzant les fletxes i la tecla intro
La primera cosa que seleccionarem seragrave ldquoboot_behaviorrdquo que ens permetragrave inciar lrsquoescriptori quan el sistema iniciiuml
Ens mourem amb el teclat (dreta - esquerre) per fer que estigui seleccionat ldquoyesrdquo clicarem enter
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
14
Ara a continuacioacute ens mourem fins a ldquoexpand_rootfsrdquo que ens permetragrave expandir el tamany de la particioacute arrel de la Raspberry Pi al tamany magravex-im de la targeta SD eacutes a dir si tenim una targeta de 4 Gb si no fessim aquesta opcioacute estariacuteem util-itzant uacutenicament 2 Gb de capacitat
Acceptarem el seguumlent diagraveleg i passarem a con-figurar els idiomes
Buscarem ldquochange_localerdquo per canviar els idio-mes i la disposicioacute del teclat al catalagrave
De la seguumlent llista seleccionarem mitjanccedilant lrsquoes-pai del teclat totes les codificacions que comencin per ldquoCA_Per baixar a buscar-les utilitzarem les fletxes (amunt-avall) i per acabar clicarem la del costat dret i enter
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
15
Seleccionarem ldquochange_timezonerdquo per canviar la zona horagraveria de la Raspberry Pi i els temes rela-cionats amb aquesta
A continuacioacute seleccionarem el nostre continent
I per uacuteltim buscarem una ciutat que estigui a la mateixa zona horagraveria que nosaltres i la seleccio-nariacuteem tambeacute amb enter
64 Descarregar i executar ScriptPer descarregar lrsquoscript hem donar permisos i ex-ecutar-lo aixiacute que escriurem les seguumlents ordres en el terminal que podeu trobar a lrsquoescriptori
cd tmpmkdir CodePicd CodePiwget httpwwwtomorrowdevcomcodepiwiringPi-installshchmod +x wiringPi-installshwiringPi-installsh
Ja hem acabat de descarregar el programari que ens permetragrave programar amb la CodePi
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
16
7 PragravectiquesRecomanacioacute mirar aquests tutorials introduc-toris al llenguatge C httpthenewbostonorglistphpcat=14
Aquiacute teniu un quadre que us serviragrave lrsquoequivalegravencia entre els pins del GPIO i els que haurem de posar en el codi
Ja queda menys perquegrave puguis comenccedilar a pro-gramar perograve abans de fer-ho hauragraves de saber com compilar un programa Probablement ara et preguntaragraves quegrave eacutes compilar doncs compilar eacutes el proceacutes que fa un programa per traduir el codi que nosaltres hem escrit a codi binari amb la fi-nalitat de que el nostre ordinador pugui entendre cada ordre
Per compilar un codi escrit en C farem servir el compilador cc Abans drsquoutilitzar aquest programa haurem drsquoindicar a on hem guardat la nostra pragravec-tica amb lrsquoordre cdcc
-o practica
-Wall
-Iusrlocalinclude
-Lusrlocallib
practicac
-lwiringPi
Primer de tot posarem lrsquoordre al terminal
Utilitzarem el modificador -o per establir quin seragrave el nom del programa de sortida per exemple ldquopragravecticardquo
Amb aquest modificador indicarem que volem que ens doni tota la informacioacute dels errors de sintaxis del fitxer
Amb aquest indicarem on es troben els fitxers de la llibreria a incloure dintre del nostre fitxer
Utilitzant aquest altre modificador establim el di-rectori on ha de buscar els fitxers de la llibreria
Ara indicarem el nom del fitxer on es troba el nos-tre codi sempre acabant amb la terminacioacute c per exemple ldquopragravecticacrdquo
Amb aquest modificador posem la llibreria wiring-Pi a la llista de llibreries que han de ser afegides
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
17
Al final introduirem tot seguit al terminal una ordre similar a la seguumlent
cc -o practica -Wall -Iusrlocalinclude -Lusrlocallib practicac -lwiringPi
A part de saber compilar abans de comenccedilar a programar i a fer els nostres circuits haurem de saber quins soacuten els pins on haurem de connectar als cables a la Raspberry Pi aquest pins els iden-tificarem utilitzant nuacutemeros
La seguumlent taula ens permet saber lrsquoequivalegravencia entre els nuacutemeros de la GPIO els nuacutemeros de wiringPi la llibreria que interpretaragrave el nostre codi i la posicioacute dels pins
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
18
Des que la variable i eacutes igual a 1 fins i mentre que aquesta sigui igual o meacutes petita que10 executa el codi
Mentre que la variable D sigui igual a 5 el codi entre claus es llegiragrave infinites vegades
Si la variable X no eacutes meacutes petita que 7 fes una altra cosa
Si la variable X eacutes meacutes petita que 7 fes alguna cosa
70 Iniciacioacute al llenguatge CAbans de comenccedilar a programar cal tenir en compte els conceptes de condicional i de cicle
Els condicionals ldquoif - elserdquo nomeacutes executen el codi a continuacioacute si la condicioacute que li fiquem entre paregraventesis eacutes certa Ho podriacuteem comparar amb el que seria una oracioacute condicional No eacutes obligatori perograve podem afegir la partiacutecula ldquoelserdquo que eacutes lrsquoequivalent a la paraula ldquosi nordquo En el cas a continuacioacute com que el condicional no es compleix srsquoexecutaria lrsquoelse
if (X lt 7) Fes alguna cosa else Fes una altra cosa
Els bucles ldquoforrdquo soacuten rutines que serveixen per ex-ecutar un codi un determinat nuacutemero de vegades Teacute tres parts separades per punt i coma entrada condicioacute i increment A la entrada li donem un va-lor a una variable A la condicioacute determinem que la rutina srsquoexecuti nomeacutes si eacutes compleix la condicioacute utilitzant la variable drsquoentrada Finalment en el in-crement fixem un nou valor a la variable aquesta part srsquoexecutaragrave a cada cicle En llenguatge C si no afegim cap dels tres paragravemetres el bucle seragrave infinit
for (int i = 1 i lt= 10 i++) Fes alguna cosa
La sentegravencia ldquowhilerdquo defineix que un codi srsquoexe-cutaragrave infinitament mentre que la condicioacute que es defineix sigui certa
while (D==5) Fes alguna cosa
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
19
71 Bloc 1 (Bagravesic)711 Hola moacuten
En aquesta pragravectica escriurem un text a la consograve-la el conegut ldquoHello Worldrdquo
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) printf(ldquohola moacutenrdquo)
if (wiringPiSetup() == -1) exit (1)
return 0
712 Encendre un LED
Hem drsquoimportar aquestes llibreries per tal que la RaspberryPi entengui el codi
Aquesta eacutes la funcioacute principal (main) i srsquoexecutaragrave tot el que fiquem aquiacute dins
Amb la funcioacute printf() el que aconseguim eacutes que es mostri al terminal el text que hi posem entre comentes
Aquestes liacutenies de codi soacuten simplement compro-vacions per assegurar-nos que tot funciona cor-rectament Soacuten negligibles perograve eacutes recomanable posar-les Les afegirem a totes les pragravectiques
Connectarem la pota llarga (agravenode) del LED al pin 5v de la GPIO i lrsquoaltre pota (cagravetode) a una resistegraven-cia de 180Ω Aquesta distincioacute entre potes es deu a que els LEDs estan polaritzats mireu el glossa-ri per saber-ne meacutes Tot seguit connecteu lrsquoaltra pota de la resistegravencia al pin GROUND
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void)
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
20
Comprovacionsif (wiringPiSetup() == -1) exit (1)
int pin = 1
printf(ldquoEncenem el pin 18rdquo)
pinMode(pin OUTPUT)
digitalWrite(pin 1)
return 0
713 Encendre i apagar un LED cada dos segons 10 vegades
El que podeu veure aquiacute eacutes el que srsquoanomena un comentari del codi Tot allograve que escrivim despreacutes de ldquordquo el compilador no ho llegiragrave i per tant nomeacutes serveix per donar indicacions al programador
Declarem la variable pin que com eacutes un nombre enter escriurem int
Fem un printf() tal i com hem apregraves a la pragravectica anterior Escrivim el 18 ja que la numeracioacute de la llibreria wiringPi canvia respecte a la sortida real (mirar el cuadre de la pagravegina 17)
Amb la funcioacute pinMode() declarem que el pin nuacutemero 1 en aquest cas sigui un pin de sortida de corrent (OUTPUT)
Una vegada li hem dit que eacutes de sortida li hem de dir si el volem encegraves ldquo1rdquo o apagat ldquo0rdquo amb la funcioacute digitalWrite()
Utilitzarem el muntatge la de pragravectica anterior amb la diferegravencia que en comptes de connectar lrsquoagravenode del LED al pin de 5v el connectarem al pin 18 de la Raspberry Pi Drsquoaquesta manera podrem gestionar el pas de lrsquoelectricitat a traveacutes drsquoun petit programa que crearem a continuacioacute
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
21
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt
int main (void) int pin = 1
if (wiringPiSetup() == -1) exit (1)
pinMode(pin OUTPUT)
for (int i=1ilt=10i++)
printf(ldquoLED Onnrdquo) digitalWrite(pin 1)
delay(2000)
printf(ldquoLED Offnrdquo) digitalWrite(pin 0)
delay(2000)
return 0
Utilitzem un bicle ldquoforrdquo per executar el codi 10 vegades
Encenem el LED
Fem un delay() de 2000 milmiddotlisegons (2 segons) que ens serveix per aturar el programa i per tant mantenir el LED encegraves durant aquest temps
Apaguem el LED
El mantenim apagat 2 segons
Lrsquoexpressioacute n serveix per canviar de liacutenia
Proposta Ara que ja saps els conceptes bagravesics de la CodePi intenta fer lrsquoequivalent al codi Morse per demanar ajuda SOS middot middot middot ndash ndash ndash middot middot middot (on cada punt significa LED encegraves durant 14 de segon i cada ralla LED encegraves durant mig segon) Juga amb el valor de la funcioacute delay() per fer que el LED estigui encegraves durant meacutes o menys temps
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
22
72 Bloc 2 (Mitjagrave)721 Encendre un LED apretant un botoacute
Utilitzar el muntatge del LED que hem fet servir a la pragravectica anterior A meacutes a meacutes hem drsquoafegir un polsador Connectarem la pota superior esquerra del polsador al pin de 5v i la inferior esquerra al pin 23 de la GPIO
Connectem a la pota que aniragrave a parar al pin 23 una resistegravencia de 10KΩ al GROUND per forccedilar lrsquoestat LOW quan el polsador no estagrave apretat
include ltwiringPihgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltstdiohgt int main (void) int pin_LED = 1 int pin_boto = 4 printf (ldquoEncenent un LED apretant un botoacutenrdquo) if (wiringPiSetup() == -1) exit (1) pinMode(pin_LED OUTPUT) pinMode(pin_boto INPUT)
for () while (digitalRead (pin_boto) == 1) digitalWrite(pin_LED 1)
else digitalWrite(pin_LED 0)
return 0
Declarem el LED com un pin de sortidaI el botoacute com un pin drsquoentrada
Si no fiquem variables al for aquest srsquoexecutaragrave sempre
Amb la funcioacute digitalRead() detectem si passa cor-rent pel pin 8 eacutes a dir si el botoacute ha estat apretat Si eacutes aixiacute fem que srsquoencengui el LED
Si no fem que srsquoapagui
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
23
722 Encendre un LED apretant tots els puladors
Utilitzar el muntatge de la pragravectica anterior i afegir dos polsadors meacutes amb el mateix proceacutes connec-tats als ports 24 i 25 de la Raspberry Pi
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int main (void) int pin_LED = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
if (wiringPiSetup() == -1) exit (1)
pinMode(pin_LED OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT) for () Apretats while (digitalRead(pin_boto_A) == HIGH ampamp digitalRead(pin_boto_B) == HIGH ampamp digitalRead(pin_boto_C) == HIGH) digitalWrite(pin_LED 1)
Declarem el LED i els tres botons que tal i com posa a lrsquoesquema corresponen als pins 23 24 i 25 de la GPIO
Si els tres polsadors estan premuts passa corrent pels tres i per tant srsquoenceacuten el LED
En aquest cas utilitzem HIGH i LOW en lloc de 1 i 0 respectivament HIGH significa que hi ha elec-tricitat i LOW que no hi ha
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
24
No apretats while (digitalRead(pin_boto_A) == LOW ampamp digitalRead(pin_boto_B) == LOW ampamp digitalRead(pin_boto_C) == LOW) digitalWrite(pin_LED 0)
Si no apagarsquol
723 Semagravefor amb polsador
En aquesta pragravectica crearem un semagravefor de via-nants i de cotxes Com alguns semagravefors aquests teacute un botoacute amb el qual els vianants demanen que es posi verd aixiacute que el dels cotxes es posa ver-mell
Connectarem dos LEDs (vermell i verd) als pins 18 i 23 de la Raspberry Pi amb una resistegravencia de 180Ω Tambeacute connectarem tres LEDs meacutes (verd vermell i taronja) de la mateixa manera en els ports 17 21 i 22 de la GPIO
A diferegravencia de les altres pragravectiques amb polsa-dors en aquesta el connectarem al port SDA0 i al GROUND ja que nomeacutes ens interessa detectar quan es prem
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
25
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
define VERMELL 0define GROC1define VERD 2define VERMELL_HOME3define VERD_HOME4
define BOTO 8
void setup (void) int i
if (geteuid () = 0) exit (0)
if (wiringPiSetup () == -1) exit (1)
fflush(stdout) for (i = 0 i lt 5 ++i) pinMode (i OUTPUT) digitalWrite (i 0) digitalWrite(VERD1)digitalWrite(VERMELL_HOME1) pinMode (BOTO INPUT)
printf (ldquoSetup fetnrdquo)
int main (void) setup () for () esperaBoto () aturaTransit () camina () tempsEspera () iniciaTransit ()
Amb lrsquoexpressioacute define li diem a la magravequina que cada cop que escrivim VERMELL en realitat es-tem posant el nombre 0 i el mateix amb les altres paraules
Fem un setup amb tota la configuracioacute necessagraveria
fflush() eacutes una funcioacute complexa que serveix per quumlestions de tractament de memograveria del sistema per evitar errors
Executem totes les funcions una darrera lrsquoaltra de manera indefinida
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
26
Esperant a que lrsquousuari premi el botoacute per comenccedilar
Fem que el semagravefor dels cotxes canviiuml de verd a vermell passant pel groc
Fem que el semagravefor dels vianants es posi verd
Temps intermig des que srsquoacaba de caminar fins que el trafic comenccedila
void esperaBoto (void) printf (ldquoEsperant el botoacute ldquo)fflush(stdout) while (digitalRead (BOTO) == HIGH) delay (100) printf (ldquoEsoerenrdquo)
void aturaTransit()printf(ldquoAturanteltraficldquo)fflush(stdout)digitalWrite(VERD0) digitalWrite (GROC 1) delay (2000) digitalWrite (GROC 0) digitalWrite(VERMELL1) delay (2000) printf (ldquoAturatsnrdquo)
void camina ()printf(ldquoCaminaldquo)fflush(stdout)
digitalWrite(VERMELL_HOME0)digitalWrite(VERD_HOME1) delay (10000) digitalWrite(VERMELL0) digitalWrite (GROC 1)
printf (ldquoJa han caminatnrdquo)
void tempsEspera () int i
printf (ldquoTemps drsquoespera ldquo) fflush(stdout)
for (i = 0 i lt 8 ++i)
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
27
delay (500) digitalWrite(VERD_HOME0) digitalWrite (GROC 0) delay (500) digitalWrite(VERD_HOME1) digitalWrite (GROC 1)
void iniciaTransit ()printf(ldquoInicianttraficldquo)fflush(stdout)
digitalWrite(VERD_HOME0)digitalWrite(VERMELL_HOME1) delay (500) digitalWrite (GROC 0) digitalWrite(VERD1)
Deixem via lliure pels vehicles i posem el semagrave-for vermell pels vianants
Proposta Utilitzant el que has apregraves en aquest bloc crear un projecte amb uns quants LEDs en fila que srsquoactivin ascendentment quan apretes un botoacute
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
28
73 Bloc 3 (Alt)731 Sistema portes logravegiques I
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b) return OR(AND(NE-GADA(a)b)AND(aNEGADA(b))) f(a b) = arsquob + abrsquo
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5
int apretat_A = 0 int apretat_B = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT)
Crearem una funcioacute per a cada porta logravegica de tal manera que sigui meacutes fagravecil poder-ho aplicar despreacutes
Aquesta seragrave la foacutermula que compliragrave la taula de la veritat en aquest cas eacutes f(a b) = arsquob +abrsquo
Creem dos booleans (variables que poden ser 0 o 1) que ens indicaran si el botoacute ha estat premut o no
Declarem els pins drsquoentrada i de sortida com a totes les pragravectiques anteriors
El seguumlent projecte fa la mateixa funcioacute que acon-seguiriacuteem amb xips de portes logravegiques perograve fent els cagravelculs a partir de la RaspberryPi En aquest cas compleix la taula de la veritat drsquoun OR ex-clusive eacutes a dir nomeacutes srsquoencendragrave el LED quan premem un dels dos botons mai srsquoencendragrave si premem els dos o no en premem cap
Hem de crear un circuit amb dos botons i un LED connectats als ports del GPIO que srsquoutilitzin en el codi
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
29
for ()
Apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 1 while (digitalRead(pin_boto_B) == LOW) apretat_B = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0
Mostra resultat if (f(apretat_A apretat_B) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins estan premuts
Comprovem quins no estan premuts
I apliquem la foacutermula amb els valors drsquoentrada cor-responents Si la foacutermula eacutes igual a 1 srsquoencendragrave el LED si no no srsquoencendragrave
732 Sistema portes logravegiques II
include ltstdiohgtinclude ltstdlibhgtinclude ltunistdhgtinclude ltwiringPihgt
Partim de la mateixa base que la pragravectica ante-rior perograve en aquesta incloem una tercera variable drsquoentrada Aixiacute que hem drsquoafegir un nou botoacute en el pin del GPIO que srsquoescau
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
30
Seguim el patroacute de les foacutermules emprades a la pragravectica anterior
En aquest cas tenim tres variables drsquoentrada perograve la mecagravenica eacutes la mateixa Es pot jugar amb la foacutermula i anar provant diferents combinacions
Necessitem tres variables ja que hi ha tres botons
Declaracions
Comprovem quins estan premuts
int AND (int a int b) return a ampamp b
int OR (int a int b) return a || b
int NEGADA (int a) return a
int f(int a int b int c) return OR(c AND(NEGADA(a)b)) f(a b c) = c + arsquob
int main (void) int pin_LED_S = 1
int pin_boto_A = 4 int pin_boto_B = 5 int pin_boto_C = 6
int apretat_A = 0 int apretat_B = 0 int apretat_C = 0
pinMode(pin_LED_S OUTPUT) pinMode(pin_boto_A INPUT) pinMode(pin_boto_B INPUT) pinMode(pin_boto_C INPUT)
for () Apretat while (digitalRead(pin_boto_A) == HIGH) apretat_A = 1
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
31
while (digitalRead(pin_boto_B) == HIGH) apretat_B = 1 while (digitalRead(pin_boto_B) == HIGH) apretat_C = 1
No apretat while (digitalRead(pin_boto_A) == LOW) apretat_A = 0 while (digitalRead(pin_boto_B) == LOW) apretat_B = 0 while (digitalRead(pin_boto_C) == LOW) apretat_C = 0
Mostra resultat if (f(apretat_A apretat_B apretat_C) == 1) digitalWrite(pin_LED_S HIGH) else digitalWrite(pin_LED_S LOW)
Comprovem quins no estan premuts
Com al circuit anterior apliquem la foacutermula i si aquesta doacutena 1 encenem el LED
Proposta Ara que ja has apregraves els conceptes meacutes fonamentals de la CodePi inventarsquot un circuit amb el nivell de dificultat que consideris No et quedis amb el que se trsquoha ensenyat aquiacute sinoacute que cerca meacutes megravetodes que puguis utilitzar La creativitat eacutes bagravesica per a tot bon enginyer i amb aquesta pragravectica volem que demostris de quegrave ets capaccedil
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
32
8 Vols saber-ne meacutes El moacuten de la programacioacute i lrsquoelectrogravenica eacutes infinit La comunitat geek (= interessada) en aquests te-mes eacutes una de les meacutes servicials i altruista de tota la xarxa aixiacute que es poden trobar una quantitat inacabable de tutorials i pagravegines web especialitza-des en el que vulguem saber
81 Programari lliureEl programari lliure eacutes la base de la informagravetica ac-tual i encara juga un gran paper en algunes agraverees com els servidors web o els mogravebils amb sistema operatiu Android Aquiacute teniu un conjunt de pagravegines on podeu aprofundir sobre aquest apassionant moacuten de la llibertat digital
httpcawikipediaorgwikiRichard_Matthew_Stallmanhttpwwwfsforghttpwwwgnuorghttpwwwlinuxorghttpwwwunixorghttpwwwubuntucom
82 Raspberry PiSi desitges saber meacutes sobre el projecte sense agravenim de lucre Raspberry Pi i seguir fent projectes amb ella visita les pagines que trobaragraves a con-tinuacioacute Aquestes et donaran idees de quegrave fer amb aquest petit perograve fascinant ordinador
httplearnadafruitcomcategorylearn-raspber-ry-pihttpwwwraspberrypiorgwwwraspberrypiorghttpdangerousprototypescom20130202rasp-berry-pi-supercomputerhttpreviewscnetcoukdesktops25-fun-things-to-do-with-a-raspberry-pi-50009851httplearnadafruitcompi-thermal-printer
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
33
83 Electrogravenica Si lrsquoelectrogravenica bagravesica que has apregraves durant els tutorials de la CodePi trsquoha fet veure que aquest eacutes el moacuten que a tu trsquoagrada no paris A continu-acioacute et deixem pagravegines web on trobaragraves les bases de lrsquoelectrogravenica meacutes complexa i tambeacute molts nous circuits per muntar i seguir descobrint aquest moacuten que avui en dia fa que tots els aparells endollats a al corrent puguin funcionar
httpwwwinstructablescomidBeginners-Elec-tronics-ProjectshttpwwwinstructablescomidElectronic-Proj-ects-For-Beginnershttpwwwcircuitstodaycomsimple-electron-ics-projects-and-circuitshttpswwwsparkfuncomtutorialshttplearnadafruitcom
84 ProgramacioacuteDiuen que per ser un bon programador srsquohan de tenir unes habilitats que no tothom teacute disciplina ordre logravegica creativitat capacitat per resoldre qualsevol problema i per sobre de tot persistegravencia i passioacute Si creus que tens aquestes qualitats do-na-li una oportunitat a la programacioacute A continu-acioacute et deixem un recull de les pagravegines web que creiem que meacutes et poden ajudar a introduir-te una mica meacutes en la programacioacute web i la drsquoapli-cacions per a mogravebils
httpwwwcodeorghttpscratchmiteduhttpwwwcodecademycom
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
34
9 GlossariC (llenguatge de programacioacute) Des de la seva creacioacute lrsquoany 1972 srsquoha consolidat com un dels llenguatges de programacioacute meacutes utilitzats per fer aplicacions de software Eacutes considerat un dels meacutes bagravesics i meacutes comuns per introduir-se a la pro-gramacioacute Les grans companyies han utilitzat el C com a base per crear altres llenguatges com lrsquoObjective-C (utilitzat per fer les aplicacions per dispositius drsquoApple) o el C (creat per Microsoft i utilitzat entre altres coses per fer programes in-formagravetics per Windows)
Condensador Component electrogravenic classificat dins del grup dels passius i que per tant no emet cap senyal El podriacuteem definir com un acumula-dor drsquoelectrons que els deixa anar quan arriba a la seva capacitat magravexima Hi ha condensadors de dos tipus els electroliacutetics i els normals En les pragravec-tiques utilitzarem electroliacutetics i com que aquests tenen polaritat eacutes important tenir en compte quina eacutes la pota positiva i quina eacutes la negativa a lrsquohora de connectar-lo
Diacuteode Component electrogravenic passiu Teacute polaritat i seria lrsquoequivalent a una vagravelvula antiretorn lrsquoelec-tricitat nomeacutes pot anar en un sentit
Electrogravenica Disciplina que estudia els com-ponents electrogravenics que funcionen amb un flux drsquoelectrons (corrent continua)
Funcioacute Fragment de codi que conte un seguit drsquoaccions i que hi pots accedir cridant la funcioacute en comptes de repetint el codi Podriacuteem comparar-ho amb una funcioacute matemagravetica en la que tenim vari-ables drsquoentrada que tractant-les a la funcioacute ob-tenim una informacioacute de sortida
GPIO Soacuten les sigles de ldquoGeneral Purpose InputOutputrdquo Si mirem la Raspberry Pi soacuten els pins de sortida on hi connectem els cables amb els que programem la placa electrogravenica Lrsquoavantatge drsquoaquest tipus de connector respecte altres eacutes que es pot gestionar mitjanccedilant programacioacute i aixograve eacutes precisament el que explicarem en aquest manual
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
35
HDMI Soacuten les sigles de ldquoHigh-Definition Multime-dia Interfacerdquo Serveix per enviar viacutedeo i agraveudio a una pantalla Nosaltres lrsquoutilitzarem per connectar la RaspberryPi a una pantalla
LED Acrogravenim de ldquoLight Emitting Dioderdquo Eacutes un tipus de diacuteode el qual teacute una pelmiddotliacutecula de fogravesfor entre els dos connectors que fa que quan passi el corrent generi llum Com qualsevol altre diacuteode eacutes important tenir en compte la polaritat
RAM Acrogravenim de ldquoRandom Access Memoryrdquo Eacutes la part de lrsquoordinador encarregada drsquoemmagatze-mar els arxius temporals
RCA El connector RCA consisteix en diferents cables amb la punta de diferent color que serveix-en per transmetre agraveudio i viacutedeo
ROM De lrsquoanglegraves ldquoRead Only Memoryrdquo eacutes la uni-tat de memograveria on es guarda el sistema operatiu
Resistegravencia Eacutes un component electrogravenic que teacute com a funcioacute reduir el flux drsquoelectrons afi de controlar la seva potegravencia Eacutes molt comuacute a lrsquoelectrogravenica ja que eacutes molt necessari per assegu-rar-nos del correcte funcionament drsquoelements com el LED que sense una resistegravencia que limiteacutes el corrent podrien cremar-se
Placa base Eacutes la part de lrsquoordinador que conteacute elements com la RAM la ROM o el microproces-sador La placa base de lrsquoordinador que constru-irem amb aquest manual seria la progravepia Raspber-ry Pi
Protoboard Tambeacute coneguda com a Bread-board srsquoutilitza per crear circuits electrogravenics sense necessitat de soldar Per saber com funcio-na i com estan relacionats els diferents contactes consulteu aquesta webhttprduinostarcomdocumentaciongeneralpro-toboard-que-es-y-como-funciona
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
36
Terminal Eacutes el programa emprat per enviar ordres directes a lrsquoordinador i rebre respostes drsquoaquest Nosaltres lrsquoutilitzarem per instalmiddotlar els programes necessaris per programar les plaques electrograveniques i altres arxius necessaris
Variable Valor que canvia segons les operacions que es facin amb aquest al programa informagravetic Com ja sabeu hi ha variables independents (pe el temps) i dependents (pe si estagrave o no encegraves un LED que dependragrave drsquoaltres variables)
37
37