quarta-feira, 30 de maio de 2018

Motor de vidro elétrico como servo motor - arduino - autothrottle 737

Teste de ponte H usando PWM para controlar a velocidade de um motor de vidro  elétrico de janela de automóvel.

12/09/2018

Código Arduino


int IN1 = 2; //H bridge IN1 pin
int IN2 = 4; //H bridge IN2 pin
int motor=3; // PWM H Bridge
int leitura_sensor=0; //
const byte SENSOR=A0;// Posiçao do postenciometro(Manete) - potenciometro 50K porta A0
const byte COMANDO=A1;//dados que virao do simulador, indicando a posicao da manete
int val;
String v1; // recebe os dados da posição da manete
int v1i; // variavel inteira que receberá o valor de V1
int CodeIn;// used on all serial reads

void setup() 
{
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(3, OUTPUT);
 Serial.begin(115200);   
}

void loop() {  
    if (Serial.available()) {
    CodeIn = getChar();
      if (CodeIn == '<') {LESSTHAN();} //verifica se o caracter vindo vindo da serial é <
  }

leitura_sensor=analogRead(SENSOR); //le a posicao do servo
val=leitura_sensor;
  val = map(val, 0, 1024, 0, 100); // cria uma escala compativel com o potenciometro e a posicao da manete
  Serial.println(val); // somente para testes
  Serial.flush(); // limpa a serial
  delay(10);

if(val < v1i -2) { // -2 para criar uma zona de tolerancia
  digitalWrite(IN1,HIGH); // 
  digitalWrite(IN2,LOW);
  analogWrite(3,80); // pulso PWM na porta digial 3, com velocidade de 80. e a minima possivel para o motor
  }
if( val > v1i +2){
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  analogWrite(3,80);
  } 

if (val +2 == v1i || val -2 ==v1i ){
digitalWrite(IN1,LOW); //motor parado
digitalWrite(IN2,LOW);
}}
void LESSTHAN(){    // The first identifier was "<"
CodeIn = getChar(); // Get another character
  switch(CodeIn) {// Now lets find what to do with it
    case 'V'://Found the second identifier "v1"
      v1 = "";
      v1 += getChar();
      v1 += getChar();
      v1 += getChar();
      v1 += getChar();
      v1i = v1.toInt();      
      Serial.flush();
      break;          
     }
}

char getChar()// Get a character from the serial buffer
{
  while(Serial.available() == 0);// wait for data
  return((char)Serial.read());// Thanks Doug
}



Ligando a Ponte H

sexta-feira, 26 de junho de 2015

segunda-feira, 4 de agosto de 2014

ARDUINO +PROTEUS + SERIAL VIRTUAL + COMUNICAÇÃO COM O PC.

Para quem precisa emular o Arduíno no Proteus e ainda conecta-lo via serial virtual com o PC, segue dicas abaixo.
A vantagem de tudo isso é desenvolver projetos via serial sem ter o hardware do Arduíno, apenas virtualmente.
Checklist:
-(X) Proteus.
-(X) Biblioteca do Arduíno para o Proteus.
-(X) Serial Virtual.
-(X) Programador do Arduino.

Dentro do Proteus, adicionar o componente ARDUINO e COMPIN.
Ligar os seguintes pinos:
No Arduíno ligar o pino 0 no pino RXD do conector COMPIN.
Ligar também o pino 1 do Arduíno no pino TXD do conector COMPIN.


Esse é o procedimento básico.
Você pode alterar a velocidade de comunicação da porta serial clicando nas propriedades do conector COMPIN.
Lembre-se que a velocidade (Baud Rate) do conector COMPIN deve ser a mesma da Porta Serial Virtual. Bem com o endereço da porta, algo como COM2.


Porta Serial Virtual.
Utilizando o programa Virtual Serial Ports Emulator VSPE, vamos criar uma porta virtual clicando em Create New Device, conforme figura abaixo.



Clicar em Avançar para seleciona o endereço da porta, no exemplo COM2.
OBS.: Escolha uma porta que não exista fisicamente no computador.


A porta deve estar criada porém não ativada.


Clicar em START para ativar a porta, o STATUS vai para READY.
Pronto agora você tem uma porta Serial Virtual para conversar com o Arduíno dentro do Proteus. Tudo o que você enviar para a porta serial COM2 vai parar no Arduíno.
Não esqueça de deixar os parâmetros iguais no Proteus nas propriedades do conector COMPIN. Velocidade iguais, etc.

FIM











ARDUINO + SERVO MOTOR

Para quem deseja testar o servo-motor no arduíno, segue um tutorial simples.
Você vai precisar de:
- Placa Arduíno. Neste exemplo vou utilizar o Arduíno Uno.
- Servo motor.
- Fonte de alimentação para a placa Arduíno. Pode ser de 9 a 12 v DC.
Obs.: Se você ligar apenas o cabo USB na placa Arduíno, o servo-motor não funcionará direito. Use uma fonte de alimentação para a placa.

Abaixo o esquema de ligação do Arduíno com o servo-motor.
Ligue os dois fios de alimentação 5V e GND na própria placa do Arduíno, e o  fio de controle no pino 9 da placa.



Abra o programa do Arduíno e carregue o seguinte programa.
Este programa está incluído nos Programa Exemplos que já vem instalado com o programador do Arduíno.
Programe o Arduíno e pronto, o servo motor deverá movimentar-se de um lado para outro.


/* Sweep
 by BARRAGAN <http://barraganstudio.com> 
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://arduino.cc/en/Tutorial/Sweep
*/ 

#include <Servo.h> 

Servo myservo;  // create servo object to control a servo 
                // twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position 

void setup() 

  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 


void loop() 

  for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(55);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=0; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 



----------------------------------------
Para que você consiga ter o Arduíno dentro do Proteus, é necessário a biblioteca do Arduíno, que são os arquivos acima citados. Esses dois arquivos precisam estar na pasta LIBRARY do Proteus. Instalar o Proteus 7.9, adicionar os dois arquivos ARDUINO.IDX e ARDUINO.LIB na pasta LIBRARY do Proteus para carregar o Arduíno UNO no Proteus.
Se tudo funcionar, dentro do Proteus basta você procurar o componente como ARDUINO.

Instalar a porta serial virtual.
FSX
Instalar o programa do Arduíno.
Programar o Arduíno com o arquivo de controle.
Inserir o programa .HEX no proteus para programar o Arduino.


DICA.
- Para você programar o Arduíno dentro do Proteus, será necessário utilizar o arquivo com extensão .HEX que o programa do Arduíno vai gerar. Acontece que o programa vai colocar o arquivo numa pasta temporária e depois enviar para a placa REAL do Arduíno. Como neste caso não temos a placa fisicamente ligada no computador, precisamos saber qual arquivo .HEX temporário que o programa gerou. Por padrão o compilador do Arduíno não mostra isso. Mas há um jeito.
No programa do Arduíno vá em ARQUIVO/PREFERENCIAS e habilite a opção EXIBIR MODE VERBOSO DURANTE: [X] COMPILAÇÂO [X] CARREGAR. 
Agora toda vez que o programa compilar novamente, aparecerá na janela preta da parte de baixo do programa, os caminhos dos arquivos. Você deve procurar no final todo o caminho do arquivo .HEX que ele criou. É este programa que o Proteus precisa para inserir no Arduíno dele.

 Selecione o arquivo, use CTRL+C, vá ao Proteus, clique com o botão direto no Arduino em EDIT PROPERTS.


Na opção PROGRAM FILE, apague toda a linha e use CRTL+V para colar o caminho do arquivo que você acabou de compilar. Faça isso toda vez que compilar novamente.
FIM




sexta-feira, 1 de agosto de 2014

Ligando a ponte H L298




ESPECIFICAÇÕES PONTE H L298N:

- Tensão de Operação: 4~35v
- Chip: ST L298N (datasheet)
- Controle de 2 motores DC ou 1 motor de passo
- Corrente de Operação máxima: 2A por canal ou 4A max
- Tensão lógica: 5v
- Corrente lógica: 0~36mA
- Limites de Temperatura: -20 a +135°C
- Potência Máxima: 25W
- Dimensões: 43 x 43 x 27mm
- Peso: 30g
Output A e B: referem-se a conexão do Motor 1 e 2.
* +5v: Este módulo possui integrado um regulador de tensão 5v que quando o drive opera entre 7-35v este regulador pode ser acionado pelo jumper “5v enable”. Logo não alimente este pino com +5v mas deixe para uso externo se operando nestas condições.
* Input: Este tem 4 entradas e são elas:
> In 1: Este é um sinal PWM do controlador, ele diz quão rápido o motor 1 deve funcionar. No exemplo abaixo este valor pode ser entre 0 e 255, sendo 0 parado e 255 velocidade máxima.
> In 2: Simples sinal digital que informa o sentido da rotação do motor 1, sendo que 0 significa reverso e 1 frente.
> In 3: PWM para a velocidade do motor 2.
> In 4: Sinal digital para direção do motor 2.


(Motor A) e (Motor B): referem-se a conexão com os 2 motores DC ou 1 motor de passo, no nosso caso será usado apenas 1 motor como exemplo.
(Ativa MA) e (Ativa MB): São os pinos responsáveis pelo controle PWM dos motores A e B. Se estiver com jumper, não haverá controle de velocidade pois estarão setados em 5v e por default sempre ligados. Estes pinos são conectados a saída PWM do Arduino para controle da velocidade.
(Ativa 5v) e (5v): Este Driver Ponte H L298N possui um regulador de tensão integrado. Quando o driver está operando entre 6-35V, este regulador disponibiliza uma saída regulada de +5v no pino (5v) para um uso externo (com jumper), podendo alimentar por exemplo outro componente eletrônico. Portanto não alimente este pino (5v) com +5v do Arduino se estiver controlando um motor de 6-35v e jumper conectado, isto danificará a placa. O pino (5v) somente se tornará uma entrada caso esteja controlando um motor de 4-5,5v (sem jumper), assim poderá usar a saída +5v do Arduino.
- (6-35v) e (GND): Aqui será conectado a fonte de alimentação externa quando o driver estiver controlando um motor que opere entre 6-35v. Por exemplo se estiver usando um motor DC 12v, basta conectar a fonte externa de 12v neste pino e (GND).
- (Entrada): Este barramento é composto por IN1, IN2, IN3 e IN4. Sendo estes pinos responsáveis pela rotação do Motor A (IN1 e IN2) e Motor B (IN3 e IN4).

PROGRAMANDO ARDUINO COM PONTE H L298N:

Abaixo temos um código simples para demonstrar como este Driver Ponte H L298N é utilizado com um Arduino Uno. Iremos controlar apenas um Motor DC 12v 80RPM, ou seja, o ‘Motor A’.
Conecte uma Fonte DC 12v aos pinos (6-35v) e (GND). Deixe o jumper (Ativa 5v) habilitado e não conecte nenhuma fonte de alimentação ao pino (5v). Desconecte o jumper (Ativa MA) e conecte ao pino 9 do Arduino Uno. Os pinos IN1 e IN2 devem ser ligados ao pinos 2 e 3 do Arduino. O pino GND do Arduino deve estar conectado ao pino (GND) do driver.
Ao final conecte o Motor DC 12v a saída (Motor A).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//Motor A
int IN1 = 2; //pino 2 do Arduino
int IN2 = 3; //pino 3 do Arduino
int speedMA = 9; //pino 9 do Arduino
//Velocidade do Motor
int speed = 100; //Este valor pode variar de 0-255
void setup(){
 pinMode(IN1, OUTPUT);
 pinMode(IN2, OUTPUT);
}
void loop(){
 analogWrite(speedMA, speed);
 digitalWrite(IN1, LOW);
 digitalWrite(IN2, HIGH);
 delay(2000);
 digitalWrite(IN1, HIGH);
 digitalWrite(IN2, HIGH);
 delay(2000);
 digitalWrite(IN1, HIGH);
 digitalWrite(IN2, LOW);
 delay(2000);
}
Se você rodar este código o motor irá girar em uma direção por 2 segundos, irá parar por 2 segundos, girar na direção contrária por mais 2 segundos e repetir tudo de novo.

* Material retirado do site FILIPEFLOP.