Servo Controle usando Ondas Cerebrais (Parte 12/13)

Servo Controle usando Ondas Cerebrais (Parte 12/13)

Servocontrole usando ondas cerebrais

RESUMO

Depois de aplicar ondas cerebrais aos LEDs RGB, agora é hora de verificar as extensões em algumas aplicações mais em tempo real e determinar a eficiência e a flexibilidade que podem ser alcançadas usando este módulo. Agora estou planejando usá-lo em algum campo robótico.
Neste artigo, pretendo usar o Brain Wave para algumas aplicações de saúde junto com a robótica. Ao estudar sobre braços robóticos, descobri que eles são controlados por servo motor. E se pudermos controlar o servo motor usando nosso Brainwave? Eu não tinha certeza sobre isso, pois os resultados do Brainwave costumam ser aleatórios e queria verificar se podemos controlar o ângulo com nossos pensamentos. Então, para verificar a precisão, tentei.
Imagem mostrando um usuário usando o Brainwave para controlar o servo motor
Fig. 1: Imagem mostrando um usuário usando ondas cerebrais para controlar o servo motor
DESCRIÇÃO
Para controlar qualquer braço robótico, precisamos controlar o servo motor. O mecanismo de braço robótico é que existe um servo motor fixo na borda do braço. O movimento dos braços robóticos depende totalmente do ângulo do Servo motor. Você pode ler mais sobre Servo motor (aqui) para saber como funciona. Resumindo, o servo motor I é usado basicamente onde precisamos de um ângulo preciso. Assim, para controlar o ângulo do servo, é produzida uma onda PWM. A onda PWM decide o ângulo do servo motor pela variação do Duty Cycle, de forma muito semelhante à que fizemos no controle de velocidade do motor. Aqui, estamos controlando o ângulo do motor. O motor pode girar 180 graus dependendo do ciclo de trabalho. Usaremos a onda alfa novamente, pois ela pode ser usada para ver resultados em tempo real com base em nossos pensamentos. Portanto, vamos transformar os valores das ondas alfa e restringi-los para ficarem entre 0,255, o que se transformará em um ângulo de 0 a 180. Encontre o Diagrama de Blocos anexado abaixo.
Diagrama de blocos do servo controlado por ondas cerebrais baseado em Arduino e sensor Mindflex
Fig. 2: Diagrama de blocos do Arduino e servo controlado por ondas cerebrais baseado em sensor Mindflex
Hardware: Por favor, encontre o diagrama de circuito em anexo das conexões que devem ser feitas. Pegamos um pino do pino T do sensor mindflex e conectamos esse pino ao pino Rx do nosso Arduino UNO. Além disso, fizemos um curto-circuito no aterramento do sensor e do UNO por um fio. Por favor, tome cuidado especial ao soldar qualquer coisa no sensor Mindflex, pois os pinos são muito próximos um do outro. Para conexões de servo, conectamos o servo VCC e GND aos 3,3 V e GND do arduino. Conectamos o 9º pino do Arduino ao servo para controle de ângulo.
Programas: Vamos para a parte do software. Temos recebido os valores do sensor para o nosso arduino via pino T. Depois de recebermos o valor em qualquer ponto específico, só precisamos converter esse nível de valor para o ângulo do servo.
Estamos usando a biblioteca servo embutida do Arduino aqui para controlar o servo motor.
Aqui está uma pequena seção do código.
Serial.print(“alfa = “);
Serial.println(num1);
saída = mapa(num1,0,999999,0,180);
meuservo.write(saída);
Primeiro, extraímos os valores alfa da string e os armazenamos em uma variável chamada num1. Depois disso, apenas mapeamos os valores alfa no intervalo de 0 a 180 usando a função map do arduino.
E então enviamos os valores armazenados na variável “output” aqui para o servo usando myservo.write , uma função embutida do arduino.
Alguns pontos a serem observados:
O sensor costuma fornecer resistência de 60 a 80% devido à sua orientação e ao local onde o localizamos. Tente manter o sensor de metal exatamente acima do olho esquerdo. Também apliquei água salgada na testa para melhor conectividade com o sensor. Se você não encontrar 100%, então é normal.
A intensidade do sinal também atrapalha a forma como soldamos o fio ao pino T. Tente blindar este fio e também certifique-se de que as pontas de prova de referência estejam conectadas corretamente. Se você tiver algum fio conectado ao pino EEG do sensor, desconecte esse fio, pois isso criará muito ruído nos valores do sensor.
Experimente este experimento e fique ligado na série de ondas cerebrais. Na próxima parte, lidaremos com o experimento em hiper terminal.

Código-fonte do projeto

//Program to 


// Arduino Brain Library - Brain Serial Test
 
// Description: Grabs brain data from the serial RX pin and sends CSV out over the TX pin (Half duplex.)
// More info: 
// Author: Eric Mika, 2010 revised in 2014
 
#include 
#include  
 
// Set up the brain parser, pass it the hardware serial object you want to listen on.
Brain brain(Serial);
Servo myservo;  // create servo object to control a servo 
//char a(400);
String a,a1;
int v = 0;
int z=0,output;
uint32_t num=0;
uint32_t num1=0;
void setup  {
    // Start the hardware serial.
    Serial.begin(9600);
    myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
     pinMode(12, OUTPUT);
     pinMode(11, OUTPUT);
}
 
void loop  {
    // Expect packets about once per second.
    // The .readCSV  function returns a string (well, char*) listing the most recent brain data, in the following format:
    // "signal strength, attention, meditation, delta, theta, low alpha, high alpha, low beta, high beta, low gamma, high gamma"    
    if (brain.update ) {
      //  Serial.println(brain.readErrors );
      //  Serial.println(brain.readCSV );
        //sprintf(a, "%c",brain.readCSV );
        a = brain.readCSV ;
        v = a.indexOf(',');
        v = a.indexOf(',',v+1);
        v = a.indexOf(',',v+1);
        v = a.indexOf(',',v+1);
        z = a.indexOf(',',v+1);
        
        a1 = a.substring(v+1,z);
        num = a1.toInt ;
         
        v = a.indexOf(',',z+1);
       
         
        a = a.substring(z+1,v);
         
        num1 = a.toInt ;
        Serial.print("alpha = ");
        Serial.println(num1);
         
        output = map(num,0,999999,0,180);
         
       
       myservo.write(output);              // tell servo to go to position in variable 'pos' 
       delay(15); 
       
       // analogWrite(12,output)
        
        //brain.readCSV .toCharArray(a,200);
    }
}
 

Diagramas de circuito

servo

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.