Salta al contingut

Exercicis de programació i robòtica — Tecnologia i Digitalització 3r ESO

Aquest tema et porta de la programació per blocs a la robòtica amb microcontroladors, com Arduino. Els exercicis et fan explicar què és un microcontrolador i on en trobes un, classificar components en entrades i sortides i entendre l'estructura d'un programa: què fa la funció setup i què fa la funció loop. Després dissenyes la lògica d'un robot que s'atura quan detecta un obstacle i distingeixes el control en llaç obert del control en llaç tancat. Les solucions expliquen cada decisió. Errors típics: posar al setup instruccions que s'han de repetir i confondre entrades amb sortides en connectar components.

Nivell bàsic

1

Exercici 1

Què és un microcontrolador i on en podem trobar un d'exemple a classe?

Mostra la solució

És un petit ordinador dins d'un sol xip, amb processador i memòria, que executa un programa i controla components. A classe en tenim un exemple a la placa Arduino, que programem per fer projectes d'electrònica i robòtica.

2

Exercici 2

Explica els tres passos de l'esquema entrada-procés-sortida en un sistema de control.

Mostra la solució

Entrada: el programa llegeix un sensor per obtenir informació del món. Procés: el programa decideix què cal fer, normalment amb un si condicional. Sortida: el programa dona una ordre a un actuador perquè faci una acció. En resum: percep, decideix i actua.

3

Exercici 3

Un programa d'Arduino conté la instrucció digitalWrite(13, HIGH). Què fa aquesta instrucció?

Mostra la solució

digitalWrite posa un pin digital en un estat concret.
Amb HIGH, el pin 13 es posa a nivell alt (5 V) i qualsevol component connectat a aquest pin, per exemple un LED amb la seva resistència, s'encén.
Si fos LOW, el pin estaria a 0 V i el LED s'apagaria.
Abans cal haver configurat el pin com a sortida amb pinMode(13, OUTPUT).

4

Exercici 4

Ordena correctament aquests passos de l'algorisme d'un semàfor per a vianants: (a) esperar 10 segons, (b) posar el semàfor en verd, (c) posar el semàfor en vermell, (d) esperar que algú premi el polsador.

Mostra la solució

Un algorisme és una seqüència ordenada de passos per resoldre un problema.
L'ordre correcte és: d, b, a, c.
Primer s'espera que algú premi el polsador (d), després es posa el verd (b), s'espera 10 s (a) i finalment es torna al vermell (c).

5

Exercici 5

En un programa, una variable x val 5. Quin valor té x després d'executar la instrucció x = x + 3? Explica què ha passat.

Mostra la solució

Primer es calcula la part dreta: x + 3 = 5 + 3 = 8.
Després, el resultat es guarda altre cop a la variable x, que passa a valer 8.
Una variable és un espai de memòria amb nom on es guarda un valor que pot canviar; el signe = indica assignació, no igualtat matemàtica.

6

Exercici 6

Volem que un LED estigui encès 1 segon i apagat 1 segon, de manera repetida. Escriu la seqüència d'instruccions d'Arduino (dins del loop), recordant que delay() rep el temps en mil·lisegons.

Mostra la solució

1 segon són 1000 ms.
Dins del loop:
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
Si ens oblidem de posar el segon delay, el LED s'apagaria i es tornaria a encendre tan de pressa que semblaria sempre encès.

7

Exercici 7

Entre quins valors dona una lectura la funció analogRead() d'una placa Arduino UNO? Què significa el valor mínim i el màxim si el sensor treballa entre 0 V i 5 V?

Mostra la solució

analogRead() dona un nombre enter entre 0 i 1023 (el convertidor analògic-digital és de 10 bits, 2102^{10} = 1024 valors).
El valor 0 correspon a 0 V i el valor 1023 correspon a 5 V.
Els valors intermedis són proporcionals a la tensió d'entrada.

8

Exercici 8

Digues si cada situació s'ha de resoldre amb un condicional (si… llavors) o amb un bucle (repetició): (a) fer parpellejar un LED 10 vegades; (b) encendre la llum si fa fosc; (c) mentre el polsador estigui premut, el motor gira.

Mostra la solució

(a) Bucle: una mateixa acció es repeteix un nombre de vegades conegut (bucle for).
(b) Condicional: només s'encén si es compleix una condició (si la llum és baixa).
(c) Bucle (while): l'acció es repeteix mentre es compleix una condició (polsador premut).

9

Exercici 9

Per moure el braç d'un robot fins a un angle concret i mantenir-lo allà, faries servir un motor de corrent continu o un servomotor? Justifica-ho.

Mostra la solució

Un servomotor.
Un servomotor és un motor amb control de posició: rep un senyal que indica l'angle desitjat (normalment entre 0° i 180°) i hi es col·loca i s'hi manté.
Un motor de corrent continu només gira lliurement, i caldria afegir-hi un sensor i un control per saber en quin angle és.

10

Exercici 10

Per què és útil afegir comentaris (per exemple, // Encén el LED) dins d'un programa si l'ordinador els ignora?

Mostra la solució

Els comentaris són explicacions per a les persones, que l'ordinador no executa.
Ajuden a entendre què fa cada part del programa quan el torna a llegir el propi autor o un altre company.
També faciliten buscar i corregir errors i modificar el programa més endavant.

Nivell intermedi

11

Exercici 11

Classifica en entrada o sortida cada component connectat a un Arduino: sensor de temperatura, motor, LED, polsador.

Mostra la solució

Entrades (donen informació a la placa): el sensor de temperatura i el polsador. Sortides (reben ordres de la placa): el motor i el LED. Les entrades es llegeixen; les sortides es governen.

12

Exercici 12

Explica la diferència entre un senyal digital i un d'analògic amb un exemple de cada.

Mostra la solució

Un senyal digital només té dos valors possibles, encès o apagat (1 o 0); per exemple, un polsador que està premut o no. Un senyal analògic pren un rang de valors entre un mínim i un màxim; per exemple, un LDR que dona més o menys valor segons la quantitat de llum que rep.

13

Exercici 13

Explica què fa la funció setup i què fa la funció loop en un programa d'Arduino.

Mostra la solució

La funció setup s'executa un sol cop al principi, quan la placa s'engega, i serveix per configurar-ho tot (per exemple, dir quins pins són entrades i quins sortides). La funció loop es repeteix contínuament mentre la placa està encesa i conté les accions que s'han de fer una vegada i una altra (llegir sensors, decidir i controlar actuadors).

14

Exercici 14

Per què les instruccions per llegir un sensor i actuar en conseqüència van dins del loop i no del setup?

Mostra la solució

Perquè aquestes accions s'han de fer contínuament: el sensor pot canviar de valor en qualsevol moment i la placa ha de reaccionar sempre. El loop es repeteix sense parar, així que hi comprova el sensor una vegada i una altra. El setup només s'executa un cop, per això només s'hi posa la configuració inicial.

15

Exercici 15

Dissenya la lògica d'un robot que s'aturi quan un sensor d'ultrasons detecti un obstacle a menys de 10 cm. Digues què és l'entrada, el procés i la sortida.

Mostra la solució

Entrada: el sensor d'ultrasons mesura la distància a l'obstacle. Procés: el programa comprova; si la distància és menor de 10 cm, cal aturar-se. Sortida: els motors s'aturen. Mentre la distància sigui més gran de 10 cm, els motors segueixen movent el robot endavant. Tot això es repeteix contínuament dins del loop.

16

Exercici 16

Quin valor té la variable n al final d'aquest programa? n = 0; per a cada i de 1 a 4: n = n + i. Fes una taula amb el valor de cada pas.

Mostra la solució

Anem pas a pas:
i = 1: n = 0 + 1 = 1
i = 2: n = 1 + 2 = 3
i = 3: n = 3 + 3 = 6
i = 4: n = 6 + 4 = 10
Al final, n = 10 (la suma dels nombres de l'1 al 4).

17

Exercici 17

Redacta en pseudocodi el control d'un ventilador: si la temperatura és superior a 28 °C, el ventilador s'ha d'engegar; en cas contrari, s'ha d'aturar. Indica l'entrada, el procés i la sortida.

Mostra la solució

Pseudocodi:
llegir temperatura
si temperatura > 28 llavors engegar ventilador
si no aturar ventilador
Entrada: sensor de temperatura. Procés: comparar el valor llegit amb 28 °C (condicional). Sortida: el ventilador, que és l'actuador.
Tot això va dins del loop perquè la temperatura s'ha de comprovar contínuament.

18

Exercici 18

Un sensor d'ultrasons emet un pols i rep l'eco al cap de 0,01 s. Si la velocitat del so és de 340 m/s, a quina distància és l'obstacle? Per què cal dividir per 2?

Mostra la solució

El pols fa un trajecte d'anada i tornada: d = v · t2\tfrac{t}{2}.
La distància total recorreguda pel so és 340 · 0,01 = 3,4 m.
La distància fins a l'obstacle és la meitat: 3,42=1,7\tfrac{3{,}4}{2} = 1{,}7 m.
Cal dividir per 2 perquè el temps mesurat inclou l'anada fins a l'obstacle i la tornada de l'eco.

19

Exercici 19

Per regular la velocitat d'un motor s'utilitza un senyal PWM amb analogWrite(pin, valor), on el valor va de 0 (sempre apagat) a 255 (sempre encès a 5 V). Quina és la tensió mitjana si valor = 51? Quin percentatge del temps està encès el senyal?

Mostra la solució

Cicle de treball = 51/255 = 0,20, és a dir, el 20% del temps el pin està a 5 V.
Tensió mitjana: 0,20 · 5 V = 1 V.
Amb valor = 255 el motor rebria 5 V (100%); amb 51, rep la cinquena part de la tensió i gira més a poc a poc.
El PWM permet simular una sortida analògica amb una sortida digital que s'encén i s'apaga molt ràpid.

20

Exercici 20

Un robot seguidor de línia té dos sensors infrarojos (esquerre i dret) que valen 1 quan veuen la línia negra i 0 quan veuen el terra blanc. Indica què ha de fer el robot en cada combinació (esquerre, dret): (0,1), (1,0), (1,1) i (0,0).

Mostra la solució

L'objectiu és mantenir la línia entre els dos sensors.
(0,1): la línia és a la dreta, i cal girar a la dreta.
(1,0): la línia és a l'esquerra, i cal girar a l'esquerra.
(1,1): els dos veuen la línia (per exemple, una intersecció), i cal avançar recte (o aturar-se segons el disseny).
(0,0): cap sensor veu la línia, per tant la línia és entre els dos sensors i s'avança recte, o s'atura si s'ha perdut.

21

Exercici 21

Un potenciòmetre connectat a 5 V a l'entrada analògica d'Arduino dona analogRead = 512 en una posició i 205 en una altra. Calcula la tensió que correspon a cada lectura (V = lectura · 51023\tfrac{5}{1023}).

Mostra la solució

Posició 1: V = 512 · 51023=2,50\tfrac{5}{1023} = 2{,}50 V (aproximadament la meitat de 5 V).
Posició 2: V = 205 · 51023=1,00\tfrac{5}{1023} = 1{,}00 V.
Comprovació: 1023 correspon a 5 V, així que 512 (la meitat) ha de ser la meitat de 5 V.

Nivell avançat

22

Exercici 22

Descriu amb les teves paraules (en pseudocodi o en llenguatge natural) la lògica d'un programa que encengui un LED quan es prem un polsador.

Mostra la solució

Al setup: configurar el pin del polsador com a entrada i el pin del LED com a sortida. Al loop: llegir el polsador; si el polsador està premut, encendre el LED; si no, apagar-lo. El loop repeteix aquesta comprovació contínuament, així que el LED segueix l'estat del polsador en tot moment.

23

Exercici 23

Quina diferència hi ha entre un control en llaç obert i un en llaç tancat? Posa un exemple de cada.

Mostra la solució

En llaç obert el sistema actua sense comprovar el resultat; per exemple, un reg que s'engega un temps fix cada dia, plogui o no. En llaç tancat, un sensor comprova el resultat i el sistema es corregeix; per exemple, una calefacció amb termòstat que mesura la temperatura i s'engega o s'atura per mantenir-la. El sensor és el que tanca el llaç.

24

Exercici 24

Escriu un programa complet d'Arduino en què un LED connectat al pin 9 parpelleja un cop cada segon (mig segon encès, mig segon apagat). Explica què fa cada part.

Mostra la solució

void setup() {
pinMode(9, OUTPUT); // el pin 9 és una sortida
}
void loop() {
digitalWrite(9, HIGH); // encén el LED
delay(500); // espera 0,5 s
digitalWrite(9, LOW); // apaga el LED
delay(500); // espera 0,5 s
}
El setup s'executa una sola vegada per configurar el pin, i el loop es repeteix contínuament: cada cicle dura 1 s, per tant el LED parpelleja un cop per segon.

25

Exercici 25

Un termòstat ha d'encendre l'escalfador quan la temperatura baixa per sota de 19 °C i apagar-lo quan pugi per sobre de 21 °C. Explica per què es fan servir dos llindars diferents i què fa l'escalfador quan la lectura és de 20 °C.

Mostra la solució

Amb dos llindars (histèresi) l'escalfador no es connecta i es desconnecta contínuament quan la temperatura és molt propera al valor desitjat, cosa que el desgastaria.
Entre 19 °C i 21 °C no es canvia l'estat: l'escalfador manté el que tenia.
Per tant, a 20 °C estarà encès si venia d'escalfar (la temperatura pujava des de 19 °C) i apagat si venia de refredar-se.
És un control en llaç tancat, perquè el sensor retroalimenta el programa.

26

Exercici 26

Analitza aquest fragment: per a cada i de 0 a 4 (5 repeticions): encendre el LED, esperar 300 ms, apagar el LED, esperar 300 ms. Quantes vegades parpelleja el LED i quant temps dura en total la seqüència? Què passaria si el bucle comencés a i = 1 amb la mateixa condició i < 5?

Mostra la solució

El bucle es repeteix per a i = 0, 1, 2, 3 i 4: són 5 repeticions, per tant el LED parpelleja 5 vegades.
Cada repetició dura 300 + 300 = 600 ms; en total 5 · 600 = 3000 ms = 3 s.
Si comencés a i = 1 i continués mentre i < 5, només es repetiria per a i = 1, 2, 3 i 4, és a dir, 4 vegades: 4 parpelleigs i 2,4 s.
Error típic: oblidar que els bucles compten des de 0.

27

Exercici 27

Escriu en pseudocodi l'algorisme d'un robot que avança i, quan un sensor d'ultrasons detecta un obstacle a menys de 15 cm, s'atura, retrocedeix durant 1 s, gira 90° a la dreta i torna a avançar. Quin tipus de control és?

Mostra la solució

Pseudocodi (dins del loop):
mesurar distància
si distància < 15 cm llavors
aturar motors
retrocedir durant 1 s
girar 90° a la dreta
fi del si
avançar
És un control en llaç tancat: el sensor mesura el resultat de l'acció (l'entorn) i el programa pren decisions segons aquesta informació.

28

Exercici 28

Un alumne escriu aquest codi per encendre un LED quan el sensor val 1: «if (sensor = 1) encendre LED». Troba l'error, explica per què és greu i escriu la instrucció corregida.

Mostra la solució

L'error és utilitzar = (assignació) en lloc de == (comparació).
Amb sensor = 1 no es comprova res: s'assigna el valor 1 a la variable i la condició sempre és certa, així que el LED s'encén sempre, tant si el sensor val 1 com si no.
Correcció: if (sensor == 1) { encendre LED }.
Es tracta d'un dels errors més comuns en programació.

29

Exercici 29

Un robot té dues rodes de 6,5 cm de diàmetre moguda cadascuna per un motor que gira a 120 rpm. Calcula la velocitat en cm/s i el temps que ha d'estar encès el motor per recórrer 2 m en línia recta. Expressa el temps en mil·lisegons per al delay().

Mostra la solució

Perímetre de la roda: π · 6,5 = 20,4 cm per volta.
120 rpm són 2 voltes per segon, així que v = 20,4 · 2 = 40,8 cm/s.
Temps per a 200 cm: t = 200/40,8 = 4,9 s.
El programa seria: motors ON; delay(4900); motors OFF.
En la pràctica la distància pot variar per patinatge de les rodes, per això s'afegeixen sensors.

30

Exercici 30

Un sistema de reg llegeix un sensor d'humitat cada 10 minuts. Si la lectura és inferior a 400 (terra seca), activa una bomba durant 5 s. Calcula quantes lectures fa en un dia i el temps màxim de reg diari, i quants litres s'utilitzarien en aquest cas si la bomba dona 6 L/min.

Mostra la solució

Lectures al dia: 24 h · 60 min / 10 min = 144 lectures.
Cas pitjor: es rega a cada lectura, 144 · 5 s = 720 s = 12 min de reg.
Aigua: 12 min · 6 L/min = 72 L.
És un control en llaç tancat: només rega si el sensor detecta terra seca, així s'estalvia aigua.

T'encalles amb aquest tema?

A L'Acadèmia de Vic t'ajudem amb classes individuals. Escriu-nos per WhatsApp.

Escriu-nos per WhatsApp (604 95 79 95)

Més informació: Reforç d'ESO a Vic · Classes particulars

Preguntes freqüents

Quina diferència hi ha entre setup i loop en un programa d'Arduino?

Setup s'executa una sola vegada en engegar, per configurar pins i variables. Loop es repeteix sense parar i conté el que el robot ha de fer contínuament.

Què és un control en llaç tancat?

Un sistema que mesura el resultat amb un sensor i corregeix l'actuació, com un termòstat. En llaç obert, en canvi, no es comprova el resultat.

Altres temes de Tecnologia i Digitalització 3r ESO

Utilitzem cookies d'analítica per millorar el web. Política

base44
Edit with Base44