No mundo, todos os dias, cada vez mais popular entre os limpadores robóticos. Graças a esses pequenos ajudantes, a casa fica muito mais limpa e muito menos esforço é feito na limpeza. Existem muitas modificações diferentes nos robôs, todas diferem em funcionalidade, tamanho e outros parâmetros.
Especificamente, este artigo considerará um exemplo de como
faça você mesmo Você pode criar um robô simples, que por si só aspirará a sala quando necessário. O controlador é usado aqui como o "cérebro"
Arduino.
Materiais e ferramentas para a fabricação do robô:- placa que controla o funcionamento dos motores (blindagem do motor Arduino);
- placa Arduino;
- dois motores com engrenagens (motores a 3 volts e velocidade de rotação de cerca de 100 rpm);
- rodas (podem ser feitas de latas de alumínio;
- um cooler de uma fonte de alimentação de computador (possível em 5V e 12V);
- Fonte de alimentação de 5V (bateria);
- fios e placas para instalação de elementos de rádio;
- para fazer o caso, você precisará de um recipiente de plástico;
- Outro pequeno recipiente para criar uma lixeira;
- cola quente;
- ímãs;
- papelão.
O processo de fabricação do robô:
Primeiro passo Parte do software do robô e esboço:
O coração do robô é o controlador Arduino. Para programá-lo, você precisará de um computador e software especial.
Para baixar o esboço no quadro, você precisará do programa IDE do Arduino. Abaixo, você pode pegar o código do programa do robô e ver o circuito principal.
/*
Programa para controlar um robô com dois motores.
O robô gira quando os motores mudam de velocidade e direção.
Pára-choques dianteiros nos lados esquerdo e direito detectam obstáculos.
Os sonares ultrassônicos podem ser conectados a entradas analógicas (testadas no LV-MaxSonar-EZ1):
- colocar pinos no array sonarPins na seguinte ordem: esquerda, direita, frente, outras.
Exemplos:
1. apenas sonares esquerdo e direito conectados aos pinos 2 e 3: sonarPins [] = {2,3}
2. sonares esquerdo, direito e dianteiro conectados aos pinos 2, 3 e 5: sonarPins [] = {2,3,5}
3. somente sonar frontal conectado ao pino 5: sonarPins [] = {-1, -1,5}
4. apenas o sonar esquerdo conectado ao pino 2: sonarPins [] = {2}
5. único sonar direito conectado aos pinos 3: sonarPins [] = {-1,3}
6.5 sonares conectados aos pinos 1,2,3,4,5: sonarPins [] = {1,2,3,4,5}
A blindagem do motor é usada para acionar motores.
*/
const int Baud = 9600; // velocidade da porta UART
// Propriedades do sonar
int sonarPins [] = {1, 2}; // Números de pinos analógicos no sensor de sonar Pinos AN
const long MinLeftDistance = 20; // Distância esquerda mínima permitida
const long MinRightDistance = 20; // Distância certa mínima permitida
const long MinFrontDistance = 15; // Distância frontal mínima permitida
const int SamplesAmount = 15; // mais amostras - medição mais suave e maior atraso
const int SonarDisplayFrequency = 10; // exibe apenas uma dessas linhas - nem todas
int sonarDisplayFrequencyCount = 0;
Fator const long = 2,54 / 2;
amostras longas [sizeof (sonarPins)] [SamplesAmount];
int sampleIndex [sizeof (sonarPins)];
// lado direito
const int pinRightMotorDirection = 4; // isso pode ser marcado na blindagem do motor como "DIR A"
const int pinRightMotorSpeed = 3; // isso pode ser marcado na blindagem do motor como "PWM A"
const int pinRightBumper = 2; // onde o pára-choque direito está conectado
// lado esquerdo
const int pinLeftMotorDirection = 7; // isso pode ser marcado na blindagem do motor como "DIR B"
const int pinLeftMotorSpeed = 6; // isso pode ser marcado na blindagem do motor como "PWM B"
const int pinLeftBumper = 8; // onde o pára-choque direito está conectado
// descomente as próximas 2 linhas se o Motor Shield estiver com quebras
// const int pinRightMotorBreak = PUT_BREAK_PIN_HERE; // isso pode ser marcado na blindagem do motor como "BREAKE A"
// const int pinLeftMotorBreak = PUT_BREAK_PIN_HERE; // isso pode ser marcado na blindagem do motor como "BREAKE B"
// campos
const int turnRightTimeout = 100;
const int turnLeftTimeout = 150;
// define no contador quanto tempo um motor está funcionando de volta: N / 10 (em milissegundos)
int countDownWhileMovingToRight;
int countDownWhileMovingToLeft;
// Inicialização
configuração nula () {
Serial.begin (Baud);
initPins ();
// descomente as próximas 4 linhas se o Motor Shield estiver com quebras
// pinMode (pinLeftMotorBreak, OUTPUT);
// pinMode (pinRightMotorBreak, OUTPUT);
// digitalWrite (pinLeftMotorBreak, LOW); // desativar pausas
// digitalWrite (pinRightMotorBreak, LOW); // desativar pausas
runRightMotorForward ();
runLeftMotorForward ();
startMotors ();
}
// loop principal
loop vazio () {
verificaAndSetRightSide ();
verificaAndSetLeftSide ();
processRightSide ();
processLeftSide ();
delay (10); // repita a cada 10 milissegundos
}
//---------------------------------------------------
void initPins () {
pinMode (pinRightMotorDirection, OUTPUT);
pinMode (pinRightMotorSpeed, OUTPUT);
pinMode (pinRightBumper, INPUT);
pinMode (pinLeftMotorDirection, OUTPUT);
pinMode (pinLeftMotorSpeed, OUTPUT);
pinMode (pinLeftBumper, INPUT);
for (int i = 0; i pinMode (sonarPins [i], INPUT);
}
void startMotors () {
setMotorSpeed (pinRightMotorSpeed, 255);
setMotorSpeed (pinLeftMotorSpeed, 255);
}
void waitWhileAnyBumperIsPressed () {
while (checkBumperIsNotPressed (pinRightBumper)
&& checkBumperIsNotPressed (pinLeftBumper)) {
delay (20); // verifica a cada 20 milissegundos
}
}
void processRightSide () {
if (countDownWhileMovingToRight MinFrontDistance) // verifica se a distância frontal mínima permitida não é atingida
retornar
if (checkCounterIsNotSet (countDownWhileMovingToLeft)) // se o contador ainda não estiver em contagem regressiva
runLeftMotorBackward (); // executa o motor direito para trás
countDownWhileMovingToLeft = turnLeftTimeout; // define o contador para o valor máximo para iniciar a contagem regressiva
}
bool checkCounterIsNotSet (contador int) {
contador de retorno = SamplesAmount)
sampleIndex [pinIndex] = 0;
amostras [pinIndex] [sampleIndex [pinIndex]] = valor;
return true;
}
Long calculAvarageDistance (int pinIndex) {
média longa = 0;
for (int i = 0; i média + = amostras [pinIndex] [i];
média de retorno / SamplesAmount;
}
Etapa dois Preparação dos elementos básicos do robô
O cartão é usado como base para fixar todos os componentes do robô, incluindo a bateria, placas de controle e motores.
A turbina deve ser colada adequadamente ou fixada de outro modo em um pequeno recipiente de plástico no qual é feito um orifício para a absorção de sujeira. Posteriormente, esse design é colado à base de papelão. Além disso, o recipiente deve ter um orifício adicional através do qual o ar sairá. Deve haver um filtro, o autor decidiu usar tecido sintético para esses fins.
No estágio seguinte, o refrigerador precisa ser colado com servos e, em seguida, esse design é instalado em uma base de papelão.
Etapa três Fabricamos rodas para o robô
Para fazer as rodas, você precisa pegar latas de alumínio e cortar as partes superior e inferior delas. Então esses elementos são colados. Agora, resta apenas conectar as rodas adequadamente aos servomotores com adesivo hot melt. É importante entender que as rodas devem ser fixadas claramente no centro dos eixos dos servos. Caso contrário o robô vai dirigir torto e vai gastar energia.
Etapa quatro O processo final de montagem do robô
Depois que a bateria é instalada e todos os elementos do robô são conectados, resta colocar a estrutura em um estojo durável. Um grande recipiente de plástico é ótimo para esses fins. Antes de tudo, devem ser feitos orifícios no nariz do corpo do robô, através dos quais serão emitidos contatos que emitirão um sinal eletrônica quando o robô colide com um obstáculo.
Para que o estojo seja removido rápida e facilmente, são usados ímãs para corrigi-lo; nesse caso, existem oito deles. Os ímãs são colados no interior do aspirador e no próprio recipiente, com 4 peças cada.
Isso é tudo. Agora o robô está montado e pode ser experimentado na prática. Apesar do robô não conseguir recarregar sozinho e ter uma capacidade bastante limitada em termos de navegação, em meia hora poderá limpar o lixo na cozinha ou em uma pequena sala. As vantagens do robô é que todos os componentes podem ser facilmente encontrados e não são muito caros. Sem dúvida caseiro Você pode refinar adicionando novos sensores e outros elementos.