Robô desenvolvido com materiais recicláveis em uma placa Arduino, com dois micro servo motores e uma placa de som KY-038. O robô reage com os olhos e a boca ao som de duas palmas.
- a) 1 Placa Arduino com cabo USB
- b) 2 Micro servo motores
- c) 1 Sensor som ky-038
- d) 1 Protoboard
- h) 10-15 Cabos de conexão
-
Corpo do Robô: 1 isopor 40x25cm ( veio num gabinete de computador)
-
Olhos: 25 cm cano PVC de 40mm para dar movimento com dois parafusos fixados para serem os olhos
-
Boca: 1 tampa de pacote de lenço umedecido do tipo abre/fecha
-
Arames firmes mas maleáveis: 1m para fixar os servo motores no isopor e para dar a movimentação dos servos aos olhos e a boca
-
3 Prendedores de roupa: as pernas separadas foram utilizadas para passar o arame e fixar os servos ao isopor
Velocidade em que os motores movimentam-se pode ser alterada nessa variável
// velocidade dos movimentos
#define VEL_MOVIMENTO 30
Declaração do ângulo máximo e mínimo de movimentação dos servos. Se a movimentaçao do motor ficar presa por um ângulo inserido errado ele pode estragar ou impedir a execução correta das outras instruções uma vez que ele aguarda o movimento completo do eixo para seguir com as instruções.
// create servo objects
VarSpeedServo servoOlhos;
int ANG_MAX_MIN_OLHOS[] = {0, 70};
VarSpeedServo servoBoca;
int ANG_MAX_MIN_BOCA[] = {20, 90};
Ao escutar 2 palmas [...]
if (((millis() - esperaPalmas) > intervaloPalmas) && (quantidadePalmas != 0))
{
if (quantidadePalmas == 2)
{
movimentarOlhosBoca();
}
delay(delayfinal);
quantidadePalmas = 0;
}
[...] o robô vai movimentar-se 100 vezes com ângulos gerados randomicamente, dentro da faixa de limites declarada.
void movimentarOlhosBoca()
{
// define como verdadeiro para impedir que o ruído do motor do servo
// invoque o método novamente
emMovimentacao = true;
for (size_t i = 0; i < 100; i++)
{
Serial.println(i);
/* (angulo, velocidade, aguarda movimento completo para ir proxima instrucao) */
servoOlhos.write(gerarNumeroRandomico(ANG_MAX_MIN_OLHOS), VEL_MOVIMENTO, true);
servoBoca.write(gerarNumeroRandomico(ANG_MAX_MIN_BOCA), VEL_MOVIMENTO, true);
};
posicionarAnguloInicioServo();
delay(2000);
emMovimentacao = false;
}
Enquanto o robô movimenta-se ele para de ouvir, para que o ruído do motor não acione novamente os movimentos.
void loop()
{
if (!emMovimentacao)
escutarPalmas();
}
- VarSpeedServo - Biblioteca com controle de velocidade dos movimentos
-
Desenvolver criatividade de crianças e adultos
-
Brinquedo infantil