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 jeffersonjardem@gmail.com luisbrunu@gmail.com Francisco Marcelino franciscomarcelinoalmeida@gmail.com
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); } } }