Advertisement
Villalba2006

POST_60

Nov 28th, 2016
2,476
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.28 KB | None | 0 0
  1. /*  TITULO: Control de una hélice con motor DC y driver L9110H.
  2.  
  3.     AUTOR:
  4.    
  5.     MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
  6.     - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
  7.     - TWITTER: https://twitter.com/MarianoCampoGa
  8.     - CORREO: marianodc83@gmail.com
  9.    
  10.    
  11.     DESCRIPCIÓN DEL PROGRAMA
  12.    
  13.     Con este programa se controlar una hélice con motor DC (Fan Motor) mediante el driver L9110H. A través del
  14.     monitor serie podremos seleccionar las diferentes opciones de velocidad y sentido de giro del motor DC,
  15.     además de poder realizar dos tipos difrentes de parada (con freno motor y sin él).
  16.    
  17.    
  18.     ESQUEMA DE CONEXION
  19.    
  20.                                       +-----+
  21.          +----[PWR]-------------------| USB |--+
  22.          |                            +-----+  |
  23.          |         GND/RST2  [ ][ ]            |
  24.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |  
  25.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |  
  26.          |                             AREF[ ] |
  27.          |                              GND[ ] |
  28.          | [ ]N/C                    SCK/13[ ] |  
  29.          | [ ]IOREF                 MISO/12[ ] |  
  30.          | [ ]RST                   MOSI/11[ ]~|  
  31.          | [ ]3V3    +---+               10[ ]~|  
  32.          | [ ]5v    -| A |-               9[ ]~|   INA del "Fan motor"
  33.          | [ ]GND   -| R |-               8[ ] |   INB del "Fan motor"
  34.          | [ ]GND   -| D |-                    |
  35.          | [ ]Vin   -| U |-               7[ ] |  
  36.          |          -| I |-               6[ ]~|  
  37.          | [ ]A0    -| N |-               5[ ]~|  
  38.          | [ ]A1    -| O |-               4[ ] |    
  39.          | [ ]A2     +---+           INT1/3[ ]~|    
  40.          | [ ]A3                     INT0/2[ ] |  
  41.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  42.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  43.          |            [ ] [ ] [ ]              |
  44.          |  UNO_R3    GND MOSI 5V  ____________/
  45.           \_______________________/
  46.  
  47.   NOTAS:
  48.  
  49.    - La alimentación y la masa del "Fan Motor" van directamente conectadas a +5V y GND respectivamente.
  50.    
  51. */
  52.  
  53.   // Declaración de constantes globales
  54.   #define MOTOR_PWM 9 // Pin digital 9 para el pin INA (Velocidad PWMM del motor)
  55.   #define MOTOR_GIRO 8 // Pin digital 8 para el pin INB (Sentido de giro del motor)
  56.   #define PWM_LENTO 100  // PWM para la velocidad lenta
  57.   #define PWM_RAPIDO 255 // PWM para la velocidad rápida
  58.   #define RETARDO_GIRO 1000 // Retardo para el cambio del sentido de giro del motor
  59.  
  60.   boolean entrada_valida; // Variable para el control del MENU
  61.   byte c; // Variable que almacena el carácter recibido por el puerto serie
  62.   int anterior = 0; // Variable que almacena el número de la secuencia del MENU
  63.  
  64.   void setup()
  65.   {
  66.     Serial.begin(9600);
  67.     pinMode(MOTOR_GIRO, OUTPUT); // Pin digital 8 como salida
  68.     pinMode(MOTOR_PWM, OUTPUT); // Pin digital 9 como salida
  69.     digitalWrite(MOTOR_GIRO, LOW); // MOTOR_DIR a nivel BAJO
  70.     digitalWrite(MOTOR_PWM, LOW); // MOTOR_PWM a nivel BAJO
  71.   }
  72.  
  73.   void loop()
  74.   {  
  75.     // Dibuja el MENU a través del monitor serie
  76.     Serial.println("--------------------------------");
  77.     Serial.println("----------    MENU    ----------");
  78.     Serial.println("--------------------------------");
  79.     Serial.println("1 - AVANCE RAPIDO");
  80.     Serial.println("2 - HACIA ADELANTE");
  81.     Serial.println("3 - PARADA SUAVE");
  82.     Serial.println("4 - MARCHA ATRAS");
  83.     Serial.println("5 - RETROCESO RAPIDO");
  84.     Serial.println("6 - FRENO MOTOR");
  85.     Serial.println("X - CUALQUIER TECLA SACA MENU");
  86.     Serial.println("--------------------------------");
  87.     Serial.print(">> Selecciona una opcion... ");
  88.    
  89.     do
  90.     {
  91.       // Espera el siguiente carácter enviado desde el monitor serie
  92.       while(!Serial.available())
  93.       ; // Se mantiene en un bucle de espera
  94.  
  95.       c = Serial.read(); // Almaceno el carácter recibido
  96.       Serial.write(c);
  97.      
  98.       // Evalúo el carácter recibido
  99.       switch(c)
  100.       {
  101.         case '1': // AVANCE RAPIDO
  102.        
  103.           Serial.println("\n--------------------------------");
  104.           Serial.println( "AVANCE RAPIDO!!!" );
  105.           Serial.println("--------------------------------");
  106.           Serial.print(">> Selecciona una opcion... ");
  107.          
  108.           if(anterior!=2)
  109.           {
  110.             // Se detienen los motores brevemente antes del cambio del sentido de giro
  111.             digitalWrite(MOTOR_GIRO, LOW);
  112.             digitalWrite(MOTOR_PWM, LOW);
  113.           }
  114.           if(anterior == 3 || anterior == 4)
  115.           {
  116.             delay(RETARDO_GIRO); // Retardo para el cambio del sentido de giro
  117.           }
  118.    
  119.           // Ajusta la velocidad y el sentido de giro del motor
  120.           digitalWrite(MOTOR_GIRO, HIGH); // Sentido de giro -> Hacia adelante
  121.           analogWrite(MOTOR_PWM, 255-PWM_RAPIDO); // Velocidad -> Rápida
  122.  
  123.           entrada_valida = true;
  124.           anterior = 1;
  125.           break;
  126.            
  127.  
  128.         case '2': // HACIA ADELANTE
  129.        
  130.           Serial.println("\n--------------------------------");
  131.           Serial.println( "HACIA ADELANTE!!!" );
  132.           Serial.println("--------------------------------");
  133.           Serial.print(">> Selecciona una opcion... ");
  134.          
  135.           if(anterior!=1)
  136.           {
  137.             // Se detienen los motores brevemente antes del cambio del sentido de giro
  138.             digitalWrite(MOTOR_GIRO, LOW);
  139.             digitalWrite(MOTOR_PWM, LOW);
  140.           }  
  141.          
  142.           if(anterior == 3 || anterior == 4)
  143.           {
  144.             delay(RETARDO_GIRO); // Retardo para el cambio del sentido de giro
  145.           }  
  146.  
  147.           // Ajusta la velocidad y el sentido de giro del motor
  148.           digitalWrite(MOTOR_GIRO, HIGH); // Sentido de giro -> Hacia adelante
  149.           analogWrite(MOTOR_PWM, 255-PWM_LENTO); // Velocidad -> Lenta
  150.  
  151.           entrada_valida = true;
  152.           anterior = 2;        
  153.           break;      
  154.            
  155.  
  156.         case '3': // PARADA SUAVE
  157.        
  158.           Serial.println("\n--------------------------------");
  159.           Serial.println( "PARADA SUAVE!!!" );
  160.           Serial.println("--------------------------------");
  161.           Serial.print(">> Selecciona una opcion... ");
  162.          
  163.           // Se detienen los motores
  164.           digitalWrite(MOTOR_GIRO, LOW);
  165.           digitalWrite(MOTOR_PWM, LOW);
  166.  
  167.           entrada_valida = true;
  168.           break;      
  169.  
  170.    
  171.         case '4': // MARCHA ATRAS
  172.        
  173.           Serial.println("\n--------------------------------");
  174.           Serial.println( "MARCHA ATRAS!!!" );
  175.           Serial.println("--------------------------------");
  176.           Serial.print(">> Selecciona una opcion... ");
  177.          
  178.           if(anterior!=4)
  179.           {
  180.             // Se detienen los motores brevemente antes del cambio del sentido de giro
  181.             digitalWrite(MOTOR_GIRO, LOW);
  182.             digitalWrite(MOTOR_PWM, LOW);
  183.           }
  184.          
  185.           if(anterior == 1 || anterior == 2)
  186.           {
  187.             delay(RETARDO_GIRO); // Retardo para el cambio del sentido de giro
  188.           }
  189.  
  190.           // Ajusta la velocidad y el sentido de giro del motor
  191.           digitalWrite(MOTOR_GIRO, LOW); // Sentido de giro -> Hacia atrás
  192.           analogWrite(MOTOR_PWM, PWM_LENTO ); // Velocidad -> Lenta
  193.  
  194.           entrada_valida = true;
  195.           anterior = 3;
  196.           break;      
  197.  
  198.  
  199.         case '5': // RETROCESO RAPIDO
  200.  
  201.           Serial.println("\n--------------------------------");
  202.           Serial.println( "RETROCESO RAPIDO!!!" );
  203.           Serial.println("--------------------------------");
  204.           Serial.print(">> Selecciona una opcion... ");
  205.          
  206.           if(anterior!=3)
  207.           {
  208.             // Se detienen los motores brevemente antes del cambio del sentido de giro
  209.             digitalWrite(MOTOR_GIRO, LOW);
  210.             digitalWrite(MOTOR_PWM, LOW);          
  211.           }
  212.          
  213.           if(anterior == 1 || anterior == 2)
  214.           {
  215.             delay(RETARDO_GIRO); // Retardo para el cambio del sentido de giro
  216.           }
  217.  
  218.           // Ajusta la velocidad y el sentido de giro del motor
  219.           digitalWrite(MOTOR_GIRO, LOW); // Sentido de giro -> Hacia atrás
  220.           analogWrite(MOTOR_PWM, PWM_RAPIDO); // Velocidad -> Rápida
  221.  
  222.           entrada_valida = true;
  223.           anterior = 4;
  224.           break;
  225.  
  226.            
  227.         case '6': // FRENO MOTOR (No utilizar con frecuencia)
  228.  
  229.           Serial.println("\n--------------------------------");
  230.           Serial.println( "FRENO MOTOR!!!" );
  231.           Serial.println("--------------------------------");
  232.           Serial.print(">> Selecciona una opcion... ");
  233.          
  234.           // Se invierte el sentido de giro del motor y se para
  235.           digitalWrite(MOTOR_GIRO, HIGH);
  236.           digitalWrite(MOTOR_PWM, HIGH);
  237.  
  238.           entrada_valida = true;
  239.           break;      
  240.  
  241.            
  242.         default:
  243.  
  244.           Serial.println("\n");        
  245.           // Si se introduce un carácter que no está en el MENU, se vuelve a mostrar el MENU
  246.          
  247.           entrada_valida = false;
  248.           break;
  249.       }
  250.  
  251.     } while(entrada_valida == true);
  252.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement