Projetos de circuito eletrônicoCircuitos CI 555Controle de servo motor sem fio usando link de comunicação de...

Controle de servo motor sem fio usando link de comunicação de 2,4 GHz

Relacionados

Neste post vamos construir um circuito de servo motor sem fio que pode controlar 6 servo motores sem fio em um link de comunicação de 2,4 GHz.

Introdução

O projeto é dividido em duas partes: um transmissor com 6 potenciômetros e um circuito receptor com 6 servo motores.

O controle remoto tem 6 potenciômetros para controlar 6 servo motores individuais independentemente no receptor. Girando o potenciômetro, o ângulo do servo motor pode ser controlado.

O circuito proposto pode ser usado onde você precisa de movimento controlado, por exemplo, braço de um robô ou controle de direção da roda dianteira de um carro RC.

O coração do circuito é o módulo NRF24L01 que é um transceptor; funciona na banda ISM (banda Industrial, Científica e Médica) é a mesma banda de frequência que o seu WI-FI funciona.

Ilustração dos Módulos NRF24L01:

IMG 6244ACF18BD3A

Possui 125 canais, taxa de dados máxima de 2 MBps e alcance máximo teórico de 100 metros. Você precisará de dois desses módulos para estabelecer um link de comunicação.

Configuração do pino:

IMG 6244ACF24C9A2

Funciona no protocolo de comunicação SPI. Você precisa conectar 7 dos 8 pinos ao Arduino para fazer este módulo funcionar.

Funciona em 3,3 V e 5 V mata o módulo, portanto, deve-se ter cuidado ao ligar. Felizmente, temos um regulador de tensão de 3,3V no Arduino e ele deve ser alimentado apenas pela tomada de 3,3V do Arduino.

Agora vamos passar para o circuito do Transmissor.

Circuito do transmissor:

IMG 6244ACF288BB8

O circuito consiste em 6 potenciômetros de valor de 10K ohms. O terminal do meio de 6 potenciômetros é conectado aos pinos de entrada analógica A0 a A5.

A tabulação é fornecida ao lado do esquema para conexão NRF24L01 ao Arduino; você pode consultar, se tiver alguma confusão no diagrama de circuito.

Este circuito pode ser alimentado por USB ou bateria de 9V via conector DC.

Faça o download do arquivo da biblioteca aqui: github.com/nRF24/

Programa para Transmissor:

//----------------------Program Developed by R.Girish------------------------//
#include
#include
#include
RF24 radio(9,10);
const byte address[6] = "00001";
#define pot1 A0
#define pot2 A1
#define pot3 A2
#define pot4 A3
#define pot5 A4
#define pot6 A5
const int threshold = 20;
int potValue1 = 0;
int potValue2 = 0;
int potValue3 = 0;
int potValue4 = 0;
int potValue5 = 0;
int potValue6 = 0;
int angleValue1 = 0;
int angleValue2 = 0;
int angleValue3 = 0;
int angleValue4 = 0;
int angleValue5 = 0;
int angleValue6 = 0;
int check1 = 0;
int check2 = 0;
int check3 = 0;
int check4 = 0;
int check5 = 0;
int check6 = 0;
const char var1[32] = "Servo1";
const char var2[32] = "Servo2";
const char var3[32] = "Servo3";
const char var4[32] = "Servo4";
const char var5[32] = "Servo5";
const char var6[32] = "Servo6";
void setup()
{
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(address);
radio.setChannel(100);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.stopListening();
}
void loop()
{
potValue1 = analogRead(pot1);
if(potValue1 > check1 + threshold || potValue1 < check1 - threshold)
{
radio.write(&var1, sizeof(var1));
angleValue1 = map(potValue1, 0, 1023, 0, 180);
radio.write(&angleValue1, sizeof(angleValue1));
check1 = potValue1;
Serial.println("INPUT:1");
Serial.print("Angle:");
Serial.println(angleValue1);
Serial.print("Voltage Level:");
Serial.println(potValue1);
Serial.println("----------------------------------");
}
potValue2 = analogRead(pot2);
if(potValue2 > check2 + threshold || potValue2 < check2 - threshold)
{
radio.write(&var2, sizeof(var2));
angleValue2 = map(potValue2, 0, 1023, 0, 180);
radio.write(&angleValue2, sizeof(angleValue2));
check2 = potValue2;
Serial.println("INPUT:2");
Serial.print("Angle:");
Serial.println(angleValue2);
Serial.print("Voltage Level:");
Serial.println(potValue2);
Serial.println("----------------------------------");
}
potValue3 = analogRead(pot3);
if(potValue3 > check3 + threshold || potValue3 < check3 - threshold)
{
radio.write(&var3, sizeof(var3));
angleValue3 = map(potValue3, 0, 1023, 0, 180);
radio.write(&angleValue3, sizeof(angleValue3));
check3 = potValue3;
Serial.println("INPUT:3");
Serial.print("Angle:");
Serial.println(angleValue3);
Serial.print("Voltage Level:");
Serial.println(potValue3);
Serial.println("----------------------------------");
}
potValue4 = analogRead(pot4);
if(potValue4 > check4 + threshold || potValue4 < check4 - threshold)
{
radio.write(&var4, sizeof(var4));
angleValue4 = map(potValue4, 0, 1023, 0, 180);
radio.write(&angleValue4, sizeof(angleValue4));
check4 = potValue4;
Serial.println("INPUT:4");
Serial.print("Angle:");
Serial.println(angleValue4);
Serial.print("Voltage Level:");
Serial.println(potValue4);
Serial.println("----------------------------------");
}
potValue5 = analogRead(pot5);
if(potValue5 > check5 + threshold || potValue5 < check5 - threshold)
{
radio.write(&var5, sizeof(var5));
angleValue5 = map(potValue5, 0, 1023, 0, 180);
radio.write(&angleValue5, sizeof(angleValue5));
check5 = potValue5;
Serial.println("INPUT:5");
Serial.print("Angle:");
Serial.println(angleValue5);
Serial.print("Voltage Level:");
Serial.println(potValue5);
Serial.println("----------------------------------");
}
potValue6 = analogRead(pot6);
if(potValue6 > check6 + threshold || potValue6 < check6 - threshold)
{
radio.write(&var6, sizeof(var6));
angleValue6 = map(potValue6, 0, 1023, 0, 180);
radio.write(&angleValue6, sizeof(angleValue6));
check6 = potValue6;
Serial.println("INPUT:6");
Serial.print("Angle:");
Serial.println(angleValue6);
Serial.print("Voltage Level:");
Serial.println(potValue6);
Serial.println("----------------------------------");
}
}
//----------------------Program Developed by R.Girish------------------------//

Isso conclui o transmissor.

O receptor:

IMG 6244ACF2C0109

O circuito receptor consiste em 6 servo motores, um Arduino e duas fontes de alimentação separadas.

Os servomotores precisam de corrente mais alta para operar, portanto, não devem ser alimentados pelo arduino. É por isso que precisamos de duas fontes de energia separadas.

Por favor, aplique tensão ao servo apropriadamente; para micro servo motores 4,8 V é suficiente, se você quiser alimentar servo motores mais volumosos, aplique a tensão correspondente à classificação do servo.

Lembre-se que o servo motor consome alguma energia mesmo quando não há momento, isso porque o braço do servo motor sempre luta contra qualquer mudança de sua posição comentada.

Programa para Receptor:

//----------------------Program Developed by R.Girish------------------------//
#include
#include
#include
#include
RF24 radio(9,10);
const byte address[6] = "00001";
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
int angle1 = 0;
int angle2 = 0;
int angle3 = 0;
int angle4 = 0;
int angle5 = 0;
int angle6 = 0;
char input[32] = "";
const char var1[32] = "Servo1";
const char var2[32] = "Servo2";
const char var3[32] = "Servo3";
const char var4[32] = "Servo4";
const char var5[32] = "Servo5";
const char var6[32] = "Servo6";
void setup()
{
Serial.begin(9600);
servo1.attach(2);
servo2.attach(3);
servo3.attach(4);
servo4.attach(5);
servo5.attach(6);
servo6.attach(7);
radio.begin();
radio.openReadingPipe(0, address);
radio.setChannel(100);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.startListening();
}
void loop()
{
delay(5);
while(!radio.available());
radio.read(&input, sizeof(input));
if((strcmp(input,var1) == 0))
{
while(!radio.available());
radio.read(&angle1, sizeof(angle1));
servo1.write(angle1);
Serial.println(input);
Serial.print("Angle:");
Serial.println(angle1);
Serial.println("--------------------------------");
}
else if((strcmp(input,var2) == 0))
{
while(!radio.available());
radio.read(&angle2, sizeof(angle2));
servo2.write(angle2);
Serial.println(input);
Serial.print("Angle:");
Serial.println(angle2);
Serial.println("--------------------------------");
}
else if((strcmp(input,var3) == 0))
{
while(!radio.available());
radio.read(&angle3, sizeof(angle3));
servo3.write(angle3);
Serial.println(input);
Serial.print("Angle:");
Serial.println(angle3);
Serial.println("--------------------------------");
}
else if((strcmp(input,var4) == 0))
{
while(!radio.available());
radio.read(&angle4, sizeof(angle4));
servo4.write(angle4);
Serial.println(input);
Serial.print("Angle:");
Serial.println(angle4);
Serial.println("--------------------------------");
}
else if((strcmp(input,var5) == 0))
{
while(!radio.available());
radio.read(&angle5, sizeof(angle5));
servo5.write(angle5);
Serial.println(input);
Serial.print("Angle:");
Serial.println(angle5);
Serial.println("--------------------------------");
}
else if((strcmp(input,var6) == 0))
{
while(!radio.available());
radio.read(&angle6, sizeof(angle6));
servo6.write(angle6);
Serial.println(input);
Serial.print("Angle:");
Serial.println(angle6);
Serial.println("--------------------------------");
}
}
//----------------------Program Developed by R.Girish------------------------//

Isso conclui o receptor.

Como operar este projeto:

• Alimente ambos os circuitos.
• Agora gire qualquer um dos botões do potenciômetro.
• Por exemplo, 3º potenciômetro, o servo correspondente no receptor gira.
• Isso se aplica a todos os servomotores e potenciômetros.

Nota: Você pode conectar o transmissor ao computador e abrir o monitor serial para ver os dados como o ângulo do servo motor, nível de tensão no pino analógico e qual potenciômetro está sendo operado no momento.

Se você tiver alguma dúvida específica sobre este projeto de servo motor sem fio baseado em Arduino, por favor, expresse na seção de comentários que você pode receber uma resposta rápida.

Hashtags: #Controle #servo #motor #sem #fio #usando #link #comunicação #GHz
 

FONTE


Nota: Este conteúdo foi traduzido do Inglês para português (auto)
Pode conter erros de tradução

Olá, se tiver algum erro de tradução (AUTO), falta de link para download etc…
Veja na FONTE até ser revisado o conteúdo.
Status (Ok Até agora)


Se tiver algum erro coloque nos comentários

Mas se gostou compartilhe!!!

Relacionados

Relacionados