sganzerla / arduino-robo-servo-motor

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.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

arduino-robo-servo-motor

Objetivo

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.

Vídeo

Vídeo

Circuito

image

Hardware necessário

- 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

a) Placa Arduino Uno

image

b) Micro servo motores

image

c) Sensor Som KY-038

image

d) Protoboard

image

e) Cabos de conexão

image

Material utilizado para confeccionar a estrutura do robô

  • 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

Funcionamento

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();
}

Links úteis

  • VarSpeedServo - Biblioteca com controle de velocidade dos movimentos

Aplicações

  • Desenvolver criatividade de crianças e adultos

  • Brinquedo infantil

About

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.

License:MIT License


Languages

Language:C++ 100.0%