Upload
bruno-nascimento
View
1.731
Download
2
Embed Size (px)
DESCRIPTION
Minicurso ministrado no ENUCOMP 2011 em Parnaíba-PI
Citation preview
Arduino e Python
Do It Yourself!
Luís Bruno – Jefferson Jarden – Francisco Marcelino
Arduino e Python
Faça Você Mesmo!
Quem Somos
● Jefferson Jardem● Luis Bruno● Francisco Marcelino
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ódigo-fonte é 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 2° Atualizar
Sketch
Estrutura do Código
● Função setup
● Função loop
void setup (){Instruções...
}
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● type(obj)
● Ver docs de uma classe ou comando● 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!
● No more chaves! {}● No more ponto e vírgula! (;)● Comentários com #
print “O valor de a é “if a == 0: print “zero” a = “zero”else: print a # fim do script
Normalmente... Em Python
print (“O valor de a é “);if (a == 0){ print (“zero”); a = “zero”;}else { print (a);
} // fim do script
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;
● Podem ocupar uma ou várias linhas:'''String com
multiplas
linhas'''
'String de aspas simples'
"Olá, sou uma 'String'!"
X = 2 '1 + 1 = ', x
Strings
● String como Arrays
s = 'Bem vindos ao Enucomp'
s.__getitem__(1) # e s[1] # e s[4:9] # vindoss +' 2011' # … Enucomp 2011
Strings● Brincando com os operadores
● Obs.: Os operadores são métodos não-destrutivos.
s = 'Arduino'
s + ' + python' #Arduino + Python
s = 'a's > 'b' #False
'Maior' > 'Menor' #False
s = 'k's * 3 # kkk
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)● Insere no fim da lista
● insert(pos, obj)● Insere na posição especificada
● remove(obj)● 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 )● Retorna a quantidade de elementos “obj” da lista
● index( obj )● Retorna a posição do “obj” na lista
● reverse()● 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) #4soma(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 Arduinoint 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); } }}