Workshop de iniciação à Robótica com o Farrusco (robô desenvolvido pela Artica, baseado em Arduino)
Objectivos deste workshop, visando o desenvolvimento das seguintes capacidades:
Pensamento Algorítmico
Resolução de Problemas
Computação Física
Linguagens de Programação
Microcontroladores
Electrónica
Robótica
Interacção Homem-Máquina (HCI, HRI)
3. O que é o Arduino?
Plataforma de prototipagem 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 muitras outras.
Diversas placas de expansão, também conhecidas como “shields” que
servem de interface a diversos sensores e actuadores.
Iniciação à Robótica
4. Motoruino 1
1
2
3 4
5
14
15
17
12
13
109
8
6
7
11
16
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Power selector - USB or EXTernal Power
FTDI USB connection
External power connections
PWM pins power selector - VIN or +5v
Digital IO
Rx Tx LEDs
LED 13
Power LED
Microcontroller Atmega 328
+5v GND Vin pins
Analog Inputs
7805 voltage regulator
MotorB Inputs
MotorA Inputs
MotorB Outputs
MotorA Outputs
L293D Power Selector - VIN or +5v
L293D Double H-Bridge Motor Driver
Reset Button
18
Iniciação à Robótica
5. Motoruino 1
PWM selector connects the power pin to VIN or +5v
Motor Power Selector connects the Motor Driver
(L293D) to Vin or +5v
Iniciação à Robótica
6. Motoruino 1
Baseado no layout original do Arduino
Interface para Motores DC
Power and Signal Bus
Iniciação à Robótica
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
8. Arduino IDE
Iniciação à Robótica
Como estamos a utilizar o Motoruino1, vamos ter que
seleccionar o Arduino Duemilenova ou Diecimila
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 1
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. Motoruino 1
Sensores Digitais
Retornam 2 estados - 0 ou 1 - HIGH ou LOW
Exemplo:
● Botões
● Sensores de colisão do Farrusco
https://www.arduino.cc/en/Tutorial/Buttonhttps://www.arduino.cc/en/Tutorial/InputPullupSerial
PullDown
O sinal do botão quando não está pressionado
é puxado para baixo, para o Ground.
Iniciação à Robótica
PullUp
O sinal do botão quando não está pressionado o
sinal é puxado para cima, ou seja para os 5v.
este vai ser o método utilizado no Farrusco
12. Motoruino 1
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
Iniciação à Robótica
13. Motoruino 1
Motores DC (direct current)
O motor DC tem dois pólos, de maneira que precisamos sempre
de usar dois pins no Arduino.
Activar ou desactivar estes pólos vai determinar a direcção de
rotação do motor.
Controle digital do motor Controle analógico do motor
Esta maneira de controlar o motor
requer dois pins digitais.
Esta maneira de controlar o motor
requer dois pins PWM, como é o caso
dos pins 3 e 5.
Iniciação à Robótica
14. Motoruino 1
Motores DC (direct current)
Existe uma outra possibilidade de controlar um motor DC com o
Motoruino, que consiste em utilizar dois pins digitais e o pin
ENABLE da ponte H.
Com os pins digitais definimos a direcção de rotação do motor,
neste caso estão a ser utilizados o 3 e o 4.
Com o pin Enable definimos a velocidade de rotação, para isto
precisamos de o ligar a um pin PWM, neste caso está ligado ao
pin 6.
Iniciação à Robótica
15. Motoruino 1
Servos
Motores de rotação limitada, normalmente 180º.
Utilizando a biblioteca Servo.h, podemos fazer rodar o servo
para o ângulo desejado.
https://www.arduino.cc/en/Reference/Servo
#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(10);
}
void loop() {
myservo.write(90);
}
Iniciação à Robótica
NOTA: quando se importa a biblioteca Servo.h, os pins 9 e 10 ficam incapacitados de fazer PWM
Uma biblioteca é uma porção de código feito para abstrair a complexidade
do programador. O programador só precisa de importar a biblioteca,
instanciar a mesma e utilizar as funções disponíveis.
17. Roda Omnidireccional Chassis
IR sensorServo Motor
Sensores de Colisão
Motores DC Rodas
CPU Motoruino 1
Componentes do Farrusco
Sensores de Luminosidade
LED Multicor
Iniciação à Robótica
19. 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
20. Navegação autónoma
Com sensores de colisão
Os sensores de colisão, representados a verde, sempre que
detectam uma colisão despoletam uma acção no programa para
o robô andar para trás e virar na direcção oposta da colisão.
Andar em frente
Há colisão?
Não.
Volta a andar em frente.
Sim.
Lado esquerdo ou direito?
Iniciação à Robótica
21. Navegação autónoma
Com sensor IR e Motor Servo
O motor Servo faz um varrimento num leque de 160º e a
distância é analisada.
Se a distância for inferior a um valor estipulado, o robô vira para
a direcção oposta para a qual o servo está a apontar.
A distância segura é representada pela transição da cor verde
para a cor azul. Se um obstáculo se interpor na cor azul é
despoletada mudança de direcção.
Iniciação à Robótica
22. Motoruino 1
2 Leds Blink
Então e se quizermos ter 2 LEDs a piscar individualmente?
Não podemos utilizar o delay(), pois este comando paraliza todo o
programa. Até agora temos visto exemplos de programação que
corre sequencialmente, isto impede de termos processos a correr
em paralelo.
É aqui que entra a biblioteca Metro
http://playground.arduino.cc/Code/Metro
Esta biblioteca permite definir vários temporizadores independentes,
e sempre que um temporizador “chega ao fim” activa uma ordem, ou
uma função.
// importamos a biblioteca utilizando o #include
#include <Metro.h>
// no caso da biblioteca Metro instanciamos a mesma e declaramos //
um valor para o temporizador
// o valor 500, significa que de 500 em 500 milisegundos, vai ser
// executado um comando
Metro metro0 = Metro(500);
// esta condição verifica o temporizador, e sempre que este “dá a
// volta” executa o comando que estiver dentro das chavetas
if (metro0.check() == 1)
{
// colocar o(s) comando(s) aqui
}
Iniciação à Robótica
Desafio:
Remover a função delay() dos programas
desenvolvidos anteriormente.
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
25. Obrigado!
Esta apresentação encontra-se em constante actualização.
Para questões e sugestões basta enviar um email para:
gmartins@artica.cc http://artica.cc