Excelente, para evitar la oscilacion debiste usar el PID
@osvaldorivera18974 жыл бұрын
Hye, Really nice work. Can you send me please .ino code. [email protected]
@gerardoramirez94504 жыл бұрын
Hola amigo, excelente video. Solo una duda: En el void loop () en la funcion map para el cálculo de actual_angle, ¿de dónde sale el número 5284? Muchísimas gracias y saludos.
@annie00763 жыл бұрын
Tengo la misma duda, ¿Si encontraste a que corresponde? Saludos
@davidromero63653 жыл бұрын
Es el número de pulsos emitidos por el encoder en una vuelta completa del eje del motor
@Knatalius4 жыл бұрын
Hola!, agradezco tu vídeo, podrías compartirme tu código por favor, a : [email protected]
@mariosanchez99264 жыл бұрын
me podrias compartir tu proyecto por favor. [email protected] saludos
@laingemexicana94895 жыл бұрын
hola buen trabajo me podrías mandar el código!! mi correo es [email protected]
@juancamiloserranocorrea62395 жыл бұрын
Genial, hicieron lo que hace un servomotor pero sin limitación de ángulo.
@aimeriveraruiz33025 жыл бұрын
¿Será que aún tengas el código y el diagrama del circuito? Me sería de mucha yuda [email protected] Gracias de antemano.
@carlosrojo73816 жыл бұрын
hahaha que asco, todos mendigando el código y a nadie le respondió el lerdo este xd
@JONNYTIMES6 жыл бұрын
no es un tutorial, que no vez que dice que es su proyecto de la Universidad, algunos profesores te piden que hagas una explicación tipo exposición y lo subas a KZbin
@josealvarez75586 жыл бұрын
@@JONNYTIMES 8186608447
@josealvarez75586 жыл бұрын
E
@gabrielantoniocruzyupanqui52876 жыл бұрын
hola primera mente quería felicitarte por tu gran aporte y quiera que por favor me puedas pasar el circuito y el codigo de arduino gracias :D [email protected]
@worldelectronicsecurity49336 жыл бұрын
Hola ,buen video amgigaso me podrías pasar el código y el diagrama del circuito ,te adradeceria mucho . [email protected]
@wilson87096 жыл бұрын
Hola amigo muy buen proyecto, me podrías regalar el código [email protected]
@brauliosanchezavalos62716 жыл бұрын
amigo me puedes compartir tu proyecto gracias de antemano [email protected]
@erikpalacios72386 жыл бұрын
Muchas gracias!!! excelente video!
@artejohnny28396 жыл бұрын
muy buen trabajo me pasarias el programa y el diagrama de conexion porfa mi coreo es [email protected]
Alguien que me pueda pasar el código y el driagrama de favor? se los agradecería, lo necesito para un proyecto de control clásico igual.
@danielcerezo3736 жыл бұрын
Genial ejemplo, gracias por compartirlo, para los que anden justos de tiempo os dejo el código en este comentario, esta sin probar y con mis aclaraciones en lenguaje poco formal, puede haber también erratas aunque lo he repasado ya varias veces. Un saludo //declaracion de variables unsigned int order_angle=0; char incomingByte; //Usado para la lectura serial long count=0; //Contador de pulsos de pwm, los cambios emitidos por el encoder int error; int actual_angle; int pwm; int flag=0; int x=4; //pines para el control del giro int y=5; //pines para el control del giro int salida; unsigned long timep, time, etime; //etime==evaluacionTiempo boolean A,B; byte state, statep; //statep==statePasado void setup() { Serial.begin(9600); //Inicializa la comunicacion serial pinMode(2,INPUT); //Canal A del encoder pinMode(3,INPUT); //Canal B del encoder pinMode(x,OUTPUT); // IN1 pinMode(y,OUTPUT); // IN2 pinMode(11,OUTPUT); // ENA ENABLE???Tiene pinta attachInterrupt(0,Achange,CHANGE); //Genera una interrupccion al detectar cambios en el canal A del encoder attachInterrupt(1,Bchange,CHANGE); //Genera una interrupccion al detectar cambios en el canal B del encoder timep=micros(); A = digitalRead(2); //Lectura del canal A B = digitalRead(3); //Lectura del canal B //Declaracion de los estados posibles entre la lectura de los canales A y B del Encoder if((A==HIGH)&&(B==HIGH)) statep=1; if((A==HIGH)&&(B==LOW)) statep=2; if((A==LOW)&&(B==LOW)) statep=3; if((A==LOW)&&(B==HIGH)) statep=4; } void loop() { time = micros(); etime = time - timep; /*********************************************************************** * TODO ESTO ES PARA COGER MAS DE UN CARACTER DEL PUERTO SERIAL!!! ***********************************************************************/ if (Serial.available() > 0) //Primero pregunta si hay algo en el serial { //Este bucle permite capturar mas de un numero en el serial!!!! Porque antes solo podian uno order_angle = 0; //Descarta el valor anterior de order_angle while(1) { // obliga a entrar a un ciclo hasta que se reciba una incomingByte = Serial.read(); if (incomingByte == '/n') break; //Salir del ciclo cuando haya un salto de linea if (incomingByte == -1) continue; //Si no hay caracter... order_angle *= 10; //Multiplica "order_angle" por 10, lo que lo desplaza hacia la izquierda en decimales // Convierte ASCII a valor entero order_angle = ((incomingByte - 48) + order_angle); } } actual_angle=map(count,0,5284,0,360); // Transformamos lo acumulado en grados /*****************************************************************************/ /*********************************************************************** * IMPLEMENTACION EN BUCLE CERRADO!!!! * Calculamos el error como el absoluto de la resta entre la posicion actual * la posicion buscada y tras esto mapeamos el error en una variable que la * introduciremos mas tarde para controlar el ciclo de trabajo, luego cuanto * mas cercano este menor sera el valor del mapeo y a su vez menor ciclo de trabajo * hasta llegar a 0. ***********************************************************************/ error= abs(order_angle-actual_angle); // Calculo del error (abs == absoluto (siempre en positivo)) pwm = map(error,0,360,0,255); // Tranformación del error a un valor de PWM analogWrite(11,pwm); // Se imprime el valor de salida del pwm if (order_angle>actual_angle) // Si el angulo ordenado es mayor que el angulo actual gira a la izquierda { turnRight(); // Motor girando a la derecha flag=1; } else { turnLeft(); // Motor girando a la izquierda } /*****************************************************************************/ if (etime > 1000000) //Si ha pasado 1 segundo (estampos en microsegundos) { //Imprime cada segundo los datos, solamente hace eso Serial.print("Angulo deseado: "); Serial.print(order_angle); Serial.print(", Angulo actual: "); Serial.print(actual_angle); Serial.print(", PWM: "); Serial.print(pwm); if(flag==1) { Serial.print("Girando CW"); //Siguiendo las manecillas de relog } else { Serial.print("Girando CCW"); //Contra las manecillas de relog } timep = time; } } /*********************************************************************** * FUNCION ACHANGE() DETECTA EL CAMBIO DE FLANCO DEL CANAL A DEL ENCODER ***********************************************************************/ void Achange() { A = digitalRead(2); //Lectura del canal A B = digitalRead(3); //Lectura del canal B //Declaracion de los estados posibles entre la lectura de los canales A y B del Encoder if((A==HIGH)&&(B==HIGH)) state =1; if((A==HIGH)&&(B==LOW)) state =2; if((A==LOW)&&(B==LOW)) state =3; if((A==LOW)&&(B==HIGH)) state =4; switch(state) { case 1: //Si el estado actual es 1 { //Comparacion con el estado pasado if(statep == 2) count--; // Si el estado pasado es 2 decrementamos el contador en 1 if(statep == 4) count++; // Si el estado pasado es 4 incrementamos el contador en 1 break; } case 2: //Si el estado actual es 2 { //Comparacion con el estado pasado if(statep == 1) count++; // Si el estado pasado es 1 incrementamos el contador en 1 if(statep == 3) count--; // Si el estado pasado es 3 decrementamos el contador en 1 break; } case 3: //Si el estado actual es 3 { //Comparacion con el estado pasado if(statep == 2) count++; // Si el estado pasado es 2 incrementamos el contador en 1 if(statep == 4) count--; // Si el estado pasado es 4 decrementamos el contador en 1 break; } default: //Utilizado el default como el estado 4 { //Comparacion con el estado pasado if(statep == 1) count--; // Si el estado pasado es 1 decrementamos el contador en 1 if(statep == 3) count++; // Si el estado pasado es 3 incrementamos el contador en 1 //break; } } statep = state; // actualizamos la variable statep con el valor del actual estado para cerrar el circulo } /*********************************************************************** * FUNCION BCHANGE() DETECTA EL CAMBIO DE FLANCO DEL CANAL B DEL ENCODER ***********************************************************************/ void Bchange() { A = digitalRead(2); //Lectura del canal A B = digitalRead(3); //Lectura del canal B //Declaracion de los estados posibles entre la lectura de los canales A y B del Encoder if((A==HIGH)&&(B==HIGH)) state=1; if((A==HIGH)&&(B==LOW)) state=2; if((A==LOW)&&(B==LOW)) state=3; if((A==LOW)&&(B==HIGH)) state=4; switch(state) { case 1: //Si el estado actual es 1 { //Comparacion con el estado pasado if(statep == 2) count--; // Si el estado pasado es 2 decrementamos el contador en 1 if(statep == 4) count++; // Si el estado pasado es 4 incrementamos el contador en 1 break; } case 2: //Si el estado actual es 2 { //Comparacion con el estado pasado if(statep == 1) count++; // Si el estado pasado es 1 incrementamos el contador en 1 if(statep == 3) count--; // Si el estado pasado es 3 decrementamos el contador en 1 break; } case 3: //Si el estado actual es 3 { //Comparacion con el estado pasado if(statep == 2) count++; // Si el estado pasado es 2 incrementamos el contador en 1 if(statep == 4) count--; // Si el estado pasado es 4 decrementamos el contador en 1 break; } default: //Utilizado el default como el estado 4 { //Comparacion con el estado pasado if(statep == 1) count--; // Si el estado pasado es 1 decrementamos el contador en 1 if(statep == 3) count++; // Si el estado pasado es 3 incrementamos el contador en 1 //break; } } statep = state; // actualizamos la variable statep con el valor del actual estado para cerrar el circulo } void turnRight() // Ordena el giro en CW (Clock Way) { digitalWrite(x,HIGH); digitalWrite(y,LOW); } void turnLeft() // Ordena el giro en CCW (Contra Clock Way) { digitalWrite(x,LOW); digitalWrite(y,HIGH); }
@carlosrojo73816 жыл бұрын
ya lo probaste ?
@haroldaguivillar4247 Жыл бұрын
@@carlosrojo7381 sin funciona necesitas el hardware adecuado nomas
@jhonyluiscarbajalquispe26977 жыл бұрын
HOLA PORFAVOR. UNA PREGUNTA. COMO INGRESAS ESE ANGULO EN ARDUINO PARA QUE GIRE EL MOTOR. NO ENCUENTRO LAS OPCIONES
@deaelectronic81756 жыл бұрын
A mi me pasa lo mismo no encuentro como ingresar el angulo, lo averiguaste tu. Gracias
@dantejimrandalgallotorres8856 жыл бұрын
mediante el puerto serial
@piezaspararobotica7 жыл бұрын
Si estas en categoria educacion ..creo te falta poner los datos de codigo y diagrama utilizados en el proyecto sino para que sirve???? no podemos experimentar y llevar a la practica...Sdos..
@jacquelinnehernandezlorenz75057 жыл бұрын
oye amigo, podrias ayudarme, diciendo que tipo de motor usas?? porfavor.,, que relcion es y de que tipo es el encoders
@alfredomendozaavila86897 жыл бұрын
Hola que tal muy interesante tu proyecto me podrias proporcionar tu codigo ya que estoy trabajando en algo parecido de ante mano te lo agradezco y muchas gracias [email protected]
@alejandragarcia95867 жыл бұрын
Hola chico, muy buen proyecto. Estoy trabajando en un proyecto parecido , me podrias mandar informacion del tuyo para hacer la simulacion en proteus? Mi motor es DC de 24 voltios con encoder incluido. Este es mi correo [email protected] SOY DE VENEZUELA
@jhonpreciado53807 жыл бұрын
mi reina estaras disponible para mi......
@efrainramos68367 жыл бұрын
amigo muy bueno, ¿me podrias ayudar con el codigo?
@victorjimenez6948 жыл бұрын
Buenas tardes amigo por favor me puede pasar su código y el diagrama de conexiones gracias n.n mi correro es: [email protected]
@ivanmanuelasmatburgos2798 жыл бұрын
un favor me podrias pasar tu código y el diagrama de las conexiones te agradecería mucho mi correo es : [email protected]
@bikeblogsmx72518 жыл бұрын
me podrías pasar tu código por favor y el diagrama de las confecciones. mi correo es [email protected]
@khalilnallarcamacho2998 жыл бұрын
hola buen video, bien explicado me puedes mandar el código utilizado? mi correo es [email protected] gracias saludos
@CarlosSanchez-dx4cg8 жыл бұрын
Muy Buen trabajo. Disculpa, me podrías compartir el código y tu diagrama por favor. Mi correo es: [email protected]. Muchas gracias!!!
@enrikeprz98858 жыл бұрын
hola excelente trabajo un favor me podrias mandar el codigo y diagrama del circuito mi correo es [email protected]
@urielbonillaperez22238 жыл бұрын
me podrian compartir el codigo y el circuito para analizarlo mejor, de antemano excelente trabajo [email protected] .... gracias
@cesarcastillo82558 жыл бұрын
excelente trabajo, podrías compartir me tu código, mi correo es; [email protected]
@juanpablorendon8389 жыл бұрын
Hola soy nuevo en este campo; pero me parece muy interesante este proyecto.Me puede compartir el codigo y el diagrama del circuito? para poder analizarlo y aprender mas. Le agradezco su colaboracion . Gracias. mi correo es [email protected] un amigo mas.
@carlosivanresendiztapia17837 жыл бұрын
hola amigo una pregunta si te paso el codigo y diagrama ?????
@3ST3BANJIMENEZ9 жыл бұрын
Una pregunta, Tlacalel, Si en lugar de encoder adaptamos un potenciometro al motor (de manera fisica) para que nos indique la posición actual del motor, cómo adaptamos ese cambio en programación??
@3ST3BANJIMENEZ9 жыл бұрын
Hola me podrías compartir el codigo que utilizaron. Saludos
@blackwuay14hg609 жыл бұрын
me podrias mandar el diagrama del circuito mi correo es [email protected]
@jomahero239 жыл бұрын
Buen trabajo, gracias por compartirlo ya que me ha sido de mucha utilidad