Este documento fornece uma introdução à robótica usando a plataforma Arduino e o kit Motoruino 2. Explica o que é o Arduino, os componentes do Motoruino 2, como programar no Arduino IDE e exemplos básicos de programação com sensores e atuadores.
2. O que é o Arduino?
Iniciação à Robótica
Plataforma de computação física open-source baseada em Hardware e
Software simples de utilizar.
Adoptado massivamente nos meios académicos, científicos e hobbyistas.
Assume diversas formas, desde dimensões muito reduzidas a comandos,
robots, adaptações para texteis, entre muitas outras.
Placas de expansão, também conhecidas como “shields” que servem de
interface a diversos sensores e actuadores.
3. Motoruino 2
Baseado no layout original do Arduino
Power and Signal Bus
Iniciação à Robótica
4. Motoruino 2
Iniciação à Robótica
Ligações
Ao lado dos pins do Arduino, podemos observar que
se entram 3 filas adiccionais.
A Verde temos pins macho que são partilhados com
os pins femea do arduino.
A Vermelho existe uma fila de 5v, onde está
assinalado a roxo quer dizer que são pins com PWM.
Este pin de alimentação pode ser comutado entre 5v
ou a voltagem que vem do exterior Vin.
Esta comutação é feita através do PWM selector.
O mesmo acontece no Motor Pwr Selector, este
comuta a alimentação dos motores entre 5v e Vin.
5. Motoruino 2
Iniciação à Robótica
O Motoruino 2 está equipado com alguns sensores e
actuadores tal como a imagem ilustra.
1. Interface para 2 motores DC + encoders
2. Saída de potência (mosfet)
3. Ligação USB
4. Socket XBEE (wifi, bluetooth, radio)
5. IMU (giroscópio, acelerómetro, bússola)
6. Alimentação externa e carregador LIPO 1S
7. Alimentação externa 6v a 12v
8. Microfone
9. Altifalante
10. Microcontrolador Principal (Arduino Leonardo)
11. Microcontrolador Secundário (Arduino UNO)
1
2
3
4
5
6
7
8
9
10
11
6. Motoruino 2
Iniciação à Robótica
2 microcontroladores, um Arduino UNO e um Arduino
Leonardo.
Microcontrolador Principal - main uC1
O Arduino Leonardo é o microcontrolador ao qual o
utilizador acede quando liga o cabo USB. Este
microcontrolador encontra-se completamente disponível
e tem o layout original do Arduino para poder suportar
shields.
Microcontrolador Secondário - uC2
O Arduino UNO encontra-se abstraido do utilizador, este
µC está dedicado a processar informação do
Acelerómetro, Giroscópio, encoders dos motores e actua
também directamente sobre estes. Vamos ver mais à
frente como aceder a estes dispositivos.
7. Arduino IDE
O IDE do Arduino é bastante simples.
Iniciação à Robótica
Image source: learn.sparkfun.com
Antes de enviarmos o nosso programa para o Arduino
precisamos de fazer 2 coisas:
1. Seleccionar a placa correcta
2. Seleccionar a porta de comunicação
Vê o slide seguinte.
8. Arduino IDE
Iniciação à Robótica
Como estamos a utilizar o Motoruino2, vamos ter que
seleccionar o Arduino Leonardo
Em Windows as portas de comunicação aparecem com o
nome COM seguido de um número.
Em MAC as portas de comunicação aparecem com a
designação /dev/tty/usbmodem……...
9. Programação em Arduino
A programação em Arduino baseia-se em linguagem C.
Todos os programas do Arduino têm duas funções distintas,
setup() e loop().
A função setup() corre apenas uma vez, esta serve para declarar
se os dispositivos que estão ligados são INPUTS ou OUTPUTS,
serve também para declarar outros eventos pontuais e que só
necessitam de se fazer uma única vez..
A função loop() corre infinitamente, e é aqui que vai estar o
programa.
Iniciação à Robótica
10. Motoruino 2
Hello World - Led Blink
Todos os Arduinos têm um LED ligado
fisicamente ao pin 13.
Além deste LED ser utilizado frequentemente
para Debug, serve também para os iniciantes
experimentarem os primeiros comandos do
Arduino:
pinMode (nº do pin, OUTPUT);
O comando pinMode() é utilizado dentro da
função setup(), serve para dizermos ao Arduino
se os pins (onde estão ligados dispositivos) são
entradas ou saídas de voltagem.
digitalWrite(nº do pin, HIGH);
digitalWrite(nº do pin, LOW);
O comando digitalWrite() activa o pin
correspondente se tiver o parâmetro HIGH, ou
desactiva o mesmo se tiver o parâmetro a LOW
.
Iniciação à Robótica
11. Actuadores (Outputs)
Digitais Analógicos
Iniciação à Robótica
https://www.arduino.cc/en/Tutorial/PWM
Controlar um actuador digitalmente significa que
só temos dois estados, ligado ou desligado.
Um LED ou um Motor podem ser controlados
analógicamente. Apesar de o Arduino não ter a capacidade de
gerar um sinal analógico puro, tem a capacidade de emular
uma saída analógica utilizando PWM.
13. Sensores (Inputs)Iniciação à Robótica
Sensores Analógicos
Retornam um valor entre 0 e 1023.
Repara que dentro da função setup()
está o comando
Serial.begin(9600);
Isto faz com que seja aberta a
comunicação com o computador.
Depois de ter feito upload para o
Arduino, experimenta abrir o Terminal,
que se encontra no canto superior
direito do IDE.
https://www.arduino.cc/en/Tutorial/AnalogInput
LDR (resistência fotosensível)
Sensor IR medidor de proximidade
Potenciómetro
14. Gyro
SENSORES
. Sensores de distância esquerdo e direito
. Gyroscópio e Acelerómetro
. Sensores de Linha
. Sensor RGB
. Microfone
. Odometria (Motor Encoders)
ACTUADORES
. Leds RGB
. Motores DC
. Buzzer
INTERFACES
. Bateria de Li-Po integrada
. Micro USB para programar e carregar bateria
. Carregador integrado (por USB carga lenta ou Alimentação Externa carga
rápida)
. Módulo Bluetooth (“Communications Module”, pode posteriormente ser
trocado por WIFI, RF ou outro com o formato XBee)
Iniciação à Robótica
15. Differential Drive
Um sistema robótico diferencial consiste em duas rodas motrizes
com dois motores independentes.
A sua locomoção baseia-se na acção de cada um dos motores,
que em conjunto lhe proporcionam um amplo leque de
possibilidades.
Iniciação à Robótica
Gyro
16. Sensores
Para além de Acelerómetro, Giroscópio e Microfone que estão
incluidos na placa Motoruino2, o Gyro tem mais sensores:
● 2 sensores frontais
Estes sensores podem medir distância, luminosidade, cor e gesto.
Iniciação à Robótica
Gyro
17. Sensores
Por baixo encontram-se 3 outros sensores. O central é igual aos de
cima, este estando virado para baixo serve para o seguimento de
linha e detectar cores. Os dois laterais são sensores de linha.
● 3 sensores de linha
● 1 sensor RGB
Iniciação à Robótica
Gyro
A seguinte modificação consiste em passar os sensores frontais
para baixo aumentando assim a resolução no seguimento de linha.
18. PCB Bumper
A PCB Bumper tem um Arduino Uno, que comunica através de SPI
com o Motoruino2.
Nesta PCB estão ligados os sensores frontais e de linha.
Iniciação à Robótica
Gyro
Nota que a PCB Bumper está ligada ao Motoruino2
através das seguintes ligações.
O cabo da esquerda, está ligado ao Motoruino2 através
das ligações GND, 5v, 3v3 e rst.
O cabo da direita está ligado ao GND, ,sda e scl.
19. Gyro
Bibliotecas necessárias para usar o Gyro.
Descarregar o ZIP e colocar os conteúdos do mesmo dentro da pasta ‘libraries’ que se encontra dentro da pasta Arduino,
esta deverá estar localizada nos My Documents.
https://github.com/artica/gyro
Iniciação à Robótica
20. Gyro
Funções de actuação:
Actuar nos motores:
gyro.motoruino2.setSpeedPWM ( leftSpeed , rightSpeed ); // leftSpeed e rightSpeed recebe valores PWM, de 0 a 255
Andar determinada distância definindo a velocidade:
gyro.motoruino2.moveToDistance(100, 200) // distancia em mm, velocidade PWM
Rodar para determinado ângulo com a velocidade e rotação prédefinidos :
gyro.motoruino2.reachEncoderAngle(90 * PI / 180, -200, 200) // ângulo, velocidade e rotação do motor esquerdo e direito
Acender os LEDs brancos que se encontram baixo:
gyro.bumpers.setCenterLED(255); // controle do LED do sensor RGB que se encontra em baixo e ao centro do Gyro
Iniciação à Robótica
22. Gyro
Funções dos sensores:
Sensores de proximidade:
unsigned short leftProx, rightProx;
void loop(){
gyro.bumpers.getLeftProximity((unsigned short *) &leftProx);
Serial.print(leftProx); Serial.print('t');
gyro.bumpers.getRightProximity((unsigned short *) &rightProx);
Serial.print(rightProx); Serial.print('t');
}
Iniciação à Robótica
23. Gyro
Funções dos sensores:
Sensores de linha:
unsigned short leftLine, centerAmbient, rightLine;
void loop(){
gyro.bumpers.getLeftLine((unsigned short *) &leftLine);
Serial.print(leftLine); Serial.print('t');
gyro.bumpers.getCenterAmbient((unsigned short *) ¢erAmbient);
Serial.print(centerAmbient); Serial.print('t');
gyro.bumpers.getRightLine((unsigned short *) &rightLine);
Serial.print(rightLine); Serial.print('t');
}
Iniciação à Robótica
24. Outras referências:
Arduino
http://arduino.cc
Lista de comandos e funções do Arduino
https://www.arduino.cc/en/Reference/HomePage
Arduino programming Notebook
http://playground.arduino.cc/uploads/Main/arduino_notebook_v1-1.pdf
Processing:
http://processing.org
Fritzing
http://fritzing.org
Iniciação à Robótica