arduino e python: do it yourself
DESCRIPTION
Minicurso ministrado no ENUCOMP 2011 em Parnaíba-PITRANSCRIPT
![Page 1: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/1.jpg)
Arduino e Python
Do It Yourself!
Luís Bruno – Jefferson Jarden – Francisco Marcelino
![Page 2: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/2.jpg)
Arduino e Python
Faça Você Mesmo!
![Page 3: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/3.jpg)
Quem Somos
● Jefferson Jardem● Luis Bruno● Francisco Marcelino
![Page 4: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/4.jpg)
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.
![Page 5: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/5.jpg)
Software Livre
![Page 6: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/6.jpg)
Hardware Livre
● O hardware é de Graça?– Não!
● Direcionado a Liberdade de Conhecimento– Diagramas– Esquemas– Documentos– Core/Firmware– Software/API
![Page 7: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/7.jpg)
Hardware Livre
![Page 8: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/8.jpg)
Hardware Livre
● Algumas Empresas– Sparkfun
– Seeeduino Studio
– Adafruit
– Makerbot
● Brasil– Multilogica
– LabdeGaragem
– Agamenon
![Page 9: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/9.jpg)
Arduino
![Page 10: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/10.jpg)
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
![Page 11: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/11.jpg)
Arduino
– schematics (Layout Drawings)– prototipagem rápida– projetos de computação física– computação pervasiva– computação ubiqua– ambientes inteligentes– instalações interativas
![Page 12: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/12.jpg)
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
![Page 13: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/13.jpg)
Arduino
● A Imaginação é o Limite
![Page 14: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/14.jpg)
Arduino
● Diferentes Hardware
![Page 15: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/15.jpg)
Arduino
![Page 16: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/16.jpg)
Shields
![Page 17: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/17.jpg)
Sensores
![Page 18: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/18.jpg)
Atuadores
![Page 19: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/19.jpg)
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
![Page 20: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/20.jpg)
Programando...
1° Compilar 2° Atualizar
Sketch
![Page 21: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/21.jpg)
Estrutura do Código
● Função setup
● Função loop
void setup (){Instruções...
}
void loop (){Instruções...
}
![Page 22: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/22.jpg)
Exemplo de Código
![Page 23: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/23.jpg)
Estruturas de Controle
● If … else● for● switch● while● do while● go to
![Page 24: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/24.jpg)
Principais funções
● pinMode()● Entrada/saída
● digitalWrite/ analogWrite()● digitalRead/ analogRead()● delay()
● milissegundos
![Page 25: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/25.jpg)
Python
![Page 26: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/26.jpg)
Introdução à Linguagem Python
● História● Criada por Guido van Rossum em
1989;● Uma linguagem simples, criada
inicialmente para ensinar programação;
![Page 27: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/27.jpg)
Quem Usa Python?● 7° Linguagem mais usada (TIOBE Agosto);
![Page 28: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/28.jpg)
Google 1997
![Page 29: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/29.jpg)
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!
![Page 30: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/30.jpg)
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.
![Page 31: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/31.jpg)
Instalação
● No Windows● Download do Windows installer no site:● http://www.python.org/download/
● No Linux e Mac:● Maioria das distros, Python é nativo!!!
![Page 32: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/32.jpg)
Executando o Python
● Não necessita de IDEs;● Iniciando o interpretador Python:
● ~$ python
● Executar scripts em arquivos:● ~$ python file.py
![Page 33: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/33.jpg)
Interpretador Interativo
![Page 34: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/34.jpg)
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)
![Page 35: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/35.jpg)
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
![Page 36: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/36.jpg)
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
![Page 37: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/37.jpg)
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
![Page 38: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/38.jpg)
Operadores
● Aritméticos: + , -, *, /, // , %, **● Condicionais: >, <, >=, ==, != , in, is● Atribuição: =, +=, +=, /= , *=● Lógicos: & | ^ ~ (and, or, xor, not)
![Page 39: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/39.jpg)
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
![Page 40: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/40.jpg)
Strings
● String como Arrays
s = 'Bem vindos ao Enucomp'
s.__getitem__(1) # e s[1] # e s[4:9] # vindoss +' 2011' # … Enucomp 2011
![Page 41: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/41.jpg)
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
![Page 42: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/42.jpg)
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.
![Page 43: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/43.jpg)
List
● Coleção de objetos
numeros = [1, 2, 3.5]string = ["1", '2', "3"]tudo = [10, "50", """Hello"""]
lista = [numeros, string, tudo]
![Page 44: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/44.jpg)
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
![Page 45: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/45.jpg)
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
![Page 46: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/46.jpg)
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
![Page 47: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/47.jpg)
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]
![Page 48: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/48.jpg)
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
![Page 49: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/49.jpg)
Estruturas de Condição
● If/ elif/ else
if condicao: comandos elif condicao: comandos else: comandos
![Page 50: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/50.jpg)
Loops
● While/ else
while condição: comandos else: comandos
![Page 51: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/51.jpg)
Loops
● For/ else
for variavel in sequencia:
comandos else: comandos
![Page 52: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/52.jpg)
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
![Page 53: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/53.jpg)
Python com Arduino
![Page 54: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/54.jpg)
PySerial - Instalação
● Windows● http://pypi.python.org/pypi/pyserial
● Debian/ Ubuntu/ derivados:
sudo aptitude install python-serial
![Page 55: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/55.jpg)
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()
![Page 56: Arduino e Python: Do It Yourself](https://reader034.vdocuments.mx/reader034/viewer/2022051412/54972cc5ac795959288b53db/html5/thumbnails/56.jpg)
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); } }}