robotica2
DESCRIPTION
RobóticaTRANSCRIPT
Atelier de FormaçãoIniciação à robótica móvel
Bases de Programação
Associação Nacional de Professores de Electrotecnia e Electrónica
DEAR DEAR RobotRobot
Microcontrolador
Circuito integrado em alta escala (VLSI) que incorpora a maior parte dos elementos que constituem um controlador e se destina a uma determinada tarefa.
Costuma estar incorporado no dispositivo que controla (controlador embebido - embedded controller).
indústria informática (periféricos: rato, teclado,...)electrodomésticos (fornos, máq. lavar, vídeos, etc)sistemas AVACstelecomunicaçõesindústria automóvel
Aplicações
Um microcontrolador dispõe normalmente dos seguintes elementos:
processador ou CPUmemória de dados (RAM)memória de programa (ROM/PROM/EPROM/EEPROM)linhas de entrada/saída (E/S) programáveis
Constituição
módulos de controlo de periféricos (portos série, paralelo,USB,I2C,etc.)gerador de impulsos de relógiotemporizadorescão-de-guarda (watchdog)conversores A/D e D/Acomparadores analógicos
Constituição
microprocessador vs. microcontrolador
o microprocessador é um sistema aberto
constrói-se um computador com as características desejadas juntando os módulos necessários
o microcontrolador é um sistema fechado
contem um computador completo e as suas prestações limitadas não se podem modificar
Estrutura de um microprocessador
bus de controle
P
Memória controlador 2controlador 1
bus de endereços
bus de dados
periféricos periféricos
Arquitectura interna de um microprocessador
UCPMemória
Instruções
+
dadosbus de dados e instruções
bus comum de endereços
8
Arquitectura “von Neumann” ou “Princeton”
Arquitectura interna de um microcontrolador
Arquitectura “Harvard”
UCPMemória
de
dados
bus de dados
bus de endereços de dados
8
Memória
de
Instruções
9
bus de endereços de instruções
10
14
bus de instruções
Arquitectura interna de um microcontrolador
RISC - Reduced Instruction Set Computer (35 no 16F84)
versus
CISC - Complex Instruction Set Computer (+150 no 8086)
Arquitectura interna de um microcontrolador
Memória de Programa
Tipologia
PROM (Programmable Read Only Memory) EPROM (Electrically PROM) OTP (One Time Programmable) EEPROM (Electrically Erasable PROM) FLASH
Arquitectura interna de um microcontrolador
Programação
linguagem assemblylinguagens HLL (High Level Language):
Pascal, Basic, JAL, C
Compiladores vs. Interpretadores
Picaxe 28X
Características:
600 linhas código21 pinos E/S9-17 saídas0-12 entradas0-4 entradas A/D2 saídas PWM
Picaxe 28X
Pinos de Entrada/Saídaconfiguráveis
Pinos de Entrada/Saídaconfiguráveis
Entradas Analógicas ou Digitais Pinos de
Saída
Linguagens de programação
PBasic (compatível com Basic Stamp).
Ambiente integrado de desenvolvimento com suporte para programação gráfica por fluxogramas.
Editor, compilador, programador,debugger e simulador incorporados.
Lógica de Programação
O paradigma “tradicional”: Pressupõe um modelo do mundo
Sensores Interpretação dos sensores
Modelo do Mundo
PlaneamentoExecuçãoActuadores
Lógica de Programação O paradigma das interacções prioritárias de Rodney
Brooks Utiliza uma estratégia em que só os sensores são os
iniciadores dos comportamentos. Os comportamentos são sistemas em camadas de
controlo que funcionam em paralelo, cada vez que os sensores apropriados são activados.
Um sistema de arbitragem de prioridades é utilizado para activar o comportamento dominante.
Todos os comportamentos funcionam em paralelo, com os de mais alto nível a suprimirem o funcionamento dos de nível inferior.
Lógica de Programação O paradigma das interacções prioritárias de
Rodney Brooks Exemplo:
Sensor Pista MotoresSeguirPista S
Sensor Cor Detectar_Cor S
Bumpers Escapar
Sensor Procedimento Actuador
BASIC
Programa = dados + instruções
Elementos da Linguagem de Programação BASIC
Símbolos Variáveis Constantes Instruções
BASIC
LABELS As labels (etiquetas) são usadas como marcadores
em todo o programa. As labels são usadas para marcar uma posição para onde “saltar” no programa através de uma instrução goto, gosub ou outra instrução.
Uma label pode ser qualquer palavra (não reservada) e pode conter dígitos e o carácter underscore ( _ ). As labels devem ter como carácter inicial uma letra (não um dígito), e são definidas com o sinal dois-pontos (:) a seguir ao nome. O sinal não é necessário quando a label faz parte integrante de instruções.
BASIC
O compilador não é case-sensitive (sensível a maiúsculas), pelo que podem ser usadas indiscriminadamente maiúsculas e minúsculas.
Exemplo:ciclo:
high 1 ; liga a saída 1pause 500 ; espera de 5 segundoslow 1 ; desliga a saída 1PAUSE 500 ; espera de 5 segundosgoto Ciclo ; salto para o início
BASIC
Espaços em branco e Sintaxe
Whitespace (espaço em branco) é o termo utilizado pelos programadores para definirem a área branca na impressão de um programa. Nela se incluem os espaços, as tabulações e as linhas vazias. Qualquer uma delas pode ser utilizada no programa para o tornar mais compreensível e facilitar a leitura.
Convencionou-se colocar as labels encostadas à esquerda. Todas as outras instruções devem ser espaçadas através da tecla de tabulação. Esta convenção torna o programa mais fácil de ler e de seguir.
BASIC
COMENTÁRIOS Os comentários começam por um apóstrofe
(‘) ou ponto e vírgula (;) e continuam até ao fim da linha. A instrução REM pode também ser utilizada para inserir comentários.
Exemplos: high 0 ‘coloca pin0 alto high 2 ;coloca pin2 alto REM coloca pin3 alto
BASIC
CONSTANTES
As constantes podem ser declaradas de quatro modos diferentes:decimais, hexadecimais, binárias e ASCII.
Os números decimais são escritos directamente sem qualquer prefixo.
Os números hexadecimais (hex) são precedidos pelo sinal dólar ($).
Os números binários são precedidos pelo sinal de percentagem (%).
Os valores ASCII são colocados entre plicas (“).
BASIC
Exemplos: 100 ‘ 100 em decimal $64 ‘ 64 hex %01100100 ‘ 01100100 binário “A” ‘ “A” ascii (65) “Hello” ‘ “Hello” – equivalente a “H”,
“e”, “l”, “l”, “o”. B1 = B0 ^ $AA ‘ ou exclusivo da
‘variável B0 com AA hex
BASIC
SÍMBOLOS Os símbolos podem ser associados a valores
constantes, nomes alias (alternativos) para variáveis e endereços de programa. Os valores constantes e os nomes alias de variáveis são atribuídos fazendo seguir ao nome do símbolo o sinal de igual (=), seguido da variável ou constante.
Os símbolos podem utilizar qualquer palavra que não seja reservada (instruções).
Os símbolos podem conter letras e números, mas o primeiro carácter é obrigatoriamente uma letra. O uso dos símbolos não aumenta a dimensão do programa e torna-o mais legível.
BASIC Os endereços de programa são atribuídos fazendo seguir o
símbolo pelo sinal dois pontos (:).
Exemplo:
symbol LED_E = 7 ‘ define um pino de saídasymbol CONTA = B0 ‘ define o símbolo de uma variávellet CONTA = 200 ‘ carrega a variável com o valor
‘ 200CICLO: ‘ define endereço de programa
high LED_E ‘ liga a saída 7pause CONTA ‘ espera 0,2 segundos (200 milisegundos)
low LED_E ‘ desliga a saída 7pause CONTA ‘ espera 0,2 segundos goto CICLO ‘salta para o início CICLO
BASIC Compreendendo a memória do PICAXE A memória do PICAXE é constituída por três áreas
diferentes. A quantidade de memória varia conforme o tipo de PICAXE.
Memória de Programa A memória de programa é onde o programa é guardado
após uma transferência (download). Trata-se de uma memória rápida tipo FLASH, que se pode reprogramar até cerca de 100 000 vezes. O programa não se perde quando se desliga a alimentação, pelo que é executado assim que esta é ligada de novo. Não é normalmente necessário apagar um programa, pois cada novo download reprograma toda a memória.
BASIC
Num PICAXE28X pode carregar cerca de 600 linhas de programa. Este valor é aproximado, pois cada instrução ocupa espaços diferentes em memória.
Para verificar a memória livre basta seleccionar o menu PICAXE>Check Syntax.
Memória de Dados A memória de dados é um espaço adicional de
memória do microcontrolador. Os dados também não são perdidos quando se desliga a alimentação. Em cada transferência de dados (download) esta memória é posta a 0.
BASIC
RAM (Variáveis) A memória RAM é usada para guardar dados
temporários em variáveis durante a execução do programa. Esta memória perde toda a informação quando se desliga a alimentação. Existem três tipos de variáveis – usos gerais, armazenamento e funções especiais.
BASIC
Variáveis de Usos Gerais (GPR – General Purpose Registers)
Existem 14 variáveis de usos gerais tipo byte. Estas variáveis byte são designadas b0 a b13. As variáveis tipo byte (8 bits) podem guardar números inteiros entre 0 e 255.
Para números maiores podem combinar-se duas variáveis byte de modo a criar uma variável word, que é capaz de guardar números inteiros entre 0 e 65535.
BASIC
Estas variáveis word são designadas w0 a w6, e são construídas do seguinte modo:
w0 = b1 : b0
w1 = b3 : b2
w2 = b5 : b4
w3 = b7 : b6
w4 = b9 : b8
w5 = b11 : b10
w6 = b13 : b12
BASIC
Para além disso os bytes b0 e b1 (w0) podem ser divididos em variáveis bit.
As variáveis bit podem ser utilizadas onde for necessário guardar um único bit (0 ou 1) numa variávelb0 = bit7: bit6: bit5: bit4: bit3: bit2: bit1: bit0b1 = bit15: bit14: bit13: bit12: bit11: bit10: bit9: bit8
Pode utilizar qualquer variável word, byte ou bit numa expressão matemática ou instrução que utilize variáveis.
BASIC
Variáveis para Funções Especiais (SFR) As variáveis disponíveis para funções especiais
dependem do tipo de PICAXE.
pins = representa o dado lido no porto de entrada pins = representa o porto de saída na escrita
Note que pins é uma ‘pseudo’ variável que se pode aplicar tanto a portos de entrada como de saída.
Quando usado à esquerda de uma expressão de atribuição de pinos aplica-se ao porto de saída.
BASIC
Por exemplo,let pins = %11000011
vai colocar as saídas 7,6,1,0 altas e as restantes baixas.
O sinal % indica ao compilador que se está a trabalhar em binário, em vez de decimal.
Quando usado à direita de uma expressão de atribuição de pinos aplica-se ao porto de entrada (porto C no PICAXE28X).
Por exemplo,let b1 = pinsvai guardar em b1 o estado actual do porto de entrada.
BASIC
A variável pins está separada em variáveis bit individuais para leitura de entradas bit individuais através da instrução if...then. pins = pin7 : pin6 : pin5 : pin4 : pin3 : pin2 : pin1 : pin0
Programming Editor
Instalação e password (picaxebegin) Configuração (Menu View/Options)
Mode PICAXE-28X
Options: 4MHz
Serial Port
Language
Programming Editor Programação por Fluxograma
Simbologia Início/Fim Processo:
acção a ser realizada
E/S define entradas e saídas
Decisão a tomar
Conector
Subrotina
Programming Editor-exemplo
start
low 4
pin0=1Y
N high 4
pin0=0Y
N
pin6=1Y
N
pin7=1Y
N gosub blue gosub red
red blue
high 7
high 6
pause 3000
low 7
low 6
return
return
let b0= 0
let b0=b0+ 1
let pins = 96
let pins = 160
pause 2000
pause 2000
let pins = 16
high 0
low 0
let pins = 32
pause 3000
Green LED off
Green LED on
Door open again!
Check door switch
Test red & blue switches
Lock solenoid
Do motorsequence
Unlock door
Program for Washing Machine Model
b0> 10
Y
N
main:label_6: low 4label_D: if pin0=1 then label_19
goto label_D
label_19: high 4label_20: if pin0=0 then label_6
if pin6=1 then label_4Dif pin7=1 then label_44goto label_20
label_44: gosub bluegoto label_6
label_4D: gosub redgoto label_6
Programming Editor-exemplostart
avancar esquerda direita
forward left right
pwmout 1,10,40
pwmout 2,10,40
returnreturn
pwmout 2,10,40
pwmout 1,10,40 pwmout 1,10,40
pwmout 2,10,40
return return
pwmout 2,10,40
pwmout 1,10,40
let b0=pins& 224
b0= 0
Y
N b0= 32
Y
N b0= 64
Y
N b0= 96
Y
N b0= 128
Y
N b0= 224
Y
Nb0= 160
Y
N b0= 192
Y
N
gosub avancar gosub esquerda gosub avancar gosub esquerda gosub direita gosub avancar gosub esquerda gosub parar
000001 010 011 100 101 110 111
halt
parar
gosub ler_cor
alarmeler_cor
readadc 0,b1sound 0,(50,50)
pause 1000
return
b1> 20
Y
N
b1< 70
Y
N
b1> 132
Y
N
b1< 150
Y
N
gosub alarme
returnAs coisas complicam-se
BASIC Instruções BASIC essenciais Controlo de pinos de Saída
– high 1– low 2– pins=%00000110– high portc 1
Leitura de pinos de entrada– b0=pins– if pin0=1…
BASIC
Saídas PWM– Instrução pwmout– Sintaxe:
PWMOUT pino, período, dutycycle
Pino é uma variável/constante que especifica o pino E/S a usar (1 ou 2).Período é uma variável/constante (0-255) que estabelece o período do sinal de PWM.Duty cycle é uma variável/constante (valor de 10 bits, logo, de 0-1024) que define o ciclo de trabalho (tempo em que o sinal está alto em cada período).
BASIC
Esta instrução difere de todas as outras pelo facto de ser executada continuamente (independente do resto do programa) até que outra instrução pwmout seja enviada.
Para parar o sinal pwmout, basta enviar uma instrução pwmout com o período 0.Período PWM = (período + 1) x 4 x (1/4000000) = (período + 1) usCiclo Trabalho = (dutycyle) x (1/4000000) = (dutycycle)/4 us
BASIC
Salto incondicional– goto label
Controlo de fluxo– If condição then label
start
pin0=1Y
N
Aqui Ali
BASIC
inicio:if pin6 = 0 then direitagoto esquerda
‘**************************esquerda:
low 7low 6high 5low 4pwmout 1,10,25pwmout 2,10,25goto inicio
‘***************************direita:
high 7low 6low 5low 4pwmout 1,10,25pwmout 2,10,25goto inicio
‘*****************************
BASIC if … then if … and … then if … or … then Sintaxe:
IF variável ?? valor (AND/OR variável ?? valor ...) THEN endereço
Variável (s) é comparada com o valor(s).Valor é uma variável/constante.Endereço é uma label (etiqueta) que especifica o endereço para onde saltar se a condição se verificar (for verdadeira).
BASIC
?? pode ser qualquer uma das seguintes condições
= igual a
<> não igual a (diferente)
!= não igual a (diferente)
> maior que
>= maior que ou igual a
< menor que
<= menor que ou igual a
Esquema de ligações
M2 M1
9V
9,6V
Alimentação dos sensores
Ligação ao cabo série paraprogramar
Sensor de pista (3inputs)
Sensor de obstáculos(2outputs)
Sensor de obstáculos(1input)
Sensor de cor
BezouroLed
BASIC
Subrotinas Os procedimentos ou subrotinas, são largamente
utilizados na programação para reduzir o tamanho dos programas, usando secções de código que se repetem num único procedimento. A passagem de valores para o procedimento, por variáveis, permite repetir a mesma secção de código a partir de várias localizações do programa.
BASIC
GOSUB endereço Return
Endereço é uma label (etiqueta) que especifica o endereço.
Função: Salta para a subrotina (procedimento) localizado no
endereço, regressando quando encontra a instrução return. São permitidas até 16 GOSUBs (ou 256 no Picaxe 28X), podendo ser aninhadas até 4 níveis.
BASIC
GOSUB endereço Return Informação: A instrução gosub (ir para um procedimento), é um
salto temporário para uma secção separada do código, de onde regressará, através da instrução return.
Cada instrução gosub, deve ter uma instrução return correspondente.
Não deve confundir esta instrução com a instrução goto, que é um salto incondicional para uma nova localização no programa.
BASIC
start
pin0=1Y
N
gosub Esquerda gosub Direita
Esquerda Direita
return return
Vantagens face ao “spagheti” dos gotos.
Programa: If pin0=1 then…
BASIC
Ciclos repetidos for … next Sintaxe: FOR variável = inicio TO fim {STEP {-} incremento} NEXT {variável} Variável vai ser usada como um contador Início é o valor inicial da variável Fim é o valor final da variável Incremento é um valor opcional que se sobrepõe ao valor de
incremento normal do contador (+1). Se o incremento for precedido de um ‘-‘, será considerado que Fim é menor que Inicio e, portanto, o valor de incremento é subtraído cada vez que o ciclo se realiza.
BASIC
Informação:
Os ciclos for… next são utilizados para repetir secções de código um certo número de vezes. Quando se usa uma variável byte, o ciclo repete-se até 255 vezes. Cada vez que a linha next é encontrada, o valor da variável ´eincrementado (ou decrementado) do valor definido por step (+1 por omissão). Quando o valor final é ultrapassado o ciclo pára e o fluxo do programa continua a partir da linha seguinte à instrução next.
Os ciclos for…next podem ser encadeados até 8 níveis de profundidade.
BASIC
Exemplo:ciclo:
for b0 = 1 to 20 ‘ define um ciclo de 20 vezeshigh 1 ‘ liga a saída 1pause 500 ‘ espera 0,5 segundoslow 1 ‘ desliga a saída 1pause 500 ‘ espera 0,5 segundos
next b0 ‘ salta para o início, incrementando b0 de +1, ‘ até que b0 = 20
pause 2000 ‘ espera 2 segundosgoto ciclo ‘ salto para o início
BASIC
Leituras de tensões analógicas Instrução readadc10 Sintaxe: READADC10 canal, variávelword Canal é uma variável/constante especificando um
endereço (0-3) – pinos 2,3,4 e 5. Variávelword é uma variável word que recebe os
dados lidos (0-1024). Função: Lê um canal ADC (conversão analógico-digital) de 10
bits de resolução para uma variável de dimensão word (0-1024).
BASIC
Exemplo: sensor de corsymbol leitura = w0inicio:
readadc10 0,leituraif leitura < 200 then alarmegoto inicio
alarme:sound 0,(50,50)sound 0,(100,50)sound 0,(120,50)pause 300goto inicio
BASIC
Outras instruções: PAUSE milisegundos
Milisegundos é uma variável/constante (0-65535) que especifica quantos milisegundos dura a pausa.
SOUND pino, (nota, duração, nota, duração, …)Pino é uma variável/constante (0-7) que especifica o pino E/S a usar.Nota(s) são variáveis/constantes (0-255) que especificam o tipo e a frequência.Nota 0 é silêncio. Notas 1-127 são tons crescentes. Notas 128-255 são ruídos brancos crescentes.Duração(s) são variáveis/constantes (0-255) que especificam a duração múltiplos aproximados de 10ms).