Arduino e Python

Propaganda
Arduino e Python
Do It Yourself!
Luís Bruno – Jefferson Jarden – Francisco Marcelino
Arduino e Python
Faça Você Mesmo!
Quem Somos
●
Jefferson Jardem
●
●
Luís Bruno
●
●
[email protected]
[email protected]
Francisco Marcelino
●
[email protected]
Software Livre
As 4 liberdades básicas associadas ao software livre
são:
–
–
–
–
A liberdade de executar o programa, para qualquer propósito
(liberdade nº 0)
A liberdade de estudar como o programa funciona, e adaptá-lo
para as suas necessidades (liberdade nº 1). Acesso ao códigofonte é um pré-requisito para esta liberdade.
A liberdade de redistribuir cópias de modo que você possa
ajudar ao seu próximo (liberdade nº 2).
A liberdade de aperfeiçoar o programa, e liberar os seus
aperfeiçoamentos, de modo que toda a comunidade se beneficie
(liberdade nº 3). Acesso ao código-fonte é um pré-requisito para
esta liberdade.
Software Livre
Hardware Livre
●
O hardware é de Graça?
–
●
Não!
Direcionado a Liberdade de Conhecimento
–
–
–
–
–
Diagramas
Esquemas
Documentos
Core/Firmware
Software/API
Hardware Livre
Hardware Livre
●
Algumas Empresas
–
–
–
–
●
Sparkfun
Seeeduino Studio
Adafruit
Makerbot
Brasil
–
–
–
Multilogica
LabdeGaragem
Agamenon
Arduino
Arduino
●
O que é?
–
●
Plataforma de Hardware Livre
Características – Arduino UNO
–
–
–
–
–
–
–
–
–
–
–
–
Microcontroller ATmega328
Operating Voltage 5V
Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-20V
Digital I/O Pins 14 (of which 6 provide PWM output)
Analog Input Pins 6
DC Current per I/O Pin 40 mA
DC Current for 3.3V Pin 50 mA
Flash Memory 32 KB (ATmega328) of which 0.5 KB used by bootloader
SRAM2 KB (ATmega328)
EEPROM1 KB (ATmega328)
Clock Speed 16 MHz
Arduino
–
–
–
–
–
–
–
schematics (Layout Drawings)
prototipagem rápida
projetos de computação física
computação pervasiva
computação ubiqua
ambientes inteligentes
instalações interativas
Arduino
●
Onde usar Arduino?
●
Automação de ambiente:
–
–
–
Desligamento do Luzes de um ambiente
Ligação do irrigador de um jardim
Climatização de um ambiente
Arduino
●
A Imaginação é o Limite
Arduino
●
Diferentes Hardware
Arduino
Shields
Sensores
Atuadores
O Software Arduino
●
Escrito em Java;
●
Multiplataforma!
●
Baseado no Processing e C;
●
Distribuição livre;
●
Windows, Linux e Mac:
–
http://www.arduino.cc/en/Main/Software
Programando...
1° Compilar
Sketch
2° Atualizar
Estrutura do Código
●
Função setup
void setup (){
Instruções...
}
●
Função loop
void loop (){
Instruções...
}
Exemplo de Código
Estruturas de Controle
●
If … else
●
for
●
switch
●
while
●
do while
●
go to
Principais funções
●
pinMode()
●
Entrada/saída
●
digitalWrite/ analogWrite()
●
digitalRead/ analogRead()
●
delay()
●
milissegundos
Python
Introdução à Linguagem Python
●
●
História
Criada por Guido van Rossum em
1989;
●
Uma linguagem simples, criada
inicialmente para ensinar
programação;
Quem Usa Python?
●
7° Linguagem mais usada (TIOBE Agosto);
Google 1997
Introdução à Linguagem Python
●
Linguagem de Altíssimo Nível (VHLL);
●
Tipagem Dinâmica e Forte;
●
Case Sensitive;
●
Interpretada/Compilada;
●
OO, Procedural e Funcional;
●
Linguagem de Scripts;
●
Open-Source;
●
Bliblioteca padrão gigante!
Introdução à Linguagem Python
●
Completamente Orientada a Objetos;
●
●
Toda variável em Python é objeto!
Orientação a Objetos?
●
Objeto – Entidade do mundo real que tem uma
identidade;
–
–
●
Atributos (Características);
Métodos (Comportamento);
Classe – Abstração que descreve propriedades
importantes para uma aplicação.
Instalação
●
●
No Windows
●
Download do Windows installer no site:
●
http://www.python.org/download/
No Linux e Mac:
●
Maioria das distros, Python é nativo!!!
Executando o Python
●
Não necessita de IDEs;
●
Iniciando o interpretador Python:
●
●
~$ python
Executar scripts em arquivos:
●
~$ python file.py
Interpretador Interativo
Usando o Interpretador interativo
●
Determinar o tipo de um objeto
●
●
Ver docs de uma classe ou comando
●
●
type(obj)
help(obj)
Obter uma lista de quase todos os atributos de
um objeto
●
dir(obj)
Obtendo valores
●
input()
x = input('Informe um valor: ')
print x # imprime o valor de x
●
raw_input()
x = raw_input('Informe seu nome')
print x
#imprime o valor da string x
Características do Python
●
Blocos por indentação!
print “O valor de a é “
if a == 0:
print “zero”
a = “zero”
else:
print a
# fim do script
●
No more chaves! {}
●
No more ponto e vírgula! (;)
●
Comentários com #
Normalmente...
print (“O valor de a é “);
if (a == 0)
{
print (“zero”);
a = “zero”;
}
else
{
print (a);
} // fim do script
Em Python
print “O valor de a é “
if a == 0:
print “zero”
a = “zero”
else:
print a # fim do script
Operadores
Aritméticos: + , -, *, /, // , %, **
● Condicionais: >, <, >=, ==, != , in, is
● Atribuição: =, +=, +=, /= , *=
● Lógicos:
& | ^ ~ (and, or, xor, not)
●
Strings
●
String – Um conjunto de caracteres;
'String de aspas simples'
"Olá, sou uma 'String'!"
X=2
'1 + 1 = ', x
●
Podem ocupar uma ou várias linhas:
'''String com
multiplas
linhas'''
Strings
●
String como Arrays
s = 'Bem vindos ao Enucomp'
s.__getitem__(1)
s[1]
s[4:9]
s +' 2011'
#
# e
# e
# vindos
… Enucomp 2011
Strings
●
Brincando com os operadores
s = 'Arduino'
s + ' + python'
s = 'a'
s > 'b'
#False
'Maior' > 'Menor'
s = 'k'
s * 3
●
#Arduino + Python
#False
# kkk
Obs.: Os operadores são métodos não-destrutivos.
Alguns métodos de Strings
• __len__(): Retorna o tamanho da string;
● __getslice__(x, y): Retorna uma substring de x
até y.
●
●
●
capitalize(): Retorna a mesma string com a
primeira letra em maiúsculo.
upper(): Retorna a mesma string com todas as
letras em maiúsculo.
lower(): Retorna a mesma string com todas as
letras em minúsculo.
List
●
Coleção de objetos
numeros = [1, 2, 3.5]
string = ["1", '2', "3"]
tudo = [10, "50", """Hello"""]
lista = [numeros, string, tudo]
Alguns métodos de List
●
append(obj)
●
●
insert(pos, obj)
●
●
Insere na posição especificada
remove(obj)
●
●
Insere no fim da lista
Remove o objeto da lista
pop(posicao)
●
Remove e retorna o objeto da posição especificada.
●
O pop() sem parâmetros retira o último elemento
Alguns métodos de List
count( obj )
●
●
index( obj )
●
●
Retorna a posição do “obj” na lista
reverse()
●
●
Retorna a quantidade de elementos “obj” da lista
Inverte a lista colocando os elementos ao contrário
sort()
●
Ordena a lista
Tuplas
●
Estrutura como as listas, mas não aceitam que
seus valores sejam alterados depois da
criação.
tupla = (1, 2, 3, 4)
ou
tupla = 1, 2, 3, 4
Ranges
●
Função que gera uma lista
range(7)
# [ 0, 1, 2, 3, 4, 5, 6 ]
range(1,7)
# [ 1, 2, 3, 4, 5, 6 ]
range(1, 9, 3)
# [ 1, 4, 8]
Dicionários
●
●
●
Map
O mesmo que array associativo, map ou
hashes;
Cada entrada é composta por uma chave e um
valor;
frameworks = {'python': "Django", 'ruby': "Rails"}
dic = {1 : 'UM', 'DOIS': 2}
print frameworks['python']
# ===> Django
print dic[1]
# ===> UM
Estruturas de Condição
●
If/ elif/ else
if condicao:
comandos
elif condicao:
comandos
else:
comandos
Loops
●
While/ else
while condição:
comandos
else:
comandos
Loops
●
For/ else
for variavel in sequencia:
comandos
else:
comandos
Funções
●
Para criar uma função:
●
def nome_da_funcao( parametros ):
def soma(a,b = 2): print a + b,
soma(2)
#4
soma(2,3)
#5
Python com Arduino
PySerial - Instalação
●
Windows
●
●
http://pypi.python.org/pypi/pyserial
Debian/ Ubuntu/ derivados:
sudo aptitude install python-serial
Enviando dados para a serial
import serial
porta = '/dev/ttyUSB0'
baud_rate = 9600
arduino = serial.Serial(porta, baud_rate)
arduino.write('H')
print arduino.read()
arduino.close()
Recebendo através do Arduino
int ledPin = 13;
int incomingByte = 0;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
if (incomingByte == 72){
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
}
Download