Post on 12-Apr-2017
desafio em robóticaCatólica de Santa Catarina
Seu nome
O que motivou você a participar do desafio?
Qual sua experiência com programação ou robótica?
Quais são seus planos para os próximos anos?
Como soube do desafio?
algoritmos
"um conjunto de passos para completar uma tarefa."
Algoritmo
https://goo.gl/Psp5yU
algoritmos em ciência da computação
exatidão e eficiência
compressão de áudio e vídeo
descoberta de rotas
renderização
http://goo.gl/MMQqlj
O bote pode carregar apenas 2 pessoas por vez.Apenas a mãe, o pai e o policial podem operar o bote.A mãe não pode ser deixada sozinha com os filhos.O pai não pode ser deixado sozinho com as filhas.O ladrão não pode ser deixado sozinho com ninguém sem o policial.
intervalo
projetos loucos
Internet of Things - IoT
exemplo
robótica
nosso desafio
NÃO FAÇA ISSO
estrutura sequencialcomponentes 1 arduino uno 1 led 1 resistor 220Ωfim componentes
início criar novo projeto procurar por componentes adicionar componentes configurar resistor conectar componentes iniciar simulação parar simulação fim
Algoritmo - Piscar LED
int led = 13; // variável led aponta para porta digital 13
void setup() { pinMode(led, OUTPUT); // define a porta do LED como saída}
void loop() { digitalWrite(led, HIGH); // acende o LED delay(1000); // espera por 1 segundo digitalWrite(led, LOW); // apaga o LED delay(1000); // espera por 1 segundo }
estrutura condicional IF
se (condição) então (consequência)senão [se (outra condição)] (alternativa)fim se
estrutura condicional IF
Operadores condicionais (operadores lógicos)
== Comparação!= Diferente> Maior< Menor>= Maior igual<= Menor igual
estrutura condicionalcomponentes 1 arduino uno 1 led 1 resistor 220Ω 1 resistor 1kΩ 1 push button (botão)fim componentes
inicio ... se botão pressionado então acende LED senão apaga LEDfim
estrutura condicionalcomponentes 1 arduino uno 1 led 1 resistor 220Ω 1 resistor 1kΩ 1 push button (botão)fim componentes
inicio ... se botão pressionado então acende LED senão apaga LEDfim
estrutura condicionalcomponentes 1 arduino uno 1 led 1 resistor 220Ω 1 resistor 1kΩ 1 push button (botão)fim componentes
inicio … se botão pressionado então acende LED senão apaga LEDfim
const int pinoBotao = 2; // botão está no pino 2const int pinoLED = 13; // LED está no pino 13
int estadoBotao = 0; // variável de controle do botão
void setup() { pinMode(pinoLED, OUTPUT); // define pino do LED como saída pinMode(pinoBotao, INPUT); // define pino do botão como entrada}
void loop() { estadoBotao = digitalRead(pinoBotao); // atribui valor da variável de estado do botão if (estadoBotao == HIGH) { // se o botão está pressionado digitalWrite(pinoLED, HIGH); // acende o LED } else { digitalWrite(pinoLED, LOW); // apaga o LED } }
Algoritmo - Botão com LED
intervalo
estrutura de repetição FOR
para (inicialização, condição, passo) faça (consequência)fim para
estrutura de repetição FOR
para (prato = 1, prato <= 5, prato + 1) faça colocar o prato na máquinafim para
LED PWMcomponentes 1 arduino uno 1 led verde 1 resistor 220Ωfim componentes
início … para força de 0 a 255 faça aplica força ao LED fim para para força de 255 a 0 aplica força ao LED fim para fim
Algoritmo - LED PWM
int led = 11;
void setup() { pinMode(led, OUTPUT);}
void loop() { for (int i = 0; i <= 255; i++) { analogWrite(led, i); delay(15); } for (int i = 255; i >= 0; i--) { analogWrite(led, i); delay(15); }}
estrutura de repetiçãocomponentes 1 arduino uno 1 servofim componentes
inicio … para cada angulo entre 0 e 180 faça aplica angulo ao servo espera 15 milisegundos fim para para cada angulo entre 180 e 0 faça aplica angulo ao servo espera 15 milisegundos fim parafim
#include <Servo.h>const int ANGULO_MIN = 0;const int ANGULO_MAX = 180;const int PINO_SERVO = 2;
int angulo = 0;Servo servo;
void setup () { servo.attach(PINO_SERVO);}
void loop() { for (angulo = ANGULO_MIN; angulo <= ANGULO_MIN; angulo++) { servo.write(angulo); delay(15); }}
Algoritmo - Servo
estrutura de repetição WHILE
enquanto (condição verdadeira) faça consequênciafim enquanto
estrutura de repetição WHILE
enquanto (houver pratos na pilha) faça retirar um prato da pilha lavar o prato retiradofim enquanto
estrutura de repetição DO WHILE
faça consequênciaenquanto (condição verdadeira)
estrutura de repetição DO WHILE
Programador encontrado morto na banheira cinco dias após ter sido dado como desaparecido. Junto a ele foi encontrado um shampoo com as seguintes instruções: Lavar, enxaguar, repetir.
exercícios
1. Modifique o algoritmo LED PWM para utilizar a estrutura
WHILE
2. Modifique o algoritmo LED PWM para utilizar a estrutura
DO WHILE
revisão aula 1componentes aluno(a)s muito querido(a)s e comportado(a)s 2 professores nem tão engraçadosfim componentes
inicio introdução a algoritmos introdução ao arduino projetos muito loucos com Arduino introdução à internet das coisas exemplo com arduino apresentação do desafio apresentação do simulador 123d.circuits estrutura sequencial estrutura condicional estruturas de repetição exercicios introdução a PWMfim
exercício final(vale um adesivo para quem terminar primeiro)
Crie um projeto Arduino para simular um semáforo com efeito fade.
Luz verde deve permanecer totalmente acesa por 5 segundos
Luz amarela deve permanecer totalmente acesa por 2 segundos
Luz vermelha deve permanecer totalmente acesa por 7 segundos
Cada passo do fade out deve durar 15 milisegundos
até a próxima!tem uma hora apenas e quer aprender mais sobre programação
https://goo.gl/OjCn5m
projetos legaishttp://goo.gl/rCya1d (Instructables)
simuladorhttp://goo.gl/c3fG2B (123d.circuits)
algoritmoshttps://goo.gl/Psp5yU (Khan Academy)
meu e-mailnatambarbosa@gmail.com
meu twitter@natabarbosa
atribuição (relembrando)
Variáveis tem um tipo
int x;
Variáveis podem receber um valor
x = 9;
operadores aritméticos (relembrando)
Operador Exemplo Resultado
+ a = 2 + 1 3
- b = 4 - 2 2
* c = 9 * 9 81
/ d = c / a 27
% d % 5 2
Variáveis do topo int são definidas com valor 0 por padrão.
chega de simulador.vamos lá pra fora!
1. Emite pulso2. Para de emitir pulso3. Mede tamanho do pulso retornado como distância até
objeto mais próximo4. Converte distância para centímetros
● 1 sensor na frente● 1 sensor atrás● 0 = branco, 1024 = preto
● Sentido horário e antihorário● Controle de velocidade via PWM● Motor para entrega de cédulas em máquinas caça
níquel
● Sentido horário e antihorário● Controle de velocidade via PWM● Esteira de cédulas em máquinas caça níquel
● Permite controlar 2 motores DC● Ligado em 12v● Fornece 5v para o Arduino
● Bateria do robô● Feita com Lithium de baterias de notebook
● Bateria do robô● Feita com Lithium de baterias de notebook
intervalo
http://goo.gl/6ewcYT
#include "motor.h"#include "sensor_ultrasonico.h"#include "sensor_reflexo.h"
const int ULTRASONICO_LEITURA = 9;const int ULTRASONICO_EMISSAO = 8;sensorUltrasonico ultrasonico;...ultrasonico = iniciaSensorUltrasonico(ULTRASONICO_LEITURA, ULTRASONICO_EMISSAO);...long distancia = leUltrasonico(ultrasonico);
const int REFLEXO_FRENTE_AN = 1;const int REFLEXO_COSTAS_AN = 0;sensorReflexo reflexo;...reflexo = iniciaSensorReflexo(REFLEXO_FRENTE_AN, REFLEXO_COSTAS_AN);...long reflexoFrente = leituraReflexo(LEITURA_REFLEXO_FRENTE, reflexo);long reflexoCostas = leituraReflexo(LEITURA_REFLEXO_COSTAS, reflexo);
const int PWM_MOTOR_1 = 6;const int CONTROLE_MOTOR_1_DIR_1 = 7;const int CONTROLE_MOTOR_1_DIR_2 = 5;const int PWM_MOTOR_2 = 3;const int CONTROLE_MOTOR_2_DIR_1 = 4;const int CONTROLE_MOTOR_2_DIR_2 = 2;
const int DIRECAO_FRENTE = 8;const int DIRECAO_ESQUERDA = 4;const int DIRECAO_DIREITA = 6;const int DIRECAO_PARADO = 5;const int DIRECAO_REVERSO = 2;...motores = iniciaMotores(PWM_MOTOR_1, PWM_MOTOR_2, CONTROLE_MOTOR_1_DIR_1, CONTROLE_MOTOR_1_DIR_2, CONTROLE_MOTOR_2_DIR_1, CONTROLE_MOTOR_2_DIR_2);...controlaMotores(motores, DIRECAO_REVERSO, 1, 1, 1200); // 1 = potência, 1200 = tempocontrolaMotores(motores, DIRECAO_FRENTE, 1, 1, 0);controlaMotores(motores, DIRECAO_ESQUERDA, 0.5, 0.5, 0); // 0.5 = potência, 0 = tempocontrolaMotores(motores, DIRECAO_DIREITA, 0.5, 0.5, 0);
INVERTER MOTORcomponentes 1 arduino uno 1 controlador de motor 2 motores 1 sensor ultra-sônicofim componentes
início … inclui bibliotecas inicia componentes se algo está 10cm ou menos à frente do sensor então
inverter motores senão liga motores para frente fim se fim
#include "motor.h"#include "sensor_ultrasonico.h"
#include "motor.h"#include "sensor_ultrasonico.h"driverMotor motores;sensorUltrasonico ultrasonico;
// Pinosconst int PWM_MOTOR_1 = 6;const int CONTROLE_MOTOR_1_DIR_1 = 7;const int CONTROLE_MOTOR_1_DIR_2 = 5;const int PWM_MOTOR_2 = 3;const int CONTROLE_MOTOR_2_DIR_1 = 4;const int CONTROLE_MOTOR_2_DIR_2 = 2;const int ULTRASONICO_LEITURA = 9;const int ULTRASONICO_EMISSAO = 8;const int DIRECAO_FRENTE = 8;const int DIRECAO_REVERSO = 2;
...
Algoritmo - Inverter Motor
...void setup(){ motores = iniciaMotores(PWM_MOTOR_1, PWM_MOTOR_2, CONTROLE_MOTOR_1_DIR_1, CONTROLE_MOTOR_1_DIR_2, CONTROLE_MOTOR_2_DIR_1, CONTROLE_MOTOR_2_DIR_2); ultrasonico = iniciaSensorUltrasonico(ULTRASONICO_LEITURA, ULTRASONICO_EMISSAO); Serial.begin(9600); }
void loop(){ long distancia = leUltrasonico(ultrasonico); Serial.print("distância: "); Serial.print(distancia); Serial.println("cm"); if (distancia <= 10) { controlaMotores(motores, DIRECAO_REVERSO, 1, 1, 1200); } else { controlaMotores(motores, DIRECAO_FRENTE, 1, 1, 0); }}
Algoritmo - Inverter Motor
PARAR MOTORcomponentes 1 arduino uno 1 controlador de motor 2 motores 2 sensores reflexofim componentes
início … inclui bibliotecas inicia componentes se a cor branca é detectada então
parar motores senão liga motores fim se fim
#include "motor.h"#include "sensor_reflexo.h"
#include "motor.h"#include "sensor_reflexo.h"driverMotor motores;sensorReflexo reflexo;// Pinosconst int PWM_MOTOR_1 = 6;const int CONTROLE_MOTOR_1_DIR_1 = 7;const int CONTROLE_MOTOR_1_DIR_2 = 5;const int PWM_MOTOR_2 = 3;const int CONTROLE_MOTOR_2_DIR_1 = 4;const int CONTROLE_MOTOR_2_DIR_2 = 2;const int ULTRASONICO_LEITURA = 9;const int ULTRASONICO_EMISSAO = 8;const int DIRECAO_FRENTE = 8;const int DIRECAO_PARADO = 5;const int REFLEXO_FRENTE_AN = 1;const int REFLEXO_COSTAS_AN = 0;const int COR_BRANCO_LIMITE = 550;const int LEITURA_REFLEXO_FRENTE = 1;const int LEITURA_REFLEXO_COSTAS = 2;...
Algoritmo - Parar Motor
...void setup(){ motores = iniciaMotores(PWM_MOTOR_1, PWM_MOTOR_2, CONTROLE_MOTOR_1_DIR_1, CONTROLE_MOTOR_1_DIR_2, CONTROLE_MOTOR_2_DIR_1, CONTROLE_MOTOR_2_DIR_2); reflexo = iniciaSensorReflexo(REFLEXO_FRENTE_AN, REFLEXO_COSTAS_AN); Serial.begin(9600); }
void loop(){ long reflexoFrente = leituraReflexo(LEITURA_REFLEXO_FRENTE, reflexo); long reflexoCostas = leituraReflexo(LEITURA_REFLEXO_COSTAS, reflexo); if (reflexoFrente < COR_BRANCO_LIMITE || reflexoCostas < COR_BRANCO_LIMITE) { controlaMotores(motores, DIRECAO_PARADO, 1, 1, 0); } else { controlaMotores(motores, DIRECAO_FRENTE, 1, 1, 0); }
}
Algoritmo - Parar Motor
POTÊNCIA DO MOTOR RELATIVA À DISTÂNCIAcomponentes 1 arduino uno 1 controlador de motor 2 motores 1 sensor ultra-sônicofim componentes
início … inclui bibliotecas inicia componentes inicia motor com potência relativa à distância do objeto mais próximo fim
#include "motor.h"#include "sensor_ultrasonico.h"
#include "motor.h"#include "sensor_ultrasonico.h"driverMotor motores;sensorUltrasonico ultrasonico;
// Pinosconst int PWM_MOTOR_1 = 6;const int CONTROLE_MOTOR_1_DIR_1 = 7;const int CONTROLE_MOTOR_1_DIR_2 = 5;const int PWM_MOTOR_2 = 3;const int CONTROLE_MOTOR_2_DIR_1 = 4;const int CONTROLE_MOTOR_2_DIR_2 = 2;const int ULTRASONICO_LEITURA = 9;const int ULTRASONICO_EMISSAO = 8;const int DIRECAO_FRENTE = 8;...
Algoritmo - Potência relativa à distância
...void setup(){ motores = iniciaMotores(PWM_MOTOR_1, PWM_MOTOR_2, CONTROLE_MOTOR_1_DIR_1, CONTROLE_MOTOR_1_DIR_2, CONTROLE_MOTOR_2_DIR_1, CONTROLE_MOTOR_2_DIR_2); ultrasonico = iniciaSensorUltrasonico(ULTRASONICO_LEITURA, ULTRASONICO_EMISSAO); Serial.begin(9600); }
void loop(){ long distancia = leUltrasonico(ultrasonico); float potencia = (float) (1.0 - ( (float) distancia) / 255.0); Serial.print("distância: "); Serial.print(distancia); Serial.println("cm"); Serial.print("potência: "); Serial.print(potencia); if (potencia >= 0 && potencia <= 1) { controlaMotores(motores, DIRECAO_FRENTE, potencia, potencia, 1200); }
}
Algoritmo - Potência relativa à distância
revisão aula 2componentes aluno(a)s muito querido(a)s e comportado(a)s 2 professores muito engraçados 1 robô matadorfim componentes
inicio correção de exercícios prêmios de robótica da catolica sc apresentação do projeto dos alunos apresentação do protótipo apresentação dos componentes apresentação das bibliotecas de programação exerciciosfim
até a próxima!
projeto dos colegas: Oficina de Arduino Joinvillehttps://www.facebook.com/groups/oficinadearduinojoinville/
meu e-mailnatambarbosa@gmail.com
meu twitter@natabarbosa
RobotChallenge ViennaMini Sumo
Regras
Regras Básicas➔ 1 robô por equipe
➔ Objetivo = empurrar o oponente para fora do dojô
➔ 1 round = 1 minuto
➔ 1 partida = no máximo 3 rounds
➔ O primeiro a fazer 2 pontos ganha a partida
Regras de Tempo➔ Robôs devem permanecer paralisados por 5 segundos ao início de cada round
➔ Tempo máximo de partida sem acréscimos = 3 minutos
➔ Tempo máximo de partida com acréscimos = 4 minutos e 30 segundos
➔ Acréscimo de 30 segundos ao tempo de round pode ser concedido pelo juíz
➔ Caso o tempo limite seja excedido antes de alguma equipe fazer 2 pontos, a equipe com 1 ponto ganha a partida
➔ Intervalo de 30 segundos entre rounds
➔ Intervalo de 5 minutos entre partidas
PodeModificar o programa entre partidas
Entrar na área de competição entre rounds para manusear o robô
Trocar bateria do robô entre partidas
Torcer para o robô
Comemorar vitórias
Chorar por derrota
NÃO podeModificar o programa entre rounds
Entrar na área de competição durante um round
Paralisação do robô por mais de 5 segundos, exceto no início do round (ponto para o oponente)
Demorar mais do que 30 segundos para começar novo round
Insultar a equipe adversária ou insultar o robô oponente
Contestar a decisão do juíz
Dúvidas?
Leia o documento de regras
http://goo.gl/fLsiDy
Resultado1° Lugar: Os Newbinha (Colégio Estadual Juracy Maria Brosing)
2° Lugar: AACD (E.E.B. Alicia Bittencourt Ferreira e E.E.B. Marli Maria de Souza)
3° Lugar: LTF (Colégio Estadual Juracy Maria Brosing)
4° Lugar: Alexitimia
5° Lugar: Heber Core e Paranauê
Resultados Completos: http://goo.gl/hxiEPm