El hilo de ARDUINO: Dudas, código, ejemplos, etc

Tema en 'Informática - Tecnología' iniciado por McClane, 26 May 2017.

  1. MiguelX5

    MiguelX5 En Practicas

    Registrado:
    8 Feb 2017
    Mensajes:
    242
    Me Gusta:
    148
    Si te interesa algo de lo que pongo te puedo pasar el enlace a los tutos, la mayoría con copia-pega los terminas en una tarde.

    Lo mejor es mezclar ambos entornos.

    Salu2!
     
    A katraska le gusta esto.
  2. MiguelX5

    MiguelX5 En Practicas

    Registrado:
    8 Feb 2017
    Mensajes:
    242
    Me Gusta:
    148
    Alguno controláis de Blynk y sus pins virtuales?

    Tengo un problema de código ya que al parecer dentro de los while no se pueden leer pines virtuales lo que implica que la condición nunca termina.

    Muchas gracias.

    Un saludo
     
  3. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.330
    Me Gusta:
    21.110
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Casi lo tengo!! Me falta un pequeño ajuste que logro dar con ello. :(

    Me he puesto a darme cabezazos delante del ordenador con el ARDUINO y he pensado en hacerme un semáforo con algunos LED que tengo por aquí, pero no un semáforo de solo coches con el rojo, verde y amarillo, sino también con el de peatones :LOL: Sin embargo, me ha sabido a poco porque no es más que una extensión del programa del LED integrado (digitalWrite y delay nada más), por lo que me he complicado metiendo... el botón de peatones. :LOL:

    El funcionamiento del botón de los semáforos es el siguiente. Cuando pulsas el botón, inmediatamente pasa a amarillo y luego a rojo. Sin embargo, si acaba de ponerse en verde, al pulsar el botón no cambiará a amarillo, ya que tiene que pasar un tiempo. Lo tengo casi todo. Cuando reseteo la placa y le pulso al botón, éste hace el funcionamiento correcto. Si soy un ansias, hasta que no pasan los diez segundos que le he puesto, no cambiará a amarillo. Si pasan cinco segundos y le pulso, hasta dentro de cinco segundos no pasa a amarillo. Una vez que pasa a amarillo, hace todo el programa correcto, volviendo al verde, pero es aquí donde viene el problema: la segunda vez ya no respeta los 10s de tiempo y cambia a amarillo inmediatamente. :(

    Creo tener el problema pero no tengo la solución. El comando millis() cuenta milisegundos desde que se inicia la placa, y no desde que se le llama, por lo que en el siguiente ciclo, pasa directamente a amarillo porque ya tiene el tiempo acumulado desde que arranca, pero no encuentro un comando para resetear el tiempo y las pruebas que he hecho no han funcionado. He probado a restar el tiempo a sí mismo, pero creo que luego vuelve a tomar su valor. He creado también una variable secundaria para guardar el tiempo y restarlo pero no hay manera: solo funciona bien la primera vez. :(

    A ver si damos con ello, y así habré sacado adelante el proyecto más ambicioso de ARDUINO: un p*to semáforo. :descojon:

    CODE, HTML o PHP Insertado:
    int coche_verde(11);
    int coche_rojo(12);
    int coche_ambar(13);
    int peaton_verde(7);
    int peaton_rojo(6);
    int pulsador(2);
    unsigned int boton; //variable de número de pulsaciones
    unsigned int tiempo2; //variable secundaria de tiempo
    
    void setup()
    {
    pinMode(peaton_rojo, OUTPUT);
    pinMode(peaton_verde, OUTPUT);
    pinMode(coche_verde, OUTPUT);
    pinMode(coche_rojo, OUTPUT);
    pinMode(coche_ambar, OUTPUT);
    pinMode(pulsador, INPUT_PULLUP);
    Serial.begin(9600); //únicamente utilizado como diagnóstico, no sirve para nada
    
    }
    
    void loop()
    
    //Inicio, cuenta tiempo y prepara el semáforo para estar en verde
    
    {
     
      empezar:
      unsigned long tiempo=millis();
      digitalWrite(peaton_rojo, HIGH);
      digitalWrite(coche_rojo, LOW);
      digitalWrite(coche_verde, HIGH);
    
    //Botón
     
      tiempo-tiempo2;
      if (tiempo<10000) {
        goto empezar;
        
        }else{
          boton = digitalRead(pulsador);
        
          if (boton == HIGH){
          boton++;
        
          }else{
            goto empezar;
            }
        
            if (boton=0){
            goto empezar;
            } 
      }
    
    //Cambio a rojo
    
      continuar:
      Serial.println(boton); //únicamente utilizado como diagnóstico, no vale
      digitalWrite(coche_verde, LOW);
      digitalWrite(coche_ambar, HIGH);
      delay(2000);
      digitalWrite(coche_ambar, LOW);
      digitalWrite(coche_rojo, HIGH);
    
    //Peatones
    
      digitalWrite(peaton_rojo, LOW);
      digitalWrite(peaton_verde, HIGH);
      delay(6000);
      digitalWrite(peaton_verde, LOW);
      delay(500);
      digitalWrite(peaton_verde, HIGH);
      delay(500);
      digitalWrite(peaton_verde, LOW);
      delay(500);
      digitalWrite(peaton_verde, HIGH);
      delay(500);
      digitalWrite(peaton_verde, LOW);
      digitalWrite(peaton_rojo, HIGH);
      delay(2000);
      tiempo2=tiempo; //guarda el tiempo actual en la segunda variable
      boton=0; //almacena cero pulsaciones en el botón
     
    
    }
    Estoy seguro de que es una chorrada, pero solamente si se pudiese resetear el comando millis() sería lo único que me faltaría. ¿Me echáis una mano? ;)
     
    Última edición: 14 Jun 2017
    A jormi y Tizon les gusta esto.
  4. katraska

    katraska Coordinador Coordinador

    Registrado:
    24 Ene 2002
    Mensajes:
    10.295
    Me Gusta:
    3.262
    Ubicación:
    Sanse - Madrid
    Modelo:
    330i G20
    Cosas que veo @McClane

    etiquetas y goto's, en C están prohibidos. Se pueden evitar con while, for, if, etc. Complican mucho la lectura del código y puedes tener resultados poco predecibles

    El primer bucle lo resuelves con:

    while (tiempo-tiempo2 < 1000){
    <lo que sea>
    }

    Además, en ese bucle estás asignando el mismo valor a las salidas digitales miles de veces.... y declarando también miles de veces la variable tiempo.

    Usas la variable tiempo2 sin haberla inicializado. Es decir, al comenzar el programa no sabes qué valor tiene. Sólo has reservado un espacio en memoria, pero igual no está a cero (suele estarlo al reiniciar, pero nunca se sabe).

    Nada mas empezar haces: tiempo - tiempo2, que no entiendo como te deja el compilador, porque no hace nada. No se si quieres decir tiempo = tiempo - tiempo2 o qué.

    A continuación preguntas si tiempo<10000. como acabas de iniciar el arduino, el contador millis() empieza de cero, así que la primera vez se tira 10 segundos en ese bucle, hasta que millis pasa de 10000.

    luego, si no pulsas nada, se mete en ese código, donde hay un montón de delays encadenados. Entiendo que tras los primeros 10 segundos es lo que buscas (cambiar a rojo) .Por tanto el arduino está metido en un montón de delays y cada 12 segundos pasa fugazmente por el control del botón pulsado (ya es casualidad que lo pille en estado bajo, que entiendo es lo que te ofrece cuando pulsas). Es decir, durante todo este tiempo, aunque pulses, pasa de ti porque el arduino no está mirando la entrada del botón. Para solventar esto, como te contaba en un post previo, tienes que utilizar interrupciones.... y no utilizar delay: deberías hacerte una función equivalente, que te retarde la ejecución del código, usando el valor millis. Alternativamente, podrías no utilizar interrupciones, pero verificar la pulsación dentro de la función de los retardos... las alternativas son infinitas.

    El bloque que pone:

    if (boton=0){
    goto empezar;
    }

    creo que no se ejecuta nunca, pulses o no pulses. No alcanzo a ver para qué lo usas.

    Tampoco parece adecuado que a una variable tipo int le asignes un valor HIGH. No es que no se pueda porque HIGH es 1, pero lleva un poco al huerto cuando lees el código.

    Como primera medida, intenta eliminar todas las etiquetas y goto. Te obligará a pensar el código de modo más lógico y serás capaz de ver por dónde pasa. Inicializa el valor tiempo2.

    te recomiendo que antes de meterte a escribir código organices las ideas tratando de hacer un esquema (tipo diagrama de flujo) donde vayas escribiendo acciones atómicas sencillas y luego con flechas vas organizando dónde debe ir el código en caso de condiciones.

    Te diría dónde tocar, pero me temo que no es cosa de tocar una variable o una línea. Si quieres te hago algo, pero te lo tendría que dar la vuelta (lo siento ;))


    salu2
     
    Última edición: 15 Jun 2017
    A borja.lopez y Tizon les gusta esto.
  5. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.330
    Me Gusta:
    21.110
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Aupa!! :LOL: No te contesto no porque pase del tema, es que ahora no puedo sacar ni una hora para dedicarte. :(

    @katraska
     
  6. katraska

    katraska Coordinador Coordinador

    Registrado:
    24 Ene 2002
    Mensajes:
    10.295
    Me Gusta:
    3.262
    Ubicación:
    Sanse - Madrid
    Modelo:
    330i G20
    No hay problema, cuando lo retomes seguimos ;-)

    salu2
     
    A Tizon le gusta esto.
  7. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.330
    Me Gusta:
    21.110
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    A ver si ahora. :D

    Cuando programo o intento programar :LOL: tengo detrás la página de ARDUINO ton todas las instrucciones disponibles, así voy viendo instrucciones que me pueden valer y así intentar echarlas a andar. La instrucción goto sí está contemplada y las etiquetas también, de ahí que las use, ya que no tengo ni puñetera idea ni de C, ni de C+ ni de C++. :(

    Todo lo que veas de tiempo y tiempo2 y demás, son intentos frustrados de intentar restar el tiempo antiguo al nuevo con la esperanza de que se resetee, pero como puedes comprobar, no resetea, así que ahora mismo no lo tengas muy en cuenta. :LOL:

    En cuanto al millis(), el tiempo de 10000ms y el botón, si funciona. Cuando meto tensión al ARDUINO, éste ejecuta el millis, se pone a contar y empieza con la luz verde para coches y la luz roja para peatones. Si pasan esos diez segundos, el semáforo sigue en verde siempre hasta que pulse el botón. Cuando pulso el botón, inmediatamente hace el ciclo del ámbar y rojo para volver a empezar. Si no llega a los diez segundos y yo ya he pulsado el botón, cuando el contador llegue a 10 segundos, el semáforo hace la función. Para ponerlo más claro. Al meter tensión al ARDUINO:

    -Si no pulso el botón, SIEMPRE se queda en verde
    -Si pulso el botón después de los 10s, cambia inmediatamente a ámbar
    -Si pulso el botón antes de los 10s, hasta que no llegue al tiempo estipulado, no cambia a ámbar

    Con esto comprobamos que el código en sí, funciona, y que el contador de pulsaciones también lo hace. Que la programación no sea la óptima, te lo compro, bastante que casi consigo hacer el p*to semáforo. :LOL: Tendré que empezar a cagarla por algún lado. :descojon: En cuanto a los delays, pues no he encontrado otro código viable con mis conocimientos, que no llegan ni al 1%. De momento, con que me funcione perfecto aunque no esté perfectamente programado, me doy por satisfecho. :LOL: Iré poniéndome poco a poco retos de estos porque sí, ves que se pueden hacer mil cosas pero te pones a programar tu idea y de esas mil cosas, te salen mil dudas. :LOL: Lo siguiente que haga seguramente sea un control de temperatura de frío o calor, o ambos, que si baja de temperatura active una salida y si sube de una temperatura, active otra salida. Pero antes quiero que el semáforo funcione. ;)

    Si está casi entero, pero me falta que respete esos 10s siempre. :LOL:

    Muchas gracias por la ayuda. Volveré a leerme tu respuesta y cuando tenga un rato y no haga tanto calor :LOL: me pongo con ello. ;)
     
    A SPTR y Tizon les gusta esto.
  8. SPTR

    SPTR Forista Legendario Moderador Miembro del Club

    Registrado:
    18 Ago 2005
    Mensajes:
    9.218
    Me Gusta:
    854
    Ubicación:
    X
    Cómo te va el bacalao mclein!! :chulo:
     
  9. katraska

    katraska Coordinador Coordinador

    Registrado:
    24 Ene 2002
    Mensajes:
    10.295
    Me Gusta:
    3.262
    Ubicación:
    Sanse - Madrid
    Modelo:
    330i G20
    Mira @McClane, un ejemplo de gestión de dos teclas por interrupciones.

    Cuando se pulsa una de las teclas se ejecuta la rutina de interrupción (botón_up o botón_down), que lo único que hacen es poner a true una variable global.
    En el búcle loop se está mirando continuamente el valor de esas variables, y si de repente están a true es que ha saltado la rutina de interrupción. Haces lo que sea y luego vuelves a poner a false la variable global, para la próxima. Aprovecho a meter un timer para evitar que los rebotes de las teclas hagan que se detecte como varias pulsaciones.


    CODE, HTML o PHP Insertado:
    #define PIN_UP 3            // pin de entrada de tecla UP
    #define PIN_DOWN 2          // pin de entrada de tecla DOWN
    #define TIMER_SWITCH 150    // temporizador para evitar rebotes de teclas
    
    boolean up, down;
    
    //-------------------------------------------------------------------------
    void setup() {
      Serial.begin(115200);
      pinMode(PIN_UP, INPUT_PULLUP);
      pinMode(PIN_DOWN, INPUT_PULLUP);
      attachInterrupt(digitalPinToInterrupt(PIN_UP), boton_up , RISING);
      attachInterrupt(digitalPinToInterrupt(PIN_DOWN), boton_down, RISING);
      delay(300);       // -- para evitar que salten las interrupciones al comienzo
      up = false;
      down = false;
    }
    
    //--------------------------------------------------------------------------
    void loop() {
      if (up){
         Serial.println("UP");
         delay(TIMER_SWITCH);
         up = false;
        }
    
       if (down){
          Serial.println("DOWN");
          delay(TIMER_SWITCH);
          down = false; 
       }
    }
    
    // -----------------------------------------------------------------------
    //    manejo de interrupción de boton UP pulsado
    // -----------------------------------------------------------------------
    void boton_up(){
      up = true;
      }
    
    
    // -----------------------------------------------------------------------
    //    manejo de interrupción de boton DOWN pulsado
    // -----------------------------------------------------------------------
     void boton_down(){
      down = true;
      } 
     
    Última edición: 22 Jun 2017
    A SPTR y Tizon les gusta esto.
  10. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.330
    Me Gusta:
    21.110
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Dejé Arduino durante una temporada. Un juego en concreto me quitaba tiempo y el calor del verano sudando a chorros no era lo mejor para aprender a programar la placa y menos aún con los "sofocos" de "yo he programado esto bien y no sé porqué me dice que está mal". :descojon:

    Ahora que ha venido el "frío" (o más bien se ha ido el calorazo) le he dado otra oportunidad pero esta vez he intentado hacer algo más básico, es decir, retroceder un paso para avanzar (o intentar) dos pasos, por lo que me he hecho un "voltímetro" a costa de tres LEDs, precisión máxima. :descojon:

    En un primer momento empleé un proyecto de ejemplo que viene con el propio Arduino y lo intenté mejorar. El proyecto en sí es una lectura constante del pin A0 para que el conversor lo transforme a digital y me ofrezca un voltaje enviando dicho valor por puerto serie. El programilla es el "ReadAnalogVoltaje", así que esa es su base. No obstante, me lié la manta a la cabeza y decidí complicarme con los correspondientes cabezazos contra la pantalla. :D

    La idea era crear dos variables, una para que encendiese el pin 13 cuando haya menos de 2,5v y otra que encienda el pin 12 cuando haya 2,5v o más. Hacer esto con dos LED no fue difícil, sinceramente (gracias, manual de Arduino :D), pero el reto vino incorporando un tercer LED para mostrar un valor intermedio. Aquí vino el comecocos. (n) Mi idea era hacer unas variables con lo siguiente:
    • Si hay 4,5v o más, pones en HIGH el led 1
    • Si hay 3v o más, pones en HIGH el led 2
    • Si hay 4,5v o menos, pones en HIGH el led 2
    • Si hay 3v o menos, pones en HIGH el led 3
    Como todo iniciado, crees que tienes razón, programas eso y resulta que cuando hay más de 4,5v, se enciende el led 2 y 3, así que no me valía y cambié el orden de las variables sin cambiarlas. El resultado era el mismo pero con tensión baja, es decir, que a 0v, se encendían el led 2 y además el 3. Volvía a modificar las cosas y pasaba lo contrario, y no había coj*nes a apagar el led 2 cuando se salía de escala. :mad: Un simple "&" entre ambas instrucciones lo arreglaba todo, y lo mejor de todo fue que usé esa solución como "pff, no creo que tire..." y resulta que funcionó. :LOL: Sí, podemos decir que este es el primer programilla que hago para Arduino y que funciona sin problemas. :descojon:

    CODE, HTML o PHP Insertado:
    int led1;
    int led2;
    int led3;
    
    void setup() {
      Serial.begin(9600);
      pinMode(8, OUTPUT);
      pinMode(12, OUTPUT);
      pinMode(13, OUTPUT);
    }
    
    void loop() {
     
      int valor = analogRead(A0);
      float voltaje = valor * (5.0 / 1023.0);
      Serial.println(voltaje);
      led1 = (voltaje >= 4.5 == HIGH);
      led2 = (voltaje >= 3 & voltaje < 4.5 == HIGH);
      led3 = (voltaje < 3 == HIGH);
      digitalWrite(8, led1);
      digitalWrite(12, led2);
      digitalWrite(13, led3);
      delay(100); //para no sobrecargar el puerto serie
     
    }
    Hice antes de éste otro programa muy sencillo pero que también tiene su miga, y es encender el pin 13 cuando se pulsa un pulsador asociado a una entrada digital. Sin pulsar, se encendía, y pulsando, se apagaba, lo lógico, vamos. :mad: Finalmente una admiración antes de la variable ("!variable") lo solucionaba todo. :LOL:

    Poco a poco iré descubriendo más cosillas y pensando en más formas de complicarme con algo... y hacer que funcione. El botón del semáforo lo tengo pendiente aún. :rambo:
     
  11. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.330
    Me Gusta:
    21.110
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Tengo el semáforo. :LOL: No funciona perfecto pero luego por la madrugada subo el código. Es que he salido para celebrarlo. :descojon:

    Código. Omito muchas líneas que no son relevantes para la solución:

    CODE, HTML o PHP Insertado:
    [...]
    int pulsador(2);
    int boton2;
    unsigned int boton; //variable de número de pulsaciones
    unsigned int tiempoinicial; //variable secundaria de tiempo
    unsigned int tiempofinal;
    
    void setup()
    {
    pinMode(peaton_rojo, OUTPUT);
    pinMode(peaton_verde, OUTPUT);
    pinMode(coche_verde, OUTPUT);
    pinMode(coche_rojo, OUTPUT);
    pinMode(coche_ambar, OUTPUT);
    pinMode(pulsador, INPUT);
    Serial.begin(9600);
    
    }
    
    void loop()
    
    //Inicio, cuenta tiempo y prepara el semáforo para estar en verde
    
    {
    
      empezar:
      delay(100);
      unsigned long tiempo=millis();
      [...]
      digitalWrite(peaton_rojo, HIGH);
      digitalWrite(coche_rojo, LOW);
      digitalWrite(coche_verde, HIGH);
      tiempoinicial = tiempo - tiempofinal;
    
    //Botón
    
      boton = digitalRead(pulsador);
      if(boton > 0){
        boton2++;
      }
      if (tiempoinicial < 22000)
      {
        goto empezar;
      
      }else if(boton2 == 0){
        goto empezar;
      }
     
    //Cambio a rojo
    
      continuar:
      [...]
    
    //Peatones
    
      [...]
      boton2=0; //almacena cero pulsaciones en el botón
      tiempofinal=tiempo; //almacena el tiempo actual
    Finalmente no funciona como quería, pero tras el primer ciclo, respeta ya siempre los diez segundos que puse en un primer momento a condición de que en el primer ciclo haya que esperar 22s. Realmente estaba ya desesperado y cambiando y poniendo variables para ver si podía hacerlo, finalmente, de casualidad, ha funcionado. :LOL:

    Me he dado cuenta que cuando hace el ciclo de luces, el tiempo se incrementa en 12s, que es lo que tarda en hacer el ciclo. Eso en algunos casos provocaba la situación anterior, que nada más ponerse en verde, el botón respondía. Era porque sí hacía caso a esa diferencia de 10s, pero es que ejecutar el programa, ya consumía esos 10s de rigor. Finalmente le incrementé el tiempo en el primer ciclo y los siguientes ciclos ya funcionan a poco más de 10s. Lo que me ha costado el hijo p*ta!! :descojon: El código no es bonito y podrá tener algún fallo (el primer ciclo es un fallo) pero hace más o menos lo que quiere y me doy por satisfecho. :LOL: Seguiré haciendo códigos pequeños para aprender a manejarlo. El siguiente, intentaré que sea el acelerador de un tren, que acelera poco a poco pero frena en seco. Veremos cómo se me dan las salidas PWM, que de momento no voy mal. :D
     
    Última edición: 1 Nov 2017
    A Tizon y katraska les gusta esto.
  12. SPTR

    SPTR Forista Legendario Moderador Miembro del Club

    Registrado:
    18 Ago 2005
    Mensajes:
    9.218
    Me Gusta:
    854
    Ubicación:
    X
    Cómo te lo pasas mc clein, jijijiji,

    Yo sin saber mucho, ya veía que eso de los leds, como lo habías puesto al principio, se encenderían todos a la vez, jajajaja, la culpa es tuya que no sabes programar :descojon::descojon:

    Ayyy perrilla, como te va el barrillo.
     
  13. jmalm

    jmalm Forista

    Registrado:
    18 Sep 2010
    Mensajes:
    1.015
    Me Gusta:
    448
    Ubicación:
    La Morera
    Modelo:
    325TD 530i 330d
    Uff, los goto esos... no me gustan nada jejejejee
     
  14. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.330
    Me Gusta:
    21.110
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    No he sabido hacerlo de otra manera. :LOL:
     
  15. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.330
    Me Gusta:
    21.110
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Y con razón. :LOL:



    Esta noche he pedido una placa de prototipo con varios cables, una pantalla de 16x4 con I2C y una placa CAN-BUS para decirle algo a los coches y que no se cabreen. :descojon: Ya tengo hasta fin de año para hacerlo funcionar todo bien. :D
     
    A Tizon le gusta esto.
  16. jmborja

    jmborja In God I Trust! Miembro del Club

    Registrado:
    26 Ene 2002
    Mensajes:
    69.728
    Me Gusta:
    106.154
    Ubicación:
    Centro "geodésico" de España.
    Modelo:
    M57 + S54 = 527
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    Mi hijo creo que está enredando también en “ésto”.
    Le voy a pasar el enlace del hilo ;)
     
  17. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.330
    Me Gusta:
    21.110
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Dile si sabe hacer funcionar una pantalla de 20x4 por I2C, que me acaba de llegar, cargo un programa que es "cargar y listo" y aquí no funciona esto. :descojon:
     
    A jmborja le gusta esto.
  18. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.330
    Me Gusta:
    21.110
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Bueno, dile que he sudado bastante pero que al final lo he conseguido :LOL:

    IMG_20171108_225644.jpg
     
    A katraska y jmborja les gusta esto.
  19. jmborja

    jmborja In God I Trust! Miembro del Club

    Registrado:
    26 Ene 2002
    Mensajes:
    69.728
    Me Gusta:
    106.154
    Ubicación:
    Centro "geodésico" de España.
    Modelo:
    M57 + S54 = 527
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    Cuando venga el finde se lo comentaré ;)
     
  20. josete_perez

    josete_perez Forista Legendario

    Registrado:
    21 Ene 2015
    Mensajes:
    10.629
    Me Gusta:
    12.235
    Modelo:
    Ex 535i E39
    Pillo sitio en el hilo que tengo en danza un par de proyectos con arduino a la espera qué lleguen los componentes

    He visto tutoriales a parte que estos cacharros ya los trasteaba cuando era chispas pero claro entonces el acceso y los precios a los paratos de la época era bastante más elevado que en la actualidad

    Me he decidido a montar dos display de números y Leds para los simuladores que me marquen las revoluciones número de marcha y unos leds Con una arduino nano

    Y
    Por otra parte me quiero hacer un volante con un motor de pasos con su driver para el encoder y una fuente de alimentación que irá conectado a una Leonardo

    El tema de conexiones lo tengo claro y el software más o menos pero como siempre me surgira alguna duda y o problema le expondré en el hilo tanto eso como el montaje y si consigo hacerlo funcionar también lo pondré en el hilo

    Saludos
     
    A Tizon y pasko les gusta esto.
  21. elbader

    elbader En Practicas

    Registrado:
    12 Sep 2014
    Mensajes:
    448
    Me Gusta:
    640
    Modelo:
    F31/XJR-SP
    Te seguiré con interés @josete_perez, aunque mu malas fechas para seguir nada :sleep:.
    ¿Por qué un motor de pasos? ¿Para darle "vida" al volante?
     
    A pasko le gusta esto.
  22. josete_perez

    josete_perez Forista Legendario

    Registrado:
    21 Ene 2015
    Mensajes:
    10.629
    Me Gusta:
    12.235
    Modelo:
    Ex 535i E39
    Xacto, dicen que avanza en pasos de 1,8 grados a parte con el encoder manda hacia donde debe girar con qué intensidad y en qué punto se encuentra

    Si los volantes de 200 pavos de plástico ya molan uno con aro de verdad y 9 nm de par tiene que ser un flipe
     
    A pasko le gusta esto.
  23. josete_perez

    josete_perez Forista Legendario

    Registrado:
    21 Ene 2015
    Mensajes:
    10.629
    Me Gusta:
    12.235
    Modelo:
    Ex 535i E39
    Después de seis horas trasteando con la arduino Leonardo he conseguido que funcione, de momento con un display matrix de 8x8 que ya me indica la marcha y hasta tiene animación :floor::floor: pero si él display han sido seis horas no me quiero imaginar lo que me va a costar el volante

    Ya tengo aquí el motor con su driver, en cuanto llegue la fuente de alimentación me pongo a ver si soy capaz de hacerlo funcionar

    La verdad que me tirado unos días entretenido con el aparatejo
     
  24. pasko

    pasko Forista Senior

    Registrado:
    21 Sep 2017
    Mensajes:
    4.203
    Me Gusta:
    10.200
    Modelo:
    F45 - K54
    Hola.

    Yo también he trasteado un poco con esto :)
    Tengo un arduino funcionando con sensor de temperatura y humedad y un led infrarrojo para control remoto del split del aire acondicionado.
    Me he basado en el software que hay aquí:
    https://github.com/danny-source/Arduino_DY_IRDaikin

    También compré uno de estos para controlar con la voz una lámpara del salón:
    https://www.itead.cc/smart-socket.html
    Estos son clones de Arduino basadas en ESP8286, y luego le puse este software:
    https://github.com/arendst/Sonoff-Tasmota

    Atento a lo que vayáis contando!

    Saludos.
     
    A Tizon y josete_perez les gusta esto.
  25. josete_perez

    josete_perez Forista Legendario

    Registrado:
    21 Ene 2015
    Mensajes:
    10.629
    Me Gusta:
    12.235
    Modelo:
    Ex 535i E39
    Ha llegado la fuente de alimentación esta noche empiezo las pruebas del motor del volante aunque el aro y el adaptador no han llegado todavía ni he fabricado el soporte pero tampoco me voy a meter más en harina hasta que no sea capaz de hacer que funcione que tengo mis dudas :D

    [​IMG]
    [​IMG]
    [​IMG]
    :geek:
     
    A Tizon y pasko les gusta esto.
  26. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    42.330
    Me Gusta:
    21.110
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Aquí atento a la que vas a liar. :LOL:
     
  27. josete_perez

    josete_perez Forista Legendario

    Registrado:
    21 Ene 2015
    Mensajes:
    10.629
    Me Gusta:
    12.235
    Modelo:
    Ex 535i E39
    Me imagino la escena


    :floor::floor::floor:

    Ahora en serio espero que no haga pum y por si acaso 2 extintores tengo :D
     
    A pasko le gusta esto.
  28. josete_perez

    josete_perez Forista Legendario

    Registrado:
    21 Ene 2015
    Mensajes:
    10.629
    Me Gusta:
    12.235
    Modelo:
    Ex 535i E39
    [​IMG]

    Funcionar funciona y con la librería de prueba se mueve al principio conecte al revés una de la bobinas y lo único que hacía era vibrar, después de repasar y corregir el error empezó a moverse ahora me falta averiguar porqué se mueve lento , intento subir las revoluciones y vario los pasos del motor pero no se como subir la velocidad o hacer que haga distintas cosas salvo cuando cambio los pines de la placa

    Me va a tocar estudiármelo a fondo y hacer muchas pruebas
     
    A Tizon y pasko les gusta esto.
  29. pasko

    pasko Forista Senior

    Registrado:
    21 Sep 2017
    Mensajes:
    4.203
    Me Gusta:
    10.200
    Modelo:
    F45 - K54
    Hola.

    Vaya pinta tiene eso!

    Si nos dices qué librerías utilizas para el control del paso-a-paso, a lo mejor te podemos ayudar con la velocidad de giro (o a lo mejor no :D). Cuantos más ojos, mejor!

    Saludos.
     
    A Tizon le gusta esto.
  30. josete_perez

    josete_perez Forista Legendario

    Registrado:
    21 Ene 2015
    Mensajes:
    10.629
    Me Gusta:
    12.235
    Modelo:
    Ex 535i E39
    Estoy usando el ejemplo que viene como Stepper one revolution es de la única manera que consigo hacer que se mueva

    Luego me falta saber como puñetas se mete un archivo hex que es el que comunica la placa con el motor y y para que el calibrador me lo reconozca pero no hay manera o soy mu tonto o en algún sitio la lío

    Uso un programa llamado xloader, cargo el archivo hex pero cuando le doy a subir a la placa esta hace un reseteo y se cambia de puerto unos Segundos, luego se queda colgado y no va ni patras
     
    A pasko le gusta esto.

Compartir esta página