Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.76 KB | None | 0 0
  1. /*------------------------------------------ */
  2. /* programa seguidor de línea robot arduino */
  3. /*------------------------------------------ */
  4.  
  5. #include <LEANTEC_ControlMotor.h> //Incluimos la libreria para el control de motores.
  6.  
  7. // Conecta los sensores
  8. #define LEFT_SENSORPIN 11
  9. #define RIGHT_SENSORPIN 10
  10.  
  11. // Configuramos los pines que vamos a usar de salida
  12. ControlMotor control(2,3,7,4,5,6);
  13. int MotorDer1=2;//El pin 2 de arduino se conecta con el pin In1 del L298N
  14. int MotorDer2=3;//El pin 3 de arduino se conecta con el pin In2 del L298N
  15. int MotorIzq1=7;//El pin 7 de arduino se conecta con el pin In3 del L298N
  16. int MotorIzq2=4;//El pin 4 de arduino se conecta con el pin In4 del L298N
  17. int PWM_Derecho=5;//El pin 5 de arduino se conecta con el pin EnA del L298N
  18. int PWM_Izquierdo=6;//El pin 6 de arduino se conecta con el pin EnB del L298N
  19.  
  20. int velocidad=150;//Declaramos una variable para guardar la velocidad
  21.  
  22.  
  23. // Definimos variables de los sensores de entrada
  24. int sensor_R=0; // Variable para guardar el valor del sensor de la derecha
  25. int sensor_L=0; // Variable para guardar el valor del sensor de la izquierda
  26.  
  27.  
  28. void setup()
  29. {
  30.  
  31. // Iniciamos el puerto serie para volcar datos al PC
  32. Serial.begin(9600);
  33.  
  34. //Configuramos los pines como salida
  35. pinMode(MotorDer1, OUTPUT);
  36. pinMode(MotorDer2, OUTPUT);
  37. pinMode(MotorIzq1, OUTPUT);
  38. pinMode(MotorIzq2, OUTPUT);
  39. pinMode(PWM_Derecho, OUTPUT);
  40. pinMode(PWM_Izquierdo, OUTPUT);
  41. }
  42.  
  43.  
  44. void derecha_antihorario_izquierda_horario(){
  45. /*En esta fución la rueda derecha girará en sentido antihorario y la
  46. izquierda en sentido horario.
  47. En este caso, si las ruedas estuvieran en el chasis de un robot, el
  48. robot retrocederia.*/
  49. digitalWrite(MotorDer1,HIGH);
  50. digitalWrite(MotorDer2,LOW);
  51. digitalWrite(MotorIzq1,HIGH);
  52. digitalWrite(MotorIzq2,LOW);
  53. analogWrite(PWM_Derecho,200);//Velocidad motor derecho 200
  54. analogWrite(PWM_Izquierdo,200);//Velocidad motor izquierdo 200
  55.  
  56. }
  57. void derecha_horario_izquierda_antihorario(){
  58. /*En esta fución la rueda derecha girará en sentido horario y la
  59. izquierda en sentido antihorario.
  60. En este caso, si las ruedas estuvieran en el chasis de un robot, el
  61. robot avanzaría.*/
  62. digitalWrite(MotorDer1,LOW);
  63. digitalWrite(MotorDer2,HIGH);
  64. digitalWrite(MotorIzq1,LOW);
  65. digitalWrite(MotorIzq2,HIGH);
  66. analogWrite(PWM_Derecho,200);//Velocidad motor derecho 200
  67. analogWrite(PWM_Izquierdo,200);//Velocidad motor izquierdo 200
  68.  
  69. }
  70. void giro_horario(){
  71. /*En esta fución ambas ruedas girarán en sentido horario.
  72. En este caso, si las ruedas estuvieran en el chasis de un robot, el
  73. robot giraria a la derecha.*/
  74. digitalWrite(MotorDer1,HIGH);
  75. digitalWrite(MotorDer2,LOW);
  76. digitalWrite(MotorIzq1,LOW);
  77. digitalWrite(MotorIzq2,HIGH);
  78. analogWrite(PWM_Derecho,200);//Velocidad motor derecho 200
  79. analogWrite(PWM_Izquierdo,200);//Velocidad motor izquierdo 200
  80.  
  81. }
  82. void giro_antihorario(){
  83. /*En esta fución ambas ruedas girarán en sentido antihorario.
  84. En este caso, si las ruedas estuvieran en el chasis de un robot, el
  85. robot giraria a la izquierda.*/
  86. digitalWrite(MotorDer1,LOW);
  87. digitalWrite(MotorDer2,HIGH);
  88. digitalWrite(MotorIzq1,HIGH);
  89. digitalWrite(MotorIzq2,LOW);
  90. analogWrite(PWM_Derecho,200);//Velocidad motor derecho 200
  91. analogWrite(PWM_Izquierdo,200);//Velocidad motor izquierdo 200
  92.  
  93. }
  94. void parar(){
  95. /*Función para que las ruedas paren*/
  96. digitalWrite(MotorDer1,LOW);
  97. digitalWrite(MotorDer2,LOW);
  98. digitalWrite(MotorIzq1,LOW);
  99. digitalWrite(MotorIzq2,LOW);
  100. analogWrite(PWM_Derecho,200);//Velocidad motor derecho 200
  101. analogWrite(PWM_Izquierdo,200);//Velocidad motor izquierdo 200
  102.  
  103. }
  104. void loop()
  105. {
  106. // Leemos sensores L y H
  107. sensor_L=digitalRead(LEFT_SENSORPIN);
  108. sensor_R=digitalRead(RIGHT_SENSORPIN);
  109.  
  110. // Visualizamos
  111. Serial.print(" Left : ");
  112. Serial.print(sensor_L);
  113. Serial.print(" Right : ");
  114. Serial.print(sensor_R);
  115. Serial.println();
  116.  
  117. // En función del estado de los sensores seguimos recto, giramos o paramos
  118. // Estado: High->Negro , Low->blanco
  119. if ((sensor_L==LOW)&&(sensor_R==LOW)) {
  120. // Sigue recto
  121. Serial.println("Recto");
  122. giro_horario(); //Llamamos a la función giro_horario
  123. delay(10);
  124. }
  125. else if ((sensor_L==HIGH)&&(sensor_R==LOW)) {
  126. // Sensor izquierdo detecta negro -> Gira izquierda
  127. Serial.println("Giro izquierda");
  128. derecha_horario_izquierda_antihorario(); //Llamamos a la función derecha_horario_izquierda_antihorario
  129. delay(10);
  130. }
  131. else if ((sensor_L==LOW)&&(sensor_R==HIGH)) {
  132. // Sensor derecho detecta negro -> Gira derecha
  133. Serial.println("Giro derecha");
  134. derecha_antihorario_izquierda_horario(); //Llamamos a la función derecha_antihorario_izquierda_horario
  135. delay(10);
  136. }
  137. else {
  138. // los dos sensores leen negro. se para
  139. Serial.println("Paro");
  140. parar();//Llamamos a la función parar
  141. delay(10);
  142. }
  143.  
  144.  
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement