Sunteți pe pagina 1din 5

Projeto af- educação 4.

0
Braço robótico com movimentos gravados

Aluno cursista: Everaldo De Oliveira Martins


Professor De Robótica
Curso DS&S

Componentes básicos
- Kit Braço Robótico Acrílico + 4 Servos sg90+ Parafusos Arduino;
- 4 potenciômetros de 10kohn;
- 1 alto-falantes tipo tipo buzzer;
- 2 Botões tipo push botton;
- Placa protoboard de no mínimo 12cm;
- Placa de Arduino uno;
- Fios para os jumpers;
- Cabo usb (para conexão do Arduino ao computador);
- Bateria ou fonte de 9v;
- Computador;
- Programas instalados- Arduino IDE com ardublock associado.
- Opcional: https://www.tinkercad.com/
http://fritzing.org/projects/

Público alvo
Os alunos participantes destes projetos são de todas as turmas a partir do 5º ano fundamental até o 3º ano do
médio, pois tanto os componentes básicos como a pratica desenvolvida obedecem ao mesmo roteiro de aula.

Matérias
A interdisciplinaridade associada tem como métodos os aplicados a área de:
- Física (ângulos e movimento angular, tempo, distancia, velocidade);
- Mecânica (montagem, coordenação de mecanismos, ajustes, resistência de materiais);
- Eletrônica (teste, instalação, manutenção, e soldagem de componentes eletrônicos);
- Elétrica (teste, instalação de componentes elétricos);
- Linguagem de programação (logica, codificação, simulação, testes, depuração)

Logica da programação
- Segue abaixo a 1ª figura. Nela são apresentadas as maneiras pelas quais são programadas as funções que serão
executadas no equipamento que é chamado de Arduino. Tal aplicação é utilizada em todas as séries alvo.

Projeto
O atual nivel de evolução industrial requer mais atividades repetitivas e algumas tarefas impossiveis pela
condição humana e seus limites físicos.
Nosso projeto (figura 1) é apenas um dos exemplos de maior notoriedade no meio industrial, apesar de ser
condicionado a movimentar peças leves, devida a sua pouca sua resistencia, ele pode representar muito bem um
equipapamento mais robusto com relação ao aprendizado.
Montagem

A montagem é bem simples. O kit de peças vem com manual de montagem para o braço e a colocação dos servos.
Com relaçao aos outros componentees eletronicos

Segue abaixo (figura2) a montagem que fiz e esta disponivel em Tinkercad:

https://www.tinkercad.com/things/hbxNN0V7998-braco-robotico-com-gravacao-
otimizada/editel?sharecode=1BJGhp-T5OvfZ0897UraQa7Gk03Ieyjb0kxW3R2HQZ8=

Teste e simulação
-O Giro realizado manualmente em cada potenciômetro faz com que o seu respectivo servo-motor faça também um
um movimento giratório.
Obs.: o ângulo de giro do potenciômetro é de, no máximo, 270graus e a angulação máxima deste servo-motor (sg90)
é de 90 graus.
-Cada botão tem uma função: gravação e execução da gravação.

Gravação - quando se pressiona o primeiro botão, (ligado à entrada 5 digital do Arduino) é reproduzido um bip
avisando que se iniciou a gravação dos movimentos. Neste momento podem se executar qualquer giro nos
potenciômetros e consequentemente o giro de cada servo-motor e o posicionamento das partes do braço. Ao
terminar as movimentações deve-se aperte-lo novamente pra encerrar a gravação.

Reprodução- quando se pressiona o 2º botão (ligado a entrada 4 digital do Arduino) se inicia o processo de repetição
dos movimentos gravados.

Carregamento do script no Arduino

A programação foi feita na linguagem “C” com biblioteca própria pro Arduino. Logicamente que a aplicação
dever ser previamente instalada para poder executar a codificação. Basta copiar e colar na interface da aplicação,
enviar para a placa do Arduino (controlador programável). É bem comum encontrarmos literatura e mídia explicando
como instalar os aplicativos e sua interação com os componentes eletrônicos.

Execução
Assim que o botão é pressionado ocorre a sequência
- LED amarelo acende;
- Depois o LED vermelho do motorista se acende, enquanto o verde do pedestre também acende;
- E em seguida o verde do pedestre começa a piscar e acende seu vermelho, passando o verde do motorista se
acender.

Codificação

#include <Servo.h>

#define pinBuzzer 3
#define btnGravar 5
#define btnReproduzir 4

#define pinPotGiro A0
#define pinPotFrente A1
#define pinPotCima A2
#define pinPotGarra A3

#define pinSerGiro 11
#define pinSerFrente 10
#define pinSerCima 9
#define pinSerGarra 6

#define minGiro 0
#define maxGiro 180

#define minFrente 0
#define maxFrente 180

#define minCima 0
#define maxCima 180

#define minGarra 0
#define maxGarra 180

#define limiteGravacao 400

Servo servoGiro;
Servo servoFrente;
Servo servoCima;
Servo servoGarra;

byte vGiro;
byte vFrente;
byte vCima;
byte vGarra;

bool reproduzindo = false;

bool gravando = false;


int atual = 0;
int limite = 0;
byte giro[limiteGravacao];
byte frente[limiteGravacao];
byte cima[limiteGravacao];
byte garra[limiteGravacao];

void setup()
{
servoGiro.attach(pinSerGiro, 500, 2500);
servoFrente.attach(pinSerFrente, 500, 2500);
servoCima.attach(pinSerCima, 500, 2500);
servoGarra.attach(pinSerGarra, 500, 2500);

pinMode(pinPotGiro, INPUT);
pinMode(pinPotFrente, INPUT);
pinMode(pinPotCima, INPUT);
pinMode(pinPotGarra, INPUT);

pinMode(btnGravar, INPUT_PULLUP);
pinMode(btnReproduzir, INPUT_PULLUP);
}

void loop()
{
if(!gravando && digitalRead(btnGravar) == LOW) {
gravando = true;
atual = 0;
tone(pinBuzzer, 500, 1000);
delay(1000);
}
else if(!gravando && digitalRead(btnReproduzir) == LOW && limite > 0)
{
reproduzindo = !reproduzindo;
atual = 0;
tone(pinBuzzer, 500, 1000);
delay(1000);
}

if(reproduzindo)
{
vGiro = giro[atual];
vFrente = frente[atual];
vCima = cima[atual];
vGarra = garra[atual];

atual++;

if(atual > limite) {


reproduzindo = false;
tone(pinBuzzer, 500, 500);
delay(500);
tone(pinBuzzer, 500, 500);
delay(500);
tone(pinBuzzer, 500, 1000);
delay(1000);
}
} else {
vGiro = map(analogRead(pinPotGiro), 0, 1023, minGiro, maxGiro);
vFrente = map(analogRead(pinPotFrente), 0, 1023, minFrente, maxFrente);
vCima = map(analogRead(pinPotCima), 0, 1023, minCima, maxCima);
vGarra = map(analogRead(pinPotGarra), 0, 1023, minGarra, maxGarra);
}

servoGiro.write(vGiro);
servoFrente.write(vFrente);
servoCima.write(vCima);
servoGarra.write(vGarra);

if(reproduzindo && atual == 1)


delay(2000);

if(gravando)
{
if(digitalRead(btnGravar) == LOW || atual == limiteGravacao)
{
gravando = false;
limite = atual;
tone(pinBuzzer, 500, 500);
delay(500);
tone(pinBuzzer, 500, 500);
delay(500);
tone(pinBuzzer, 500, 1000);
delay(1000);
} else if(mexeu()) {
giro[atual] = vGiro;
frente[atual] = vFrente;
cima[atual] = vCima;
garra[atual] = vGarra;

atual++;
}
}

delay(100);
}

bool mexeu() {
if(atual == 0)
return true;
if(vGiro == giro[atual-1])
if(vFrente == frente[atual-1])
if(vCima == cima[atual-1])
if(vGarra == garra[atual-1])
return false;
return true;
}

S-ar putea să vă placă și