TABLERO LCD // LUCES AUTOMÁTICAS con Arduino // Neon EV Ep 11

แชร์
ฝัง
  • เผยแพร่เมื่อ 22 ม.ค. 2025

ความคิดเห็น • 28

  •  4 ปีที่แล้ว +2

    Excelente video, te quedó muy bien presentados los instrumentos! 👏👏

  • @antonioreyes1951
    @antonioreyes1951 ปีที่แล้ว +1

    wooooooow, te quedó genial
    tendrás la simulación?

  • @eduardobolanos9171
    @eduardobolanos9171 ปีที่แล้ว +1

    Hola, que gran trabajo, quiero ver la velocidad como en el minuto 4:07 y que me cuente los kilómetros sin que se borren aunque desconecten la batería, para poderle dar mantenimiento a mi vehículo, es una camioneta que se le cambio motor y transmisión, me podrías orientar como hacer solo esa parte por favor. ya vi que el sensor es de efecto hall.

    • @EliudUrba
      @EliudUrba  ปีที่แล้ว +1

      Hola Eduardo gracias, puedes utilizar la función EEPROM.put, y te permite almacenar datos en la memoria no volátil, solo cuida de que el guardado sea cada minuto o más para que no consumas los ciclos de vida de la memoria, en mi caso lo tengo cada minuto, y para recuperar la distancia total recorrida y almacenada puedes usar la función EEPROM.get. En la pagina de arduino viene mejor explicado como usar ambas funciones. Saludos amigo

  • @Christopher-kp4nx
    @Christopher-kp4nx ปีที่แล้ว +1

    Hola , se puede hacer solo esa funcion de avanzar 10 metros y que se cierren los seguros?

    • @EliudUrba
      @EliudUrba  ปีที่แล้ว

      Si, o al pasar de 15 km/hr también se podría, por distancia o por velocidad.

    • @Christopher-kp4nx
      @Christopher-kp4nx ปีที่แล้ว

      @@EliudUrba y eso como se podria hacer?

    • @EliudUrba
      @EliudUrba  ปีที่แล้ว

      @@Christopher-kp4nx Que tienes en mente hacer, o que llevas de tu proyecto? El código sería más o menos como el siguiente:
      void PUERTAS () {
      if ((DIST_PUERTA >= 0.01)&& (DIST

    • @Christopher-kp4nx
      @Christopher-kp4nx ปีที่แล้ว

      @@EliudUrba basicamente busco automatizar mi auto , como es uno de los 90s no trae funciones automáticas como esa. Tambien queria ver si se puede hacer algun tipo de barrido de agujas al abrir switch con arduino.

  • @abrahamalvarez2578
    @abrahamalvarez2578 4 ปีที่แล้ว +1

    Están excelentes esos instrumentos se ve que le sabes muy bien a todo lo arduino, gran trabajo

    • @EliudUrba
      @EliudUrba  4 ปีที่แล้ว

      Gracias, ahora vamos a instalarlo en el coche.

  • @JohannPerezE
    @JohannPerezE 4 ปีที่แล้ว +1

    Wow, qué cool. Haría algo así para mi carro... SI TUVIERA UNO!

    • @EliudUrba
      @EliudUrba  4 ปีที่แล้ว

      Gracias, si vieras el cogido te llevarías las manos a la cabeza con tantos errores, pero funcionó!!

    • @JohannPerezE
      @JohannPerezE 4 ปีที่แล้ว +1

      @@EliudUrba Jaja, el día que vayas a vender tu código, lo optimizas. Si es para tí sólo, con que funcione vale 😜

    • @franciscocontreras6317
      @franciscocontreras6317 3 ปีที่แล้ว

      @@EliudUrba yo quisiwra uno haci para mi moto
      Que me marque rpm, kilometros por hora, temperatura, hora vivel de gasolina

  • @lucianolobo8041
    @lucianolobo8041 10 หลายเดือนก่อน +1

    Genial tu proyecto podrias facilitar el diagrma y codigo ? Yo estoy con un proyecto que se complementaria podriamos compartir proyectos .
    Si proyecto se basa en el funcionamiento del kit boton start stop adapyable a autos sin ecu basado en arduino mi limitacion radica en que no soy un experto en programacion y me baso a prueva y error

    • @EliudUrba
      @EliudUrba  10 หลายเดือนก่อน +1

      Hola, a día de hoy con ChatGPT se puede desarrollar buenos proyectos, ya lo puse en práctica mejorando el código de ese proyecto de hace 4 años (Por lo que ya no tiene sentido que te comparta el código viejo) . Te recomiendo que busques videos de Arduino + ChatGPT. Saludos

    • @lucianolobo8041
      @lucianolobo8041 8 หลายเดือนก่อน +1

      @@EliudUrba estuve probando ChatGPT pero me da mas problemas que soluciones. si cuentas con tu código aun podrías compartírmelo? o alguno mas actual que tengas como para partir de alguna base....

    • @EliudUrba
      @EliudUrba  8 หลายเดือนก่อน

      @@lucianolobo8041
      #include // EEPROM library
      #include
      #include
      U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8);
      /*-----------display-----------
      #include
      int SCLK = 7;
      int RCLK = 6;
      int DIO = 5;
      TM74HC595Display disp(SCLK, RCLK, DIO);
      unsigned char LED_0F[29];
      -----------display-----------
      */
      volatile unsigned long lastturn, time_press;
      volatile unsigned long lastturnodo;
      //volatile unsigned long TIMEH;
      //volatile float KMS;
      volatile float SPEED;
      volatile float SPEEDMAX;
      //volatile float SPEEDPROM;
      volatile float DISTV=0; //Distancia viaje
      volatile float DIST; //Distancia odometro
      volatile boolean eeprom_flag;
      boolean flag;
      float w_length = 0.22; // un giro de rueda equivale a 8 tiks, cada tik equivale a 0.22 metros
      /*---------filtros de salida de velocidad */
      float Y = 0.0;
      float ALPHA = 0.14; // Cercano a 0 la respuesta es lenta, en 0.20 la respuesta es media mientras que en 0.50 la respuesta es rapida, casi similar a la señal.
      float S = Y ;

      char VELOCIDAD [5];
      char VELMAX [10];
      //char VELPROM [15];
      char DISTANCIAV [20];
      char DISTANCIA [25];

      float DIST_MEMORIA;
      void setup() {
      Serial.begin(9600); // configure serial for debug
      u8g2.begin();
      u8g2.enableUTF8Print();
      u8g2.setFont(u8g2_font_luBIS19_tf); // u8g2_font_t0_22_mf
      //u8g2.setFont(u8g2_font_VCR_OSD_tf);
      //u8g2.setFont(u8g2_font_logisoso16_tf);
      //u8g2.setFont(u8g2_font_luRS18_tr);
      u8g2.setColorIndex(1);
      u8g2.firstPage();
      do {
      intro();
      } while( u8g2.nextPage() );

      attachInterrupt(digitalPinToInterrupt(3), sens, RISING); // hall sensor interrupt
      // pinMode(2, INPUT); // boton reset odometro
      // pinMode(5, OUTPUT); // control puertas
      // pinMode(6, OUTPUT); // control bomba hidraulica
      // digitalWrite (PUERTA, HIGH); // high es igual a apagado - low es igual a encendido
      // digitalWrite (BOMBA, LOW); // high es igual a apagado - low es igual a encendido
      delay(5000);

      // DIST_PUERTA = 0;
      //DIST_MEMORIA = 9106.1;
      //EEPROM.put (2, DIST_MEMORIA);
      DIST = EEPROM.get(2, DIST_MEMORIA); // remember some distance
      }
      void sens() {
      if (millis() - lastturn > 7) {
      SPEED = w_length / ((float)(millis() - lastturn) / 1000) * 3.6; // calculate speed
      lastturn = millis(); // remember time of last revolution
      DISTV = DISTV + w_length / 1000;
      // DIST = DIST + w_length / 1000; // calculate distance
      }
      }
      void loop() {
      if ((millis() - lastturn) > 500) { // if there is no signal more than 1 seconds
      SPEED = 0; // so, speed is 0
      }

      Y = SPEED ;
      S = (ALPHA * Y) + ((1-ALPHA)*S);
      if (S>SPEEDMAX){

      SPEEDMAX = S;
      }

      CONVERTIR();
      u8g2.firstPage();
      do {
      draw();
      } while( u8g2.nextPage() );
      DIST_MEMORIA = DIST + DISTV;
      if ((millis() - lastturnodo) > 30000) { // Guarda la distancia cada 30 segundos para no gastar la memoria del arduino

      EEPROM.put(2, DIST_MEMORIA); // write ODO in EEPROM

      lastturnodo = millis();
      }
      }

      void draw(){
      u8g2.drawFrame(0,0,128,64);
      u8g2.setFont(u8g2_font_streamline_computers_devices_electronics_t); //u8g2_font_emoticons21_tr
      u8g2.drawStr( 2, 33,"1");
      u8g2.setFont(u8g2_font_fub30_tn);
      u8g2.drawStr( 28, 36, VELOCIDAD);
      u8g2.setFont(u8g2_font_t0_11_tf);
      u8g2.drawStr(94, 33, "km/h");
      u8g2.drawFrame(0,39,128,14);
      u8g2.drawStr(2,50, "Vmax: ");
      u8g2.drawStr(37, 50, VELMAX);
      u8g2.drawStr(60, 50, "km/h");
      // u8g2.drawStr(60,50, "Vprom: ");
      // u8g2.drawStr(101, 50, VELPROM);
      //u8g2.drawStr(55, 50, "km/h");
      u8g2.drawFrame(0,52,128,12);
      u8g2.drawStr(2,62, "D1: ");
      u8g2.drawStr(25, 62, DISTANCIAV);
      //u8g2.drawStr(50,62, "km");

      u8g2.drawStr(58,62, "ODO: ");
      u8g2.drawStr(82, 62, DISTANCIA);
      // u8g2.drawStr(117,63, "km");
      }
      void CONVERTIR(){
      dtostrf(S, 3, 0, VELOCIDAD);
      dtostrf(SPEEDMAX, 3, 0, VELMAX);
      //dtostrf(SPEEDPROM, 3, 1, VELPROM);

      dtostrf(DISTV, 5, 2, DISTANCIAV);
      dtostrf(DIST_MEMORIA, 5, 1, DISTANCIA);
      }
      void intro() {
      u8g2.setFont(u8g2_font_luBIS19_tf); //u8g2_font_bubble_tr , u8g2_font_luBIS19_tf
      u8g2.drawStr(10, 26, "DODGE");
      u8g2.drawStr(0, 58, "NEON EV");
      }

    • @EliudUrba
      @EliudUrba  8 หลายเดือนก่อน

      Avisame cuando lo copies para poder borrarlo

  • @kukanol
    @kukanol 4 ปีที่แล้ว +1

    Muy bueno

    • @EliudUrba
      @EliudUrba  4 ปีที่แล้ว

      Hola Jose, estoy buscando un bms con pantalla LCD para adaptarla también al tablero, crees que sea posible?? Saludos!

  • @olgaluciacamacho4054
    @olgaluciacamacho4054 3 ปีที่แล้ว

    Podrías pasar el código y cicuito

    • @EliudUrba
      @EliudUrba  2 ปีที่แล้ว +5

      #include // EEPROM library
      #include
      #include
      U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8);
      volatile unsigned long lastturn, time_press;
      volatile float SPEED;
      volatile float DIST_PUERTA; //Distancia para puertas
      volatile float DIST; //Distancia odometro
      volatile boolean eeprom_flag;
      float w_length = 0.231; // un giro de rueda equivale a 8 tiks, cada tik equivale a 0.231 metros
      boolean flag;
      boolean state, button;
      int BOTON_RESET = 2;
      int PUERTA = 5;
      int BOMBA = 6;
      /*---------filtros de salida de velocidad */
      float Y = 0.0;
      float ALPHA = 0.25;
      float S = Y ;
      char VELOCIDAD [5];
      char DISTANCIA [5];
      void setup() {
      Serial.begin(9600); // Poder calibrar con la pc
      u8g2.begin();
      u8g2.enableUTF8Print();
      u8g2.setFont(u8g2_font_t0_22_mf);
      //u8g2.setFont(u8g2_font_VCR_OSD_tf);
      //u8g2.setFont(u8g2_font_logisoso16_tf);
      //u8g2.setFont(u8g2_font_luRS18_tr);
      u8g2.setColorIndex(1);
      u8g2.firstPage();
      do {
      intro();
      } while( u8g2.nextPage() );
      attachInterrupt(digitalPinToInterrupt(3), sens, RISING); // paso de bajo a alto del sensor hall
      pinMode(2, INPUT); // boton reset odometro
      pinMode(5, OUTPUT); // control puertas
      pinMode(6, OUTPUT); // control bomba hidraulica
      digitalWrite (PUERTA, HIGH);
      digitalWrite (BOMBA, HIGH);
      delay(7000);
      DIST_PUERTA = 0;
      DIST = (float)EEPROM.read(0) / 10.0; // Memorizar la distancia
      }
      void sens() {
      if (millis() - lastturn > 2) { // Filtro de ruido en la linea
      SPEED = w_length / ((float)(millis() - lastturn) / 1000) * 3.6; // calculate speed
      lastturn = millis(); // tiempo entre pasos bajo-alto del sensor hall
      DIST_PUERTA = DIST_PUERTA + w_length / 1000;
      DIST = DIST + w_length / 1000; // Sumas la distancia, en mi caso 23 centímetros cada paso bajo-alto
      }
      eeprom_flag = 1;
      }
      void loop() {
      Serial.print(" Dist: ");
      Serial.print( DIST );
      Serial.print( " km");
      Serial.print(" Vel_filtro: ");
      Serial.print( S );
      Serial.println( " km/h");
      PUERTAS();
      //CONTROL_BOMBA (); // Lo tengo desactivado, pero podrías tener un relay que active alguna función, una alarma en caso de rebasar el limite de velocidad, etc.
      if ((millis() - lastturn) > 1000) { // if there is no signal more than 1 seconds
      SPEED = 0; // so, speed is 0
      if (eeprom_flag) { // if eeprom flag is true
      EEPROM.write(0, (float)DIST * 10.0); // write ODO in EEPROM
      eeprom_flag = 0; // flag down. To prevent rewritind
      }
      }
      BOTON_RESET = digitalRead (2);
      if (BOTON_RESET == HIGH) { // Borras la distancia del odometro
      DIST = 0; //
      }
      Y = SPEED ;
      S = (ALPHA * Y) + ((1-ALPHA)*S); // suaviza el aumento o decremento de la velocidad, dando tiempo a tener números legibles en el tablero.
      CONVERTIR();
      u8g2.firstPage();
      do {
      draw();
      } while( u8g2.nextPage() );
      }
      void draw(){
      u8g2.drawFrame(0,0,128,42);
      u8g2.drawFrame(0,44,128,20);
      u8g2.setFont(u8g2_font_t0_15b_mf);
      u8g2.drawStr(5, 13, "Velocidad");
      u8g2.setFont(u8g2_font_fub20_tf);
      u8g2.drawStr( 15, 38, VELOCIDAD);
      u8g2.setFont(u8g2_font_t0_15b_mf);
      u8g2.drawStr(90, 38, "km/h");
      u8g2.drawStr(8,59, "Dist: ");
      u8g2.drawStr(55, 59, DISTANCIA);
      u8g2.drawStr(105,59, "km");
      }
      void PUERTAS () {
      if ((DIST_PUERTA >= 0.01)&& (DIST = 5) {
      digitalWrite (BOMBA, LOW);
      }
      else {digitalWrite (BOMBA, HIGH);
      }
      }
      void CONVERTIR(){
      dtostrf(S, 3, 0, VELOCIDAD);
      dtostrf(DIST, 3, 2, DISTANCIA);
      }
      void intro() {
      u8g2.drawFrame(0,0,128,64);
      u8g2.setFont(u8g2_font_fub20_tf);
      u8g2.drawStr(14, 26, "DODGE");
      u8g2.drawStr(2, 58, "NEON EV");
      }
      La señal del sensor la haces como un arreglo de boton pull up, en mi caso con una resistencia de 1K, con la de 10K no me funcionaba muy bien.
      Saludos.

  • @rubenpalacios3376
    @rubenpalacios3376 2 ปีที่แล้ว +1

    Cuánto me cuesta , que me hagas uno para mi auto ? Gracias bro

  • @energiaalternativa8894
    @energiaalternativa8894 2 ปีที่แล้ว

    Hola, excelente presentación tengo el código, podrías proporcionarnos el diagrama de conexión arduino, pantalla y gps, de antemano muchas gracias