Como mover pratos pela prateleira da cozinha usando um robô?

Se você está procurando uma maneira de aumentar drasticamente o charme e a funcionalidade de sua cozinha, considere minimizar o esforço humano ali. O esforço humano pode ser minimizado fazendo-se um robô doméstico que ficará presente na cozinha e levará os utensílios sujos até a pia e parará aí. Quando a pessoa descarregar os utensílios do robô, ela retornará e trará mais deles. Às vezes, em cozinhas grandes, a pia de lavar não fica tão perto dos armários, então o robô leva a louça de um lugar para o outro da prateleira. Um caminho para o robô será feito na prateleira usando a fita preta. O robô usará dois sensores infravermelhos de proximidade para detectar o caminho e, com base na entrada recebida dos sensores, o Arduino fará com que os motores se movam com a ajuda de um driver de motor.



Robô doméstico

Como conectar todos os periféricos necessários para fazer um robô doméstico?

Agora, precisamos reunir os componentes necessários e começar a fazer o robô.



Etapa 1: Componentes usados

  • Arduino uno
  • Sensor IR (x5)
  • Motores DC
  • Perseguição de roda de carro
  • Fita preta
  • Jumper Wires
  • Bateria DC
  • Pistola de cola
  • Jogo de chaves de fenda

Etapa 2: estudar os componentes

Como já fizemos uma lista de componentes, vamos dar um passo à frente e fazer um breve estudo do funcionamento de cada um deles.



o Arduino UNO é uma placa microcontrolada composta por um microchip ATMega 328P e desenvolvida pela Arduino.cc. Esta placa possui um conjunto de pinos de dados digitais e analógicos que podem fazer interface com outras placas de expansão ou circuitos. Esta placa possui 14 pinos digitais, 6 pinos analógicos e programáveis ​​com o IDE Arduino (Integrated Development Environment) através de um cabo USB tipo B. Requer 5V para ligar EM e um Código C para operar.



Arduino UNO

O driver do motor L298N é usado para operar motores CC. O L298N é um driver de motor H-Bridge duplo que permite o controle de velocidade e direção de dois motores CC ao mesmo tempo. O módulo pode acionar motores CC com tensões entre 5 e 35 V, com pico de corrente de até 2A. Depende da tensão que é usada no terminal VCC dos motores. Em nosso projeto, o pino de 5 V será usado como entrada, pois precisamos conectá-lo a uma fonte de alimentação de 5 V para que o IC funcione corretamente. O diagrama de circuito do driver do motor L298N com os motores DC conectados é mostrado abaixo para compreender o mecanismo do driver do motor L298N. Para a demonstração, a entrada é fornecida pelo Estado Lógico em vez de sensores IR.

Diagrama de circuito feito em Proteus 8 Professional



Etapa 3: Compreendendo o diagrama de blocos e o princípio de funcionamento

Em primeiro lugar, vamos percorrer o diagrama de blocos, entender o princípio de funcionamento e, em seguida, avançar para a montagem dos componentes de hardware.

Diagrama de bloco

Os sensores que usaremos são digitais e podem dar a saída 0 ou 1. Esses sensores que compramos estão dando 1 em superfícies brancas e 0 nas superfícies pretas. Os sensores que compramos fornecem valores aleatórios, às vezes eles fornecem 0 nas superfícies brancas e 1 nas superfícies pretas. Usaremos cinco sensores neste robô. Existem quatro condições no código para cinco sensores.

  1. Encaminhar na linha: Quando o sensor do meio está na superfície preta e o resto dos sensores na superfície branca, a condição para frente será executada e o robô se moverá para frente. Se começarmos de Sensor1 e prossiga até Sensor5, o valor que cada um dos sensores dará, respectivamente, é (1 1 0 1 1) .
  2. Curva acentuada à direita: Quando o Sensor 1 e Sensor 2 estão na superfície branca e o resto dos sensores estão na superfície preta, a condição de curva fechada à direita será executada e o robô fará uma curva fechada à direita. Se começarmos de Sensor1 e prossiga até Sensor5, o valor que cada um dos sensores dará, respectivamente, é (1 1 0 0 0).
  3. Curva acentuada à esquerda: Quando o Sensor 4 e Sensor 5 estão na superfície branca e o resto dos sensores estão na superfície preta, a condição de curva fechada à esquerda será executada e o robô fará uma curva fechada à esquerda. Se começarmos de Sensor1 e prossiga até Sensor5, o valor que cada um dos sensores dará, respectivamente, é (0 0 0 1 1) .
  4. Pare: Quando todos os cinco sensores estiverem na superfície preta, o robô irá parar e os motores irão girar FORA. Este ponto com cinco superfícies pretas ficará próximo à pia para que a máquina de lavar louça possa descarregar os pratos do robô para lavar.

Faremos um caminho na prateleira da cozinha com fita preta e esse caminho terminará perto da pia, então o robô irá parar perto da pia e a máquina de lavar louça irá descarregar os pratos e então o robô se moverá em direção ao caminho e buscará os utensílios novamente.

Trilha do robô

Etapa 4: Introdução ao Arduino

Se você não está familiarizado com o IDE do Arduino antes, não se preocupe porque abaixo, você pode ver etapas claras de gravação de código na placa do microcontrolador usando o IDE do Arduino. Você pode baixar a versão mais recente do Arduino IDE em aqui e siga as etapas abaixo:

  1. Quando a placa Arduino estiver conectada ao seu PC, abra o “Painel de Controle” e clique em “Hardware e Sons”. Em seguida, clique em “Dispositivos e Impressoras”. Encontre o nome da porta à qual sua placa Arduino está conectada. No meu caso é “COM14” mas pode ser diferente no seu PC.

    Encontrar o porto

  2. Agora abra o IDE do Arduino. Em Ferramentas, defina a placa Arduino para Arduino / Genuino UNO.

    Tabuleiro de Configuração

  3. No mesmo menu de ferramentas, defina o número da porta que você viu no painel de controle.

    Porta de configuração

  4. Baixe o código anexado abaixo e copie-o para o seu IDE. Para fazer upload do código, clique no botão upload.

Você pode baixar o código em Aqui

Etapa 5: Compreendendo o Código

O código é muito simples. É explicado resumidamente a seguir:

  1. No início do código, os pinos do sensor são inicializados e, junto com isso, os pinos do driver do motor L298N também são inicializados.
    int enable1pin = 10; // Inicializando o pino PWM para entrada analógica do motor 1 int motor1pin1 = 2; // Inicializando o pino positivo para o motor 1 int motor1pin2 = 3; // Inicializando o pino negativo para o motor 1 int enable2pin = 11; // Inicializando o pino PWM para entrada analógica do motor 2 int motor2pin1 = 4; // Inicializando o pino positivo para o motor 2 int motor2pin2 = 5; // Inicializando o pino negativo para o motor 2 int S1 = 12; // Inicializando o pino 12 para o sensor 1 int S2 = 9; // Inicializando o pino 9 para o sensor 2 int S3 = 8; // Inicializando o pino 8 para o sensor 3 int S4 = 7; // Inicializando o pino 7 para o sensor 4 int S5 = 6; // Inicializando o pino 6 para o sensor 5
  2. configuração vazia () é uma função usada para definir os pinos como INPUT ou OUTPUT. Ele também define a taxa de transmissão do Arduino. A taxa de transmissão é a velocidade na qual a placa do microcontrolador se comunica com os outros componentes conectados.
    {pinMode (enable1pin, OUTPUT); // Habilitando PWM para Motor 1 pinMode (enable2pin, OUTPUT); // Habilitando PWM para Motor 2 pinMode (motor1pin1, OUTPUT); // Configurando motor1 pin1 como saída pinMode (motor1pin2, OUTPUT); // Definir motor1 pino2 como saída pinMode (motor2pin1, OUTPUT); // Definir motor2 pino1 como saída pinMode (motor2pin2, OUTPUT); // Definir motor2 pino2 como saída pinMode (S1, INPUT); // Configurando sensor1 como entrada pinMode (S2, INPUT); // Definindo sensor2 como entrada pinMode (S3, INPUT); // Configurando sensor3 como entrada pinMode (S4, INPUT); // Configurando sensor4 como entrada pinMode (S5, INPUT); // Definindo sensor5 como entrada Serial.begin (9600); // Definindo a taxa de transmissão}
  3. void loop () é uma função que é executada repetidamente em um ciclo. Neste loop, damos instruções ao Arduino UNO sobre quais operações realizar. A velocidade total dos motores é 255 e ambos os motores têm velocidades diferentes. Portanto, se quisermos mover o robô para frente, virar à direita etc, precisamos ajustar a velocidade dos motores. Usamos pinos analógicos no código porque queremos variar a velocidade dos dois motores em condições diferentes. Você pode ajustar a velocidade de seus motores por conta própria.
    void loop () {if (! (digitalRead (S1)) &&! (digitalRead (S2)) && (digitalRead (S3)) &&! (digitalRead (S4)) &&! (digitalRead (S5))) // Forward on a linha {analogWrite (enable1pin, 61); // Velocidade do motor 1 analogWrite (enable2pin, 63); // Motor 2 velocidades digitalWrite (motor1pin1, HIGH); // Motor 1 pino 1 definido como Alto digitalWrite (motor1pin2, LOW); // Motor 1 pino 2 definido como Baixo digitalWrite (motor2pin1, HIGH); // Motor 2 pino 1 definido como Alto digitalWrite (motor2pin2, LOW); // Motor 2 pino 2 definido para baixo} if (! (DigitalRead (S1)) &&! (DigitalRead (S2)) && (digitalRead (S3)) && (digitalRead (S4)) && (digitalRead (S5))) / / Curva acentuada à direita {analogWrite (enable1pin, 60); // Velocidade do motor 1 analogWrite (enable2pin, 80); // Motor 2 velocidades digitalWrite (motor1pin1, HIGH); // Motor 1 pino 1 definido como Alto digitalWrite (motor1pin2, LOW); // Motor 1 pino 2 definido como Baixo digitalWrite (motor2pin1, LOW); // Motor 2 pino 1 definido como Baixo digitalWrite (motor2pin2, LOW); // Motor 2 pino 2 definido para baixo} if ((digitalRead (S1)) && (digitalRead (S2)) && (digitalRead (S3)) &&! (DigitalRead (S4)) &&! (DigitalRead (S5))) / / Curva acentuada à esquerda {analogWrite (enable1pin, 80); // Velocidade do motor 1 analogWrite (enable2pin, 65); // Velocidade do motor 2 digitalWrite (motor1pin1, LOW); // Motor 1 pino 1 definido como Baixo digitalWrite (motor1pin2, LOW); // Motor 1 pino 2 definido como Baixo digitalWrite (motor2pin1, HIGH); // Motor 2 pino 1 definido como Alto digitalWrite (motor2pin2, LOW); // Motor 2 pino 2 definido para baixo} if ((digitalRead (S1)) && (digitalRead (S2)) && (digitalRead (S3)) && (digitalRead (S4)) && (digitalRead (S5))) // parar {analogWrite (enable1pin, 0); // Velocidade do motor 1 analogWrite (enable2pin, 0); // Velocidade do motor 2 digitalWrite (motor1pin1, LOW); // Motor 1 pino 1 definido como Baixo digitalWrite (motor1pin2, LOW); // Motor 1 pino 2 definido como Baixo digitalWrite (motor2pin1, LOW); // Motor 2 pino 1 definido como Baixo digitalWrite (motor2pin2, LOW); // Motor 2 pino 2 definido para baixo}}

Formulários

  1. Aplicações industriais : Esses robôs podem ser usados ​​como transportadores de equipamentos automatizados em indústrias, substituindo as correias transportadoras tradicionais.
  2. Aplicações domésticas : Também podem ser usados ​​em residências para fins domésticos, como limpeza de pisos, trabalhos de cozinha, etc.
  3. Aplicativos de orientação : Esses robôs podem ser usados ​​em locais públicos, como shoppings, praças de alimentação, museus, etc. para fornecer orientação sobre o caminho