Posted By

JuanCastillo on 04/30/19


Tagged

arduino


Versions (?)

SEPARADOR DE TAPAS


 / Published in: C
 

URL: SEPARADOR DE TAPAS

SEPARADOR DE TAPAS DOSIFICADO AUTOMATIZADO

  1. /* TITULO: DOSIFICACION Y SEPARACION DE TAPAS POR COLOR
  2.  
  3.   AUTOR:
  4.  
  5.   JUAN SEBASTIAN CASTILLO --> TECNOLOGO EN ELECTRÓNICA
  6.   JOSE DAVID GALINDO
  7.   MAURO VALENCIA
  8.   - CORREO: [email protected]
  9.  
  10.   NOTAS:
  11.  
  12. */
  13. #include <Keypad.h> //LIBRERIA TECLADO
  14. #include <LiquidCrystal.h> //LIBRERIA LCD
  15. #include <Servo.h> //LIBRERIA SERVO
  16.  
  17. const byte FILAS = 4;
  18. const byte COLUMNAS = 4;
  19. char pulsar[FILAS][COLUMNAS] = {
  20. {'1','2','3','A'},
  21. {'4','5','6','B'},
  22. {'7','8','9','C'},
  23. {'*','0','#','D'}
  24. };
  25. byte pinesFilas[FILAS] = {6,7,8,9};
  26. byte pinesColumnas[COLUMNAS] = {10,11,12,13};
  27. Keypad keypad = Keypad(makeKeymap(pulsar), pinesFilas, pinesColumnas, FILAS, COLUMNAS);
  28. LiquidCrystal lcd(48,49,50,51,52,53);
  29. //SENSOR COLOR
  30. #define S0 2
  31. #define S1 3
  32. #define S2 4
  33. #define S3 5
  34. #define sensorOut 30
  35. //SERVOS
  36. Servo Servo1; // SEPARADOR
  37. Servo Servo2; // EMPUJA TAPA
  38. int frequencia = 0;
  39. int color (0);
  40. int cambio (0);
  41. //conf. menu
  42. int habilitador;
  43. int la,la2;
  44. int w=0;
  45. int q=0;
  46. int cantidad[]= {0,0,0,0};
  47. int teclado = 0;
  48. int pulso=0;
  49. //MOTOR SEPARADOR
  50. int IN4 = 22;
  51. int IN3 = 24;
  52. int IN2 = 26;
  53. int IN1 = 28
  54. ;
  55. //MOTOR DOSIFICADOR
  56. int IN12 = 23;
  57. int IN22 = 25;
  58. int IN32 = 27;
  59. int IN42 = 29;
  60. int demora(20);
  61. int r=0,r1=0,rojo=0;
  62. int a=0,a1=0,azul=0;
  63. int b=0,b1=0,blanco=0;
  64. int v=0,v1=0,verde=0;
  65.  
  66. void setup() {
  67. Servo1.attach(33);
  68. Servo2.attach(32);
  69. Serial.begin(9600);
  70. //MENU
  71. habilitador = 0;
  72. lcd.clear();
  73. lcd.begin(16, 2);
  74. lcd.setCursor(0,0);
  75. bienvenido();
  76. menu0();
  77. pinMode(34,INPUT);
  78. pinMode(47,OUTPUT);
  79. pinMode(14,OUTPUT);
  80. digitalWrite(47,HIGH);
  81. digitalWrite(14,LOW);
  82. pinMode(IN1, OUTPUT);
  83. pinMode(IN2, OUTPUT);
  84. pinMode(IN3, OUTPUT);
  85. pinMode(IN4, OUTPUT);
  86. pinMode(S0, OUTPUT);
  87. pinMode(S1, OUTPUT);
  88. pinMode(S2, OUTPUT);
  89. pinMode(S3, OUTPUT);
  90. pinMode(sensorOut, INPUT);
  91. // Configurando frecuncia al 20%
  92. digitalWrite(S0, LOW);
  93. digitalWrite(S1, HIGH);
  94.  
  95. }
  96.  
  97. void loop() {
  98. pulso=digitalRead(34);
  99. teclado = (key());
  100. delay(10);
  101. switch (teclado) {
  102. case 1:
  103. automatico();
  104. break;
  105. case 12:
  106. Serial.println("ROJO");
  107. rojo=1;
  108. azul=0;
  109. blanco=0;
  110. verde=0;
  111. conteo();
  112. break;
  113. case 2:
  114. menu2();
  115. break;
  116. case 22:
  117. Serial.println("AZUL");
  118. rojo=0;
  119. azul=1;
  120. blanco=0;
  121. verde=0;
  122. conteo();
  123. break;
  124. case 3:
  125. Serial.println("BLANCO");
  126. rojo=0;
  127. azul=0;
  128. blanco=1;
  129. verde=0;
  130. conteo();
  131. break;
  132. case 4:
  133. Serial.println("VERDE");
  134. rojo=0;
  135. azul=0;
  136. blanco=0;
  137. verde=1;
  138. conteo();
  139. break;
  140. case 5:
  141. menuconteo();
  142. break;
  143. case 6:
  144. fin();
  145. break;
  146. }
  147. delay(10);
  148. teclado=0;
  149. }
  150.  
  151. int key(){
  152. char TECLA = keypad.getKey();
  153. if(TECLA){Serial.println(TECLA);}
  154. ////conteo color rojo////
  155. if(habilitador==3 && rojo==1){
  156. if(r==9){
  157. r=0;
  158. r1++;
  159. }else{
  160. separar();
  161. }
  162. lcd.setCursor(5,1);
  163. lcd.print(r);
  164. lcd.setCursor(4,1);
  165. lcd.print(r1);
  166. if(r1==la && r==la2){
  167. delay(500);
  168. teclado = 6;
  169. r=0;
  170. r1=0;
  171. }
  172. }
  173. ////conteo color azul////
  174. if(habilitador==3 && azul==1){
  175. if(a==9){
  176. a=0;
  177. a1++;
  178. }else{
  179. separar();
  180. }
  181. lcd.setCursor(5,1);
  182. lcd.print(a);
  183. lcd.setCursor(4,1);
  184. lcd.print(a1);
  185. if(a1==la && a==la2){
  186. delay(500);
  187. teclado = 6;
  188. a=0;
  189. a1=0;
  190. }
  191. }
  192. ////conteo color verde////
  193. if(habilitador==3 && verde==1){
  194. if(v==9){
  195. v=0;
  196. v1++;
  197. }else{
  198. separar();
  199. }
  200. lcd.setCursor(5,1);
  201. lcd.print(v);
  202. lcd.setCursor(4,1);
  203. lcd.print(v1);
  204. if(v1==la && v==la2){
  205. delay(500);
  206. teclado = 6;
  207. v=0;
  208. v1=0;
  209. }
  210. }
  211. ////conteo color blanco////
  212. if(habilitador==3 && blanco==1){
  213. if(b==9){
  214. b=0;
  215. b1++;
  216. }else{
  217. separar();
  218. }
  219. lcd.setCursor(5,1);
  220. lcd.print(b);
  221. lcd.setCursor(4,1);
  222. lcd.print(b1);
  223. if(b1==la && b==la2){
  224. delay(500);
  225. teclado = 6;
  226. b=0;
  227. b1=0;
  228. }
  229. }
  230. ////separacion automatica////
  231. if(habilitador==7){
  232. pulso=digitalRead(34);
  233. if(pulso==1){
  234. separar();
  235. }
  236. if(pulso==0){
  237. menu0();
  238. }
  239. }
  240. if (TECLA == 'A'){
  241. if(habilitador==0){
  242. teclado = 1; //AUTOMATICO
  243. }
  244. if(habilitador==1){
  245. teclado = 12;
  246. }
  247. }
  248. if (TECLA == 'B'){
  249. if(habilitador==0){
  250. teclado = 2;
  251. }
  252. if(habilitador==1){
  253. teclado = 22;
  254. }
  255. }
  256. if (TECLA == 'C'){
  257. if(habilitador==1){
  258. teclado = 3;
  259. }
  260. }
  261. if (TECLA == 'D'){
  262. if(habilitador==1){
  263. teclado = 4;
  264. }
  265. }
  266. if (TECLA == '#'){
  267. if(habilitador==2){
  268. teclado = 5;
  269. }
  270. }
  271. if (TECLA == '*'){
  272. habilitador=0;
  273. menu0();
  274. }
  275. return teclado;
  276. }
  277.  
  278. /////////////////////////////////////////////////////////////////////////////////////////////////////////
  279. void bienvenido(){ //PARPADEO INICIAL
  280. lcd.setCursor(3,0);
  281. lcd.print("BIENVENIDO");
  282. lcd.setCursor(0,1);
  283. lcd.print("SEPARADOR TAPAS");
  284. lcd.display();
  285. delay(1500);
  286. lcd.noDisplay();
  287. delay(500);
  288. lcd.display();
  289. delay(1500);
  290. lcd.clear();
  291. delay(500);
  292. }
  293. void menu0 (){ //ESCOGER MANUAL O AUTOMATICO
  294. habilitador=0;
  295. Serial.println("MENU PRINCIPAL");
  296. lcd.clear();
  297. lcd.setCursor(0,0);
  298. lcd.print("A) AUTOMATICO");
  299. lcd.setCursor(0,1);
  300. lcd.print("B) MANUAL");
  301. }
  302. void menu2 (){ //ESCOGER COLOR DE TAPA
  303. habilitador=1;
  304. Serial.println("COLOR DE TAPA QUE DESEA SEPARAR");
  305. lcd.clear();
  306. lcd.setCursor(5,0);
  307. lcd.print("ESCOGE");
  308. lcd.setCursor(1,1);
  309. lcd.print("COLOR DE TAPA");
  310. lcd.display();
  311. delay(2000);
  312. lcd.noDisplay();
  313. delay(500);
  314. lcd.display();
  315. lcd.clear();
  316. lcd.setCursor(1,0);
  317. lcd.print("A)ROJO C)BLANCO");
  318. lcd.setCursor(1,1);
  319. lcd.print("B)AZUL D)VERDE");
  320. }
  321. void separar (){ //PROCESO DE SEPARACION
  322. cambio =25;
  323. motor();
  324. delay(500);leerColor();
  325. cambio =13;
  326. motor();
  327. delay(100);
  328. if(color!=0){
  329. moverServo(color);
  330. }
  331. delay(1500);
  332. cambio =12;
  333. motor();
  334. digitalWrite(14,LOW);
  335. delay(200);
  336. digitalWrite(14,HIGH);
  337. delay(5000);
  338.  
  339. }
  340. void automatico(){ //SEPARACION AUTOMATICA
  341. habilitador=7;
  342. Serial.println("MODO AUTOMATICO");
  343. lcd.clear();
  344. lcd.setCursor(3,0);
  345. lcd.print("*UNIVALLE*");
  346. }
  347. void motor (){ //MOVER MOTOR SEPARADOR
  348.  
  349. for (int i = 0; i < cambio ; i++) // 512*4 = 2048 pasos
  350. {
  351. digitalWrite(IN1, HIGH); // paso 1
  352. digitalWrite(IN2, LOW);
  353. digitalWrite(IN3, LOW);
  354. digitalWrite(IN4, LOW);
  355. delay(demora);
  356.  
  357. digitalWrite(IN1, LOW); // paso 2
  358. digitalWrite(IN2, HIGH);
  359. digitalWrite(IN3, LOW);
  360. digitalWrite(IN4, LOW);
  361. delay(demora);
  362.  
  363. digitalWrite(IN1, LOW); // paso 3
  364. digitalWrite(IN2, LOW);
  365. digitalWrite(IN3, HIGH);
  366. digitalWrite(IN4, LOW);
  367. delay(demora);
  368.  
  369. digitalWrite(IN1, LOW); // paso 4
  370. digitalWrite(IN2, LOW);
  371. digitalWrite(IN3, LOW);
  372. digitalWrite(IN4, HIGH);
  373. delay(demora);
  374. }
  375. digitalWrite(IN1, LOW); // paso 4
  376. digitalWrite(IN2, LOW);
  377. digitalWrite(IN3, LOW);
  378. digitalWrite(IN4, LOW);
  379. }
  380. void leerColor (){ //ACTIVAR SENSOR DE COLOR
  381. // Configuracion Color RGB rojo
  382. digitalWrite(S2, LOW);
  383. digitalWrite(S3, LOW);
  384. frequencia = pulseIn(sensorOut, LOW);
  385. int R = frequencia;
  386. // Mostrar Valor
  387. Serial.print("R= ");
  388. Serial.print(frequencia);
  389. Serial.print(" ");
  390. delay(100);
  391. // Configuracion Color RGB verde
  392. digitalWrite(S2, HIGH);
  393. digitalWrite(S3, HIGH);
  394. frequencia = pulseIn(sensorOut, LOW);
  395. int G = frequencia;
  396. // Mostrar Valor
  397. Serial.print("G= ");
  398. Serial.print(frequencia);
  399. Serial.print(" ");
  400. delay(100);
  401. // Configuracion Color RGB azul
  402. digitalWrite(S2, LOW);
  403. digitalWrite(S3, HIGH);
  404. frequencia = pulseIn(sensorOut, LOW);
  405. int B = frequencia;
  406. // Mostrar Valor
  407. Serial.print("B= ");
  408. Serial.print(frequencia);
  409. Serial.println(" ");
  410. delay(100);
  411. /////configuracion de lectura de color//////
  412. /////COLOR ROJO////////
  413. if(G>R && G>B && G>3000 && B>R ){
  414. if(habilitador==7){
  415. lcd.setCursor(1,1);
  416. lcd.print("COLOR => ROJO "); delay(200);
  417. Serial.println(" Rojo");color = 1;
  418. }else if(rojo==1&&habilitador==3){
  419. lcd.setCursor(10,0);
  420. lcd.print("ROJO ");r++; delay(200);
  421. Serial.println(" Rojo");color = 1;
  422. }
  423. }
  424. /////COLOR AZUL////////
  425. else if(G>R && G>B && R>B && R>2800 && G>3000&& B<2500){
  426. if(habilitador==7){
  427. lcd.setCursor(1,1);
  428. lcd.print("COLOR => AZUL "); delay(200);
  429. Serial.println(" Azul");color = 2;
  430. }else if(azul==1&&habilitador==3){
  431. lcd.setCursor(10,0);
  432. lcd.print("AZUL ");a++; delay(200);
  433. Serial.println(" Azul");color = 2;
  434. }
  435. }
  436. /////COLOR VERDE////////
  437. else if(R>G && R>B && G>B && G<3300 ){
  438. if(habilitador==7){
  439. lcd.setCursor(1,1);
  440. lcd.print("COLOR => VERDE "); delay(200);
  441. Serial.println(" Verde");color = 3;
  442. }else if(verde==1&&habilitador==3){
  443. lcd.setCursor(10,0);
  444. lcd.print("VERDE ");v++; delay(200);
  445. Serial.println(" Verde");color = 3;
  446. }
  447. }
  448. /////COLOR BLANCO////////
  449. else if(G>R && G>B && G < 2000){
  450. if(habilitador==7){
  451. lcd.setCursor(1,1);
  452. lcd.print("COLOR => BLANCO "); delay(200);
  453. Serial.println(" Blanco");color = 4;
  454. }else if(blanco==1&&habilitador==3){
  455. lcd.setCursor(10,0);
  456. lcd.print("BLANCO ");b++; delay(200);
  457. Serial.println(" Blanco");color = 4;
  458. }
  459. }
  460. /////NINGUN COLOR////////
  461. else {
  462. if(habilitador==7){
  463. lcd.setCursor(1,1);
  464. lcd.print(" ----------- "); delay(500);
  465. }else{
  466. lcd.setCursor(10,0);
  467. lcd.print("------"); delay(500);}
  468. color = 5;
  469. }
  470. }
  471. void moverServo(int dato){ //MOVER SERVO SEPARADOR
  472. switch (dato) {
  473. case 1:
  474. digitalWrite(47,LOW);
  475. delay(200);
  476. digitalWrite(47,HIGH);
  477. Servo1.write(180);
  478. // Servo2.write(30);
  479. // delay(500);
  480. // Servo2.write(90);
  481.  
  482. break;
  483. case 2:
  484. digitalWrite(47,LOW);
  485. delay(200);
  486. digitalWrite(47,HIGH);
  487. Servo1.write(130);
  488. //Servo2.write(30);
  489. // delay(500);
  490. // Servo2.write(90);
  491.  
  492. break;
  493. case 3:
  494. digitalWrite(47,LOW);
  495. delay(200);
  496. digitalWrite(47,HIGH);
  497. Servo1.write(40);
  498. //Servo2.write(30);
  499. //delay(500);
  500. //Servo2.write(90);
  501. break;
  502. case 4:
  503. digitalWrite(47,LOW);
  504. delay(200);
  505. digitalWrite(47,HIGH);
  506. Servo1.write(0);
  507. //Servo2.write(30);
  508. //delay(500);
  509. //Servo2.write(90);
  510. break;
  511. case 5:
  512. digitalWrite(47,LOW);
  513. delay(200);
  514. digitalWrite(47,HIGH);
  515. Servo1.write(80);
  516. // Servo2.write(30);
  517. // delay(500);
  518. //Servo2.write(90);
  519. break;
  520. case 6:
  521. break;
  522. case 0:
  523. break;
  524. }
  525. delay(3);
  526. color=0;
  527. }
  528. void conteo (){ //ESCOGER CANTIDAD DE TAPAS A SEPARAR
  529. habilitador=2;
  530. Serial.println("CANTIDAD QUE DESEA SEPARAR");
  531. lcd.clear();
  532. lcd.setCursor(0,0);
  533. lcd.print("Numero de tapas?");
  534. lcd.setCursor(7,1);
  535. lcd.print("#)iniciar");
  536.  
  537. int j = 2;
  538. while(j<4){
  539. char key2 = keypad.getKey();
  540. if(key2!=NO_KEY && j<4 && key2>='0' && key2<='9'){
  541. cantidad[j]=key2;
  542. lcd.setCursor(j, 1);
  543. lcd.print(key2);
  544. j++;
  545. Serial.print(key2);
  546. }
  547. }
  548. }
  549. void menuconteo(){ //VIZUALIZA EL CONTEO EN MODO MANUAL
  550. habilitador=3;
  551. lcd.clear();
  552. lcd.setCursor(0,0);
  553. lcd.print("CONTEO :");
  554. lcd.setCursor(7,1);
  555. lcd.print("/");
  556. la = map(cantidad[2],48,57,0,9);
  557. la2 = map(cantidad[3],48,57,0,9);
  558. lcd.setCursor(9,1);
  559. lcd.print(la);
  560. lcd.setCursor(10,1);
  561. lcd.print(la2);
  562. lcd.setCursor(5,1);
  563. lcd.print(w);
  564. lcd.setCursor(4,1);
  565. lcd.print(q);
  566. }
  567. void fin (){ //TERMINA CONTEO EN MODO MANUAL
  568. habilitador=0;
  569. Serial.println("FINALIZO CONTEO");
  570. lcd.clear();
  571. lcd.setCursor(4,0);
  572. lcd.print("FINALIZO");
  573. lcd.setCursor(1,1);
  574. lcd.print("LA SEPARACION_");
  575. lcd.display();
  576. delay(2000);
  577. lcd.noDisplay();
  578. delay(500);
  579. lcd.display();
  580. lcd.clear();
  581. lcd.setCursor(1,0);
  582. lcd.print("PRESIONE ==> *");
  583. lcd.setCursor(1,1);
  584. lcd.print("PARA IR AL MENU");
  585. }

Report this snippet  

You need to login to post a comment.