domingo, 21 de maio de 2017


Uso do controlador


Controlador de motor de passo A4988
Diagrama mínimo de conexões para o modo de passo cheio.

Conexões de alimentação

O controlador necessita de uma alimentação lógica (3 a 5,5V) conectada nos pinos VDD e GND, e uma alimentação para o motor (8 a 35V) conectada aos pinos VMOT e GND. Estas alimentações devem ter capacitores de desacoplamento próximos à placa e que devem ser capazes de fornecer as correntes esperadas (picos de até 4A para a alimentação do motor).
Nota: Esta placa utiliza capacitores cerâmicos de baixa ESR sucetíveis a destruição por picos de tensão LC, especialmente quando utilizando cabos de alimentação maiores do que alguns centímetros. Sob certas condições estes picos podem exceder a voltagem máxima de 35V permitida para o A4988, causando danos permanentes, mesmo com voltagens de alimentação tão baixas quanto 12V. Um modo de proteger o controlador contra estes picos é colocar um capacitor eletrolítico grande (> 50 µF) entre os pinos VMOT e GND tão próximo à placa quanto possível.

Conexões do motor

Motores de passo com 4, 6 e 8 cabos podem ser controlados pelo A4988 se estiverem conectados corretamente. Veja as perguntas frequêntes na página do fabricante para maiores detalhes.
Nota: Conectar ou desconectar um motor de passo enquanto o controlador está alimentado pode destruir o controlador.

Tamanho do passo (e do micropasso)

Motores de passo normalmente têm um tamnaho de passo específico (e.g. 1,8º ou 200 passo por revolução), que se aplicam a passos cheios. Um controlador de micropassos como o A4988 permite resoluções maiores através alocações em passos intermediários, o que é alcançado energizando as bobinas com níveis intermediários de corrente. Por exemplo, controlando um motor em modo de um quarto de passo fará com que um motor de 200 passos por revolução tenha 800 micropassos por revolução utilizando 4 níveis deiferentes de corrente..
Os seletores de entrada de resolução (tamanho do passo) MS1,MS2 e MS3 permitem selecionar entre os cinco niveis possíveis de acordo com a tabela abaixo. MS1 e MS3 têm resistências de rebaixamento de 100kΩ e o MS2 de 50kΩ. Desse modo, deixando estes pinos desconectados habiltará o funcionamento em modo de passo cheio. Para que os modos de micropasso funcionem corretamente o limite de corrente deve ser rebaixado de modo que os limitadores de corrente sejam habilitados. Caso contrário níveis intermediários de corrente não serão mantidos corretamente e motor funcionará efetivamente em modo de passo cheio.
MS1 MS2 MS3 Resolução de micropasso
Low Low Low passo cheio
High Low Low meio passo
Low High Low um quarto de passo
High High Low um oitavo de passo
High High High um dezesseisavos de passo

Entradas de controle

Cada pulso na entrada STEP corresponde a um micropasso do motor na direção selecionada pelo pino DIR. Note que os pinos STEP e DIR não são direcionados internamente para nenhuma voltagem e você não deve deixar que flutuem em sua aplicação. Se você deseja apenas um sentido de rotação você pode conectar DIR a VCC ou a GND diretamente. O chip tem três diferentes entradas de controle para seus principais estados de alimentação: RST, SLP, e EN. Para detalhes sobre estes status veja o datasheet. Note que o pino RST é flutuante, caso não necessite utilizá-lo você pode conactá-lo ao pino adjacente SLP no PCB.

Limitação de corrente

Para alcançar velocidades de passos mais altas a alimentação do motor é tipicamente muito mais alta do que o que seria permitido sem limitação ativa de corrente. Por exemplo, um motor de passo típico poderia estar classificado para correntes de 1A com uma resistência de bobina de 5Ω, o que indicaria uma alimentação máxima de 5V. Utilizar um motor destes com 12V permitiria maiores velocidades de passo, mas a corrente deve ser ativamente limitada para menos de 1A para prevenir danos.
O A4988 suporta esta esta limitação de corrente, e o potenciômetro de ajuste na placa pode ser utiizado para determinar o limite de corrente. Um dos modos de ajustar este limite de corrente é colocar o controlador a toda velocidade em modo de passo cheio e medir a corrente através de uma das bobinas sem ajustar a entrada de STEP. Como as duas bobinas estão sempre limitadas em 70% em modo de passo cheio, a corrente medida será 0,7 vezes o limite de corrente deste motor. Note que o limite de corrente depende da voltagem em VDD.
Outro modo de ajustar o limite é medir a voltagem no pino "ref" e calcular o limite de corrente resultante (os resistores de senso de corrente são de 0,05Ω). A voltagem no pino ref pode ser acessada em uma via marcada com um círculo na parte posterior do circuíto.

Considerações sobre dissipação de potência

O CI A4988 tem uma taxa máxima de corrente de 2A por bobina, mas a corrente real que você pode fornecer ao motor depende da capacidade de manter o chip refrigerado. A placa do circuíto impresso foi desenvolvida para drenar calor do chip mas para fornecer mais do que 1A por bobina um dissipador de calor ou outro método de refrigeração é necessário.
Este produto pode se aquecer o suficiente para produzir queimaduras antes que o chip se superaqueça. Tome cuidado quando estiver manusenado este item e outros componentes ligados a ele.
Note que medir a corrente drenada na alimentação não necessariamente fornece uma medida da corrente na bobina. Como a voltagem de entrada do controlador pode ser significativamente mais elevada (o controlador e a bobina atuam como um rebaixador da alimentação). Além disso, se a voltagem de alimentação for muito alta comparada àquela necessária para o motor o duty cycle será muito lento, o que também acarreta em diferenças significativas entre as correntes médias e RMS.

Esquema


Controlador de motor de passo A4988
 Controle de motor DC com N555 ou L555

Esse circuito é um simples controlador de motor DC usando um circuito integrado  NE555. Esse controle de velocidade de motor DC utiliza um temporizador 555 que  controlar a aceleração do motor e uma chave  muda seu sentido de rotação. Um circuito eletrônico PWM com base no temporizador NE555 é o coração deste projeto de fácil construção e baixo custo.
Controle de Motor DC com PWM


Controle de Motor DC com PWM – Via
O 555 é ligado como um multivibrador astável, cujo ciclo de trabalho pode ser ajustado através da variação de R1 que é um Potenciômetro ou trimpot. A saída de IC1 (555) é acoplado à base do transístor Q1 (BD139) , que aciona o motor de acordo com o sinal de PWM disponível na sua base.

Controle de Motor DC com PWM


A mudança de direção do motor DC é feita usando a chave S1 DPDT que na aplicação apenas alterna a polaridade aplicada ao motor e com isso fazendo a inversão de sentido da rotação. Esse método de inversão de rotação pode não funcionar em alguns motores.
A alimentação é feita em 12Volts DC, Vm é a fonte de alimentação separada para o motor e seu valor depende da tensão nominal do motor. O VCEO máximo  do BD139 é de 80Volts e assim Vm não deve ser superior a 80 Volts. Já o coletor do BD139 pode trabalhar com correntes de até 1.5 Ampere, com isso você não deve usar um motor que consuma mais de 1,5 amperes de corrente.
Para valores superiores de tensão e corrente você deve usar outro transistor, mas todo cuidado deve ser tomado, pois um transistor em curto pode causar danos em todo o circuito. Um dissipador de calor é necessário para o BD139, quanto mais corrente no motor, mais dissipação ele necessita.

sexta-feira, 19 de Maio de 2017

  Print dos dados sensor DHT11 no LCD

Componentes necessários:

- Protobord
- Potenciômetro
- LCD 12 x 2
- Sensor de umidade e temperatura DHT11
- Fios
 //Projeto 11 - Print dos dados sensor DHT11 no LCD  
 //Este código é de domínio público  
   
 #include <LiquidCrystal.h> //Inclui a biblioteca do LCD  
 #include <dht.h>  
 #define dht_dpin A1 //Pino DATA do Sensor ligado na porta Analogica A1  
   
 dht DHT; //Inicializa o sensor   
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura os pinos do Arduino para se comunicar com o LCD  
   
 void setup(){  
  lcd.begin(16, 2);        //Inicia o LCD com dimensões 16x2(Colunas x Linhas)  
  lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD  
  lcd.print("Umidade");  
  lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD  
  lcd.print("Temperatura");  
 }  
    
 void loop(){  
  DHT.read11(dht_dpin); //Lê as informações do sensor  
    
  lcd.setCursor(12, 0); //Posiciona o cursor na décima quarta coluna(13) e na primeira linha(1) do LCD  
  lcd.print(DHT.humidity); //Escreve o valor atual da variável de contagem no LCD  
    
  lcd.setCursor(12, 1); //Posiciona o cursor na décima quarta coluna(13) e na segunda linha(1) do LCD  
  lcd.print(DHT.temperature); //Escreve o valor atual da variável de contagem no LCD   
  delay(2000);  
 }  

sexta-feira, 19 de MAIO de 2017

Sensor ultrasônico e LCD

Componentes necessários:

- Protobord
- Potenciômetro
- LCD 12 x 2
- Sensor Ultrasônico HC-SR04
- Fios

 //Projeto 13 - Sensor ultrasônico e LCD  
 //Este código é de domínio público  
   
 #include <LiquidCrystal.h> //Inclui a biblioteca do LCD  
 #include "Ultrasonic.h"  
   
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura os pinos do Arduino para se comunicar com o LCD  
   
 int trig = 9;  
 int echo = 8;  
 Ultrasonic ultrasonic(trig,echo);  
   
 void setup() {  
  lcd.begin(16, 2);        //Inicia o LCD com dimensões 16x2(Colunas x Linhas)  
  lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD  
  lcd.print("Distancia");  
  lcd.setCursor(14,0);  
  lcd.print("CM");  
 }  
   
 void loop(){  
  lcd.begin(16, 2);        //Inicia o LCD com dimensões 16x2(Colunas x Linhas)  
  lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD  
  lcd.print("Distancia");  
  lcd.setCursor(14,0);  
  lcd.print("CM");  
  lcd.setCursor(10, 0); //Posiciona o cursor na décima primeira coluna(13) e na primeira linha(0) do LCD  
  lcd.print(ultrasonic.Ranging(CM));  
  delay(1000);  
  lcd.clear();  
 }  

sábado, 20 de Maio de 2017

  LED IR captando sinal

Componentes necessários:

- Protobord
- Receptor IR
- Fios
 //Projeto 17 - LED IR captando sinal  
 //Este código é de domínio público   
   
 #include <IRremote.h>  
   
 int RECV_PIN = 2;     //Declarando o pino 2 como RECV_PIN  
 IRrecv irrecv(RECV_PIN);  //  
 decode_results results;  
   
 void setup(){  
  Serial.begin(9600);  
  irrecv.enableIRIn();   // Inicializa o receptor  
 }  
   
 void loop() {  
  if (irrecv.decode(&results)) { //Se algum valor for lido, será imprimido  
   Serial.println(results.value, BIN); //Pode trocar BIN para DEC, HEX...  
   irrecv.resume();    //Limpa da memória o valor lido  
  }  
 }  
   

sexta-feira, 19 de Maio de 2017

  Servo motor com Potenciômetro

Componentes necessários:

- Protobord
- Potenciômetro
- Servo Motor
- Fios
 //Projeto 16 - Servo motor com Potenciômetro  
 //Este código é de domínio público  
   
 #include <Servo.h>   
    
 Servo servo1; //Cria o objeto Servo  
    
 void setup(){   
  servo1.attach(5); //Envia pelo pino 5 os valores dos ângulos  
 }   
    
 void loop(){   
  int angulo = analogRead(0); //lê o valor do potenciômetro  
  angle=map(angle, 0, 1023, 0, 180); //mapeia os valores lidos, convertendo entre 0 e 180 graus  
  servo1.write(angle); // envia o ângulos para o servo  
  delay(15);  
 }   
   

sexta-feira, 19 de Maio de 2017

  LED 7 segmentos com CI 74HC595

Componentes necessários:

- Protobord
LED de 7 segmentos
- CI 74HC595
- 8 resistores 100 ohms*
- Fios
*Verificar o resistor para o led, pois o valor pode ser diferente.
 //Projeto 18 - LED 7 segmentos com CI 74HC595  
 //Este código é de domínio público   
   
 int latchPin = 8; //Pino connectado no Pino 12 do 74HC595 (Latch)   
 int clockPin = 12; //Pino connectado to Pino 11 do 74HC595 (Clock)   
 int dataPin = 11; //Pino connectado no Pino 14 do 74HC595 (Data)   
   
 // Cria uma matriz para os números  
 byte matriz_digits[10][7] = { { 0,0,0,0,0,0,1 }, // = 0  
             { 0,0,1,1,1,1,1 }, // = 1  
             { 1,0,0,0,0,1,0 }, // = 2  
             { 0,0,0,0,1,1,0 }, // = 3  
             { 0,0,1,1,1,0,0 }, // = 4  
             { 0,1,0,0,1,0,0 }, // = 5  
             { 0,1,0,0,0,0,0 }, // = 6  
             { 0,0,0,1,1,1,1 }, // = 7  
             { 0,0,0,0,0,0,0 }, // = 8  
             { 0,0,0,1,1,0,0 }  // = 9  
            };  
   
 void setup() {  
  pinMode(latchPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);  
  pinMode(dataPin, OUTPUT);  
 }  
   
 void loop(){  
  for (byte count = 10; count > 0; --count) {  
   digitalWrite(latchPin, LOW);  
   sevenSegWrite(10 - count);  
   digitalWrite(latchPin, HIGH);  
   delay(2000);  
  }  
 }  
   
 void sevenSegWrite(byte digito) {  
  for (byte coluna = 0; coluna < 8; ++coluna) {  
    digitalWrite(clockPin, LOW);  
    digitalWrite(dataPin, matriz_digits[digito][coluna]);  
    digitalWrite(clockPin, HIGH);  
   }   
   delay(100);  
 }   

sexta-feira, 19 de Maio de 2017

  Módulo RF, ligando LED


Componentes necessários:

- Protobord;
- 2 arduinos;
- Módulo RF, descrito na imagem;
- Fios;
- LED;
Resitor de 100 ohms*;
Conexões

Transmissor:
- GND - GND do arduino
- VCC - 5V do arduino
- DATA - Porta 12 digital, é usada por default na biblioteca

Receptor:
- GND - GND do arduino
- DATA - Porta 11 digital, é usada por default na biblioteca. USAR A SAÍDA A DO LADO GND
- VCC - 5V do arduino
Arduino do receptor:
-Conectar também o LED na porta 2, junto com o resistor.
*Verificar o resistor para o led, pois o valor pode ser diferente.


Toda a ideia para o funcionamento do modulo RF foi retirada desse link:
https://docs.google.com/file/d/0B6YRUlKRU7Q-cVJuWXhTMjZ2NU0/edit

Todo o crédito para a pessoa que o criou, apenas foi colocado no blog para divulgar o funcionamento do mesmo.

Link para download da biblioteca: https://www.dropbox.com/s/chipaarcwh50kbx/VirtualWire.rar?m=

  //Projeto 19 - Módulo RF - emissor   
  //Este código é de domínio público   
   
 #include <VirtualWire.h>  
   
 void setup(){  
   Serial.begin(9600);      //Ativa Serial  
   // Initialise the IO and ISR  
   vw_set_ptt_inverted(true); //   
   vw_setup(2000);      // Taxa de transferência  
 }  
   
 void loop(){  
   if(Serial.available()>0){  
    char msg = Serial.read();  
     
    vw_send((uint8_t *)&msg, strlen(&msg)); //Envia toda a palavra com STR  
    vw_wait_tx(); //   
    delay(200);  
   }  
 }  
 //Projeto 19 - Módulo RF - receptor   
 //Este código é de domínio público   
   
 #include <VirtualWire.h>  
   
 void setup(){  
   Serial.begin(9600); //Ativa o Serial  
    
   vw_set_ptt_inverted(true); //   
   vw_setup(2000);      //Taxa de transferência  
   
   vw_rx_start();    //Inicializa o receptor  
   pinMode(2, OUTPUT); //Inicializa a porta p/ LED  
 }  
   
 void loop(){  
   uint8_t buf[VW_MAX_MESSAGE_LEN];  
   uint8_t buflen = VW_MAX_MESSAGE_LEN;  
   
   if (vw_get_message(buf, &buflen)){ //Verifica se recebe informação  
     if(buf[0]=='L'){  
      digitalWrite(2, HIGH);  
     }  
     if(buf[0]=='D'){  
      digitalWrite(2, LOW);  
     }  
   }  
 }  
Com o que foi descrito nesse post, pode-se construir vários outros projetos utilizando a mesma base. Algumas ideias a seguir:
    - Controlar um carrinho;
    - Ligando uma lâmpada;
    - Transmitindo texto para outro arduino, e ele printando no LCD;
    - Transmitindo dados como: temperatura, umidade, luminosidade, distancia e etc.

sábado, 20 de Maio de 2017

  Servo motor lendo valores do terminal

Componentes necessários:

- Protobord
- Servo Motor
- Fios
Insira valores entre 0 e 180 utilizando 3 caracteres por exemplo:     
Para 0, digite 000                                                                                                                                                 Para 60, digite 060                                                                                                                                                 Para 180, digite 180
Deve ser feito como foi informado a cima pelo motivo de que é passado strings pelo terminal e não números, dessa forma o programa irá converter a string e se não for passado como descrito ocorre erro.
Apesar de estar parecido, houve algumas modificações e terá uma versão nova em breve.


 //Projeto 21 - Servo motor lendo valores do terminal  
 //Este código é de domínio público   
   
 #include <Servo.h>  
   
 Servo servo1; // Cria uma variavel do tipo Servo que será  
 char buffer[4]; // Array de char que irá converter para int  
   
 int received; //Usada para identificar o tamanho str  
   
 void setup(){  
  Serial.begin(9600);  
  servo1.attach(8); // Atribui o servo ao pino 8 do Arduino  
   
  received = 0;  
  buffer[received] = '\0'; //A posição 0 do array recebe '\0'  
 }  
   
 void loop(){  
   
  if(Serial.available()){ //Verifica se algo foi digitado  
   buffer[received++] = Serial.read(); //Salva os dados digitados  
   if(received >= (sizeof(buffer)-1)){  
    int numero = atoi(buffer);// Converte o valor de "char" para "int"  
    servo1.write(numero); // Envia o comando para o Servo Motor  
    received = 0;  
   }  
   Serial.flush(); // Limpa o buffer da entrada serial  
  }  
 }  

sexta-feira, 19 de Maio de 2017


Componentes necessários:

- Protobord
- LED de 5 mm
- Resitor de 100 ohms*
Codig Pro Arduino.
 *Verificar o resistor para o led, pois o valor pode ser diferente. 
 //Projeto 22 - Ligando LED pelo terminal  
 //Este código é de domínio público  
   
 int ledPin = 8;  
 char buffer; //Para salvar o que é digitado  
   
 void setup(){  
  Serial.begin(9600);  //Comunicação via USB  
  pinMode(ledPin, OUTPUT);  
  Serial.println("Deseja Ligar o LED(s/n)");  
 }  
   
 void loop(){  
    
  if(Serial.available()){   //Verifica se tem algo digitado, senão não entra no if  
   buffer = Serial.read();   
   if(buffer == 's'){  
    digitalWrite(ledPin, HIGH); // Liga o LED  
    delay(1000);  
    Serial.println("Deseja manter o LED ligado(s/n)");  
   }  
   else{  
    if(buffer == 'n'){  
     digitalWrite(ledPin, LOW);  // Desliga o LED  
     delay(1000);  
     Serial.println("Deseja Ligar o LED(s/n)");  
    }  
   }  
  }  
 }  

sexta feira, 19 de Maio de 2017

Projeto 24 - Controlando motor de passo com SHIELD

Componentes necessários:

- Protobord
- Motor de passo com SHIELD
- Fios
Foi utilizado no teste o referente a figura a cima.
codig pro Arduino
 //Projeto 24 - Controlando motor de passo com SHIELD  
 //Este código é de domínio público  
   
 #include <Stepper.h>  
   
 Stepper myStepper(300, 2, 4, 3, 5);  
  //Os 4 últimos número refetem-se aos pinos conectados ao arduino  
  //Fio vermelho é 5v, os outros devem ser conectados no arduino(seguindo a ordem deles, relacionando nas portas)  
    
 void setup(){  
 }  
    
 void loop(){  
  // Ajusta a velocidade, este valor pode ser mudado  
  myStepper.setSpeed(60); // Número de passos, sentido horário  
  myStepper.step(1500); //Se colocar negativo gira no sentido anti-horário  
 }