lunes, 18 de julio de 2016

Controlador Pap

Para un proyecto para controlar un motor paso a paso 
Este controlador esta siendo diseñado para poder trabajar con motores paso a paso hasta 3 amp y una tensión de 35 volt (siendo recomendados unos 24v. Tiene un LCD para ver el Menú del Programa y todo esta manejado con un arduino uno, keyLcd shield y un TB6560 de toshiba un driver pap que lo utilizo en todos mis proyectos y con éxito. Vean la versión I y II en estos vídeos se muestra la ubicación de los componentes



El programa que estoy utilizando



/*
***********************************************************************************************
 *                                                                                             *
 *     > Control de MOTOR a Pasos en Secuencia Normal                                          *
 *                                                                                             *                          
 *                                                                                             *
 *     > Programar la marcha de Pasos y Num de Giros                                           *
 *                                                                                             *
 *     > Materiales       + Placa arduino uno                                                  *
 *                        + Teclado  Matris de 4x4                                             *
 *                        + Display LCD1602                                                    *
 *                        + CI ULN2003                                                         *
 *                        + Fuente de alimentacion externa(transformador)                      *
 *                                                                                             *
 *     > Programador Olaf Albrecht                                                             *
 *                                                                                             *
 ***********************************************************************************************
 */
#include <LiquidCrystal.h>
#include <Keypad.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// Variables del motor pap
int delayTime = 150; // DelayTime determina la espera entre uno y otro paso
int delayTime1 = 0; // DelayTime1 determina la velocidad de giro entre uno y otro paso
int count = 0;
int sumex=0;
int paso=0;
int vuelt=0;
int veloc=0;

// Variable del Teclado
int lcd_key =0;
int adc_key_in =0;
int key=0;
int ajuste=0;
#define btnRIGHT    0
#define btnUP          1
#define btnDOWN    2
#define btnLEFT      3
#define btnSELECT  4
#define btnNONE     5
int read_LCD_buttons();

int read_LCD_buttons()
  { adc_key_in = analogRead(0);
  if (adc_key_in>900)   return btnNONE;
  if(adc_key_in<50)      return btnRIGHT;
  if(adc_key_in<250)    return btnUP;
  if(adc_key_in<450)    return btnDOWN;
  if(adc_key_in<650)    return btnLEFT;
  if(adc_key_in<850)    return btnSELECT;
  
  return btnNONE;
  }
  

void setup()
{
  
  pinMode(13,OUTPUT);  // Out motor pap paso
  pinMode(12,OUTPUT);  // Direccion
  Serial.begin(9600); // Establece la velocidad de datos del puerto serie
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("PaPVGB CONTROL");

}

void loop()
{
   lcd_key=read_LCD_buttons();
     switch(lcd_key)
  {
       case btnSELECT: //Set Variable to change
       {
              lcd.setCursor(0, 0); /* Linea 1 */
              lcd.print("PaPVGB CONTROL");
              ajuste++;
              lcd.setCursor(0, 1); /* Linea 2 */
             
              if (ajuste == 1){
                    Serial.println("Menu");
                    lcd.print("MENU"); 
              }  
              if (ajuste == 2) {
                    Serial.println("Paso");
                    lcd.print("Paso");
              }
              if (ajuste == 3) {
                    Serial.println("Vueltas");
                    lcd.print("Vueltas");
              }
              if (ajuste == 4) {
                    Serial.println("Velocidad");
                    lcd.print("Velocidad");
              }
              if (ajuste == 5) {
                    Serial.println("Ayuda");
                    lcd.print("Ayuda");
              }
              if (ajuste == 6) {
                    Serial.println("S Tecnico");
                    lcd.print("S Tecnico");
              }
              if (ajuste > 6 ) {
                     ajuste = 1;
              }       
              delay(1000);
              break;
              
       }
       case btnLEFT: // acero variables
       {
         Serial.println("Stop");
         ajuste=0;
         sumex=0;
         vuelt=0;
         veloc=0;
         break;
       }
       case btnRIGHT:
       {
         if(ajuste==2)
              {
               for (count = 0; count < sumex; count++)
                  {
                  Serial.print("Marcha: ");
                  Serial.println(count);
                  motor();
                  }
              }
          if(ajuste==3)
              {    
              for (count = 0; count < vuelt*4; count++)
                 {
                 Serial.print("Marcha: ");
                 Serial.println(count);
                 motor();
                 }
               }
          if(ajuste==4)
              {
              for (count = 0; count < veloc; count++)
                 {
                 Serial.print("Marcha: ");
                 Serial.println(count);
                 motor();
                 }
              }
         break;
       }
       case btnUP:
       {
          if(ajuste==2)
              {
                sumex++;
                Serial.println(sumex);
                delay(delayTime);
              }
          if(ajuste==3)
              {
                vuelt++;
                Serial.println(vuelt);
                delay(delayTime);
              } 
          if(ajuste==4)
              {
                veloc++;
                Serial.println(veloc);
                if(veloc<100)
                {
                delayTime1 = veloc*10;
                }
                else
                {
                  delayTime1 = 0;
                }
                delay(delayTime);
              }    
          if(ajuste==5)
              {
                
                Serial.println("Elija con el menu la opcion y aumente o decremente el paso,vueltas,velocidad");
                break;
              }    
          if(ajuste==6)
              {
                
                Serial.println("Mail: olafvgb61@gmail.com");
              }    
           break;   
       }
       case btnDOWN: 
       {
          if(ajuste==2)
              {
                sumex=sumex-1;
                if(sumex==0)
                {
                  sumex==0;
                  break;
                }
                Serial.println(sumex);
                delay(delayTime);
              } 
          if(ajuste==3)
              {
                vuelt=vuelt-1;
                Serial.println(vuelt);
                delay(delayTime);
              } 
          if(ajuste==4)
              {
                veloc=veloc-1;
                Serial.println(veloc);
                delay(delayTime);
              }     
             break; 
       }
       case btnNONE:
       {
         lcd.setCursor(0,0);
             
         break;
             
       }
  } /* Switch end */
      
   
  
}//End Loop

int motor()
{
  
         digitalWrite(13, HIGH);
         delay(delayTime1);
         digitalWrite(13, LOW);
         delay(delayTime1);
  
}