El micròfon del robot detecta el soroll ambiental. No sap reconèixer paraules, però si pot reaccionar a una palmada, o un crit. Altres robots més sofisticats com el de la imatge sí que poden parlar i reconèixer el llenguatge.
En aquesta pàgina analitzarem els valors del sensor, i l'usarem per a controlar el robot.
Primer que res, ens connectem.
In [ ]:
from functions import connect, sound, forward, stop
connect()
Si recordeu un exemple anterior, la funció sound
ens retorna un valor entre 0 i 100, segons la intensitat del so. Anem a provar-la de nou, però representant el seu valor en una gràfica.
Per a això, el que farem és recollir dades: llegirem els valors de la funció vàries vegades i els guardarem en la memòria de l'ordinador, per a després representar gràficament els valors.
Per a guardar dades en la memòria, els llenguatges de programació fan servir variables.
En el següent exemple, usem una variable anomenada data
, que contindrà la llista de valors que llegim del sensor. Inicialment estarà buida, i dins del bucle anirem afegint valors.
In [ ]:
data = [] # executeu este codi mentre parleu al micròfon
for i in range(200):
data.append(sound())
Ara representarem gràficament els valors llegits.
In [ ]:
from functions import plot
plot(data)
Normalment voreu valors que pugen i baixen, entre 0 i 100, segons parleu menys o més fort. Podeu provar també a donar palmades.
Aleshores, per a controlar el robot, podem fer que reaccione quan el valor del so siga més alt d'un determinat llindar (umbral en castellà).
In [ ]:
while sound()<50:
forward()
stop()
In [ ]:
from functions import backward, left, right
from time import sleep
from random import random
try:
while True:
while sound()<50:
forward()
backward()
sleep(1)
if random() > 0.5:
left()
else:
right()
sleep(1)
except KeyboardInterrupt:
stop()
En lloc de substiuir la condició de contacte per la de so, també podem afegir eixa segona condició a la primera. Els llenguatges de programació poden fer operacions lògiques per a combinar condicions. No és tan complicat com pareix, per exemple, les dos condicions s'escriurien així:
mentre el so siga menor que 50 i no hi haja contacte
Per a programar-ho en Python, només cal saber que "i" en anglès s'escriu "and" ;-)
In [ ]:
from functions import backward, left, right, touch
from time import sleep
from random import random
try:
while True:
while sound()<50 and not touch():
forward()
backward()
sleep(1)
if random() > 0.5:
left()
else:
right()
sleep(1)
except KeyboardInterrupt:
stop()
Controlar el robot, per a que després gire a l'atzar, no queda massa bé. Seria millor que poguérem controlar la direcció del gir amb el so. Recordeu que el robot no reconeix els sons, només els canvis de volum.
Com podríeu indicar-li la direcció de gir? A la millor, en compte d'un número a l'atzar, podríeu comprovar el valor del sensor de so un segon cop. Aleshores, amb una sola palmada, el robot giraria cap a un costat, i amb dos, cap a l'altre.
In [ ]:
from functions import backward, left, right, touch
from time import sleep
from random import random
try:
while True:
while sound()<50 and not touch():
forward()
backward()
sleep(1)
if sound() < 50:
left()
else:
right()
sleep(1)
except KeyboardInterrupt:
stop()
Podeu fer una versió completa amb tot?
Complicat? No tant, però cal tindre les idees clares!
In [ ]:
from functions import backward, left, right, touch
from time import sleep
from random import random
try:
while True:
while sound()<50 and not touch():
forward()
if touch():
backward()
sleep(1)
if random() < 0.5:
left()
else:
right()
sleep(1)
else:
backward()
sleep(1)
if sound() < 50:
left()
else:
right()
sleep(1)
except KeyboardInterrupt:
stop()
In [ ]:
from functions import disconnect
disconnect()
Si heu arribat fins ací fent totes les variants, enhorabona! Comenceu a controlar de debó la programació. Si no, no patiu, açò no s'apren en dos hores!
En aquesta pàgina hem donat una ullada a les variables i a les operacions lògiques, i hem anat anidant cada cop més bucles i condicionals. Així és la programació!
I només hem vist la meitat de sensors! Passem a vore doncs el tercer.