Você está na página 1de 63

Astro Pi -

Aprender a Programar
um Raspberry Pi

Rui Delgado - ruidelgado@epalmada.pt


1
Raspberry Pi, o que é?

● Computador
● Pequeno
● Barato
● Baixo consumo
● Educativo

2
Versão mais recente

3
Tabela comparativa de versões

4
Sense Hat?

● HAT é um acrónimo de (Hardware Attached on-Top)


● Aloja um conjunto de sensores...
○ temperatura
○ pressão atmosférica
○ humidade
○ giroscópio
○ acelerómetro
○ magnetómetro

5
Sense Hat?

● Tem uma matriz de LEDs RGB (8x8)


● Tem um joystick de 5 posições
● Comunica com o Raspberry Pi por portas
GPIO (General Purpose Input/Output) que
são programáveis

6
AstroPi na ISS

7
O que se pode fazer com o RaspberryPi na
Terra?
• Computador de secretária

8
O que se pode fazer com o RaspberryPi na
Terra?
• Computador de secretária
• Aprender programação

9
O que se pode fazer com o RaspberryPi na
Terra?
• Computador de secretária
• Aprender programação
• Web server

10
O que se pode fazer com o RaspberryPi na
Terra?
• Computador de secretária
• Aprender programação
• Web server
• Computação embebida

11
Sistemas Operativos:
https://www.raspberrypi.org/

12
Recursos

13
Programação em Scratch 1.4

Ativar GPIO

Inicializar o Sense Hat

14
Formatar fundo da matriz de LED’s

15
Formatar cor do texto

16
Formatar velocidade texto

17
Exibir mensagens

18
Exibir mensagens

19
Exibir uma letra

20
iluminar um LED

21
Joystick do sense hat

22
PyCamera

23
Sensores do Sense Hat

24
Programar em Scratch 2.0

25
Programar em Scratch 2.0

Alterar a cor de um LED da matriz

Alterar a cor de todos os LEDs da matriz

Exibir uma letra


Exibir uma mensagem
Orientação no eixo da direção –Z
Orientação no eixo de rotação –Y
Orientação no eixo de inclinação –X
Temperatura
Pressão atmosférica 26
Programação em Python

1. Abrir o IDLE3 do Python


2. Na “Python Shell” ir ao separador
“File” e escolher “New File”

27
Programação em Python

from sense_hat import SenseHat


sense = SenseHat()

28
Formatar fundo da matriz de LED’s

sense.show_message("astro pi”, back_colour=[0,255,255])

29
Formatar cor do texto

sense.show_message("astro pi", text_colour=[255,0,0])

30
Formatar velocidade texto

sense.show_message("astro pi", scroll_speed=0.05)

31
Exibir mensagens

sense.show_message("astropi”)

32
Exibir mensagens

sense.show_message("astropi”, scroll_speed=0.05 ,

text_colour=[255,0,0] , back_colour=[0,255,255])
33
Exibir uma letra

sense.show_letter("A”)

34
A matriz é um sistema de coordenadas x,y que
começa no zero e no topo à esquerda (porta
HDMI para baixo)

iluminar um LED

sense.set_pixel(4, 3, [255, 255, 255])

35
Joystick do sense hat

sense.stick.direction_middle =

sense.stick.direction_up = …

sense.stick.direction_down = …

sense.stick.direction_left = …

sense.stick.direction_right = …

36
PyCamera
#importar biblioteca da camera #inicia visualização
from picamera import PiCamera camera.start_preview()

#criar instancia da classe #para visualização


camera = Picamera() camera.stop_preview()

#captura fotografia
Camera.capture(‘imagem.jpeg’)

Ver mais em http://picamera.readthedocs.io


37
Figuras na Matriz de LED’s
R = [255, 0, 0] # Red
W = [255, 255, 255] # White
question_mark = [W, W, W, R, R, W, W, W,
W, W, R, W, W, R, W, W,
W, W, W, W, W, R, W, W,
W, W, W, W, R, W, W, W,
W, W, W, R, W, W, W, W,
W, W, W, R, W, W, W, W,
W, W, W, W, W, W, W, W,
W, W, W, R, W, W, W, W]
sense.set_pixels(question_mark)
38
Criar um loop
from sense_hat import SenseHat
sense = SenseHat()

while True: # Loop


sense.show_message("Quero ser Astronauta!", scroll_speed=0.05,
text_colour=[255,255,0], back_colour=[0,0,255])

39
Ler e apresentar a Temperatura, Pressão e
Humidade
from sense_hat import SenseHat # Importar bibliotecas...
sense = SenseHat()

while True: # Loop


t = sense.get_temperature() # Ler temperatura e guardar em t
p = sense.get_pressure() # Ler pressão e guardar em p
h = sense.get_humidity() # Ler Humidade e guardar em h

40
Ler e apresentar a Temperatura, Pressão e
Humidade
# Arredondar com uma casa decimal
t = round(t, 1)
p = round(p, 1)
h = round(h, 1)
# Criar a mensagem a apresentar
msg = "Temperatura = %s C, Pressao=%s hPa, Humidade=%s %%" % (t,p,h)
sense.show_message(msg, scroll_speed=0.05)
# gravar e correr o programa

41
Avisar o Astronauta que há problemas na
temperatura (função if)
from sense_hat import SenseHat # Importar bibliotecas...
sense = SenseHat()

g = [0,100,0] # Definir cores


r = [100,0,0]

42
Avisar o Astronauta que há problemas na
temperatura (função if)
while True: # Loop
t = sense.get_temperature() # Ler temperatura e guardar em t
p = sense.get_pressure() # Ler pressão e guardar em p
h = sense.get_humidity() # Ler Humidade e guardar em h

t = round(t, 1) # Arredondar
p = round(p, 1)
h = round(h, 1)

43
Avisar o Astronauta que há problemas na
temperatura (função if)
if t > 18.3 and t < 26.7: # dentro do loop, se 18.3<t<26.7 o fundo fica verde
fundo = g
else: # fora do intervalo anterior o fundo fica vermelho
fundo = r

msg = "Temperatura = %s C, Pressao=%s hPa, Humidade=%s %%" % (t, p, h)


sense.show_message(msg, scroll_speed=0.05, back_colour=fundo)
# gravar e correr o programa

44
Avisar o Astronauta que há problemas na
temperatura, pressão e/ou humidade
from sense_hat import SenseHat # Importar bibliotecas...
sense = SenseHat()

g = [0,100,0] # Definir cores


r = [100,0,0]

45
Avisar o Astronauta que há problemas na
temperatura, pressão e/ou humidade
while True: # Loop
t = sense.get_temperature() # Ler temperatura e guardar em t
p = sense.get_pressure() # Ler pressão e guardar em p
h = sense.get_humidity() # Ler Humidade e guardar em h

t = round(t, 1) # Arredondar à primeira casa decimal


p = round(p, 1)
h = round(h, 1)

46
Avisar o Astronauta que há problemas na
temperatura, pressão e/ou humidade
if t > 18.3 and t < 26.7 and p > 979 and p < 1027 and h > 58 and h < 62:

fundo = g
else: #fora dos intervalos anteriores o fundo fica vermelho
fundo = r

47
Exemplos de Atividades IBSE
http://www.golabz.eu/spaces/energia-t%C3%A9rmica-na-iss
http://www.golabz.eu/spaces/como-manter-tua-casa-modelo-quente-18

48
Acelerómetro
from sense_hat import SenseHat # Importar bibliotecas...
sense = SenseHat()

while True: # Loop


x, y, z = sense.get_accelerometer_raw().values() #Ler os dados de aceleração
x=round(x, 0) #Arredondar à unidade
y=round(y, 0)
z=round(z, 0)

49
Acelerómetro
print("x=%s, y=%s, z=%s" % (x, y, z)) # Apresentar no monitor

msg = "ax = %s, ay=%s, az=%s" % (x, y, z) # Mensagem a apresentar na matriz


sense.show_message(msg, scroll_speed=0.05)

# gravar e correr o programa

50
Utilizar o acelerómetro para rodar uma
imagem
from sense_hat import SenseHat # Importar bibliotecas...
sense = SenseHat()

r=[100,0,0] # definir cores


e=[0,0,0]

51
Utilizar o acelerómetro para rodar uma
imagem
seta=[e,e,e,r,r,e,e,e,# criar imagem
e,e,r,r,r,r,e,e,
e,r,r,r,r,r,r,e,
r,r,e,r,r,e,r,r,
r,e,e,r,r,e,e,r,
e,e,e,r,r,e,e,e,
e,e,e,r,r,e,e,e,
e,e,e,r,r,e,e,e]

52
Utilizar o acelerómetro para rodar uma
imagem
sense.set_pixels(seta) # Mostrar “seta” na matriz

while True: # Loop


x, y, z = sense.get_accelerometer_raw().values() #Ler acelerómetro
x = round(x, 0) #Arredondar
y = round(y, 0)

53
Utilizar o acelerómetro para rodar uma
imagem
if x == -1: # dentro do Loop
sense.set_rotation(180)
elif y == 1:
sense.set_rotation(90)
elif y == -1:
sense.set_rotation(270)
else:
sense.set_rotation(0) # gravar e correr o programa

54
Sensor de vibrações
from sense_hat import SenseHat # Importar bibliotecas...
sense = SenseHat()

while True:
x, y, z = sense.get_accelerometer_raw().values()
x = abs(x)
y = abs(y)
z = abs(z)

55
Sensor de vibrações
if x > 2 or y > 2 or z > 2:
sense.show_letter("!", text_colour=[255, 0, 0])
else:
sense.clear()

# gravar e correr o programa

56
Deteção de movimento com IMU (inertial
measurement unit)
Definição dos eixos:

57
Deteção de movimento com IMU (inertial
measurement unit)
from sense_hat import SenseHat # Importar bibliotecas...
sense = SenseHat()

while True:
inclinacao, rotacao, direcao = sense.get_orientation().values()

print("Inclinação=%s, Rotação=%s, Direção=%s" % (inclinacao,rotacao,direcao))


# gravar e correr o programa

58
Gravar dados experimentais num ficheiro
CSV (comma-separated values)
from sense_hat import SenseHat # Importar bibliotecas...
sense = SenseHat()
import time

# Abre ficheiro “dados.cvs” onde os dados vão ser adicionados.


file = open("dados.csv", "a")

59
Gravar dados experimentais num ficheiro
CSV (comma-separated values)
for n in range(20): # cria uma série de 20 dados
t=sense.get_temperature() # guarda valor da temperatura
t=round(t,2) # arredonda com 2 casas décimais

file.write(time.strftime('%X')) #escreve hora


file.write(",") #escreve ","
file.write(str(t)) #escreve o valor da temperatura
file.write("\n") #muda de linha
time.sleep(1) #espera 1 segundo
print(time.strftime('%X'), t) #Mostra informação no ecrã

file.close() #fecha o ficheiro 60


Utilizar o Raspberry Pi de forma autónoma
(utilizadores avançados)
1. Abrir uma janela de Terminal

2. Escrever:
3. sudo nano /etc/rc.local

4. Depois de carregar o “rc.local”, escrever antes da última linha:


cd /home/pi
python3 NomeDoFicheiro.py &

61
Exemplos de Atividades IBSE

62
Links úteis
API do Sense Hat

https://pythonhosted.org/sense-hat/api/

Simulador on-line
https://trinket.io/sense-hat

63

Você também pode gostar