Charly F1 v1.1 – Autito RC Bluetooth con Arduino

Una versión ligeramente mejorada del Charly F1 ( Ahora va casi todo soldado en una placa )

*Para una nueva versión de este proyecto haz click aquí

En esta versión del charly f1 hice el circuito en una placa perforada y eliminé el microcontrolador que sobraba. Además cambié el driver L298N por el SN754410NE de Texas Instruments, ya que este último usa un empaquetado DIP que facilita su manipulación y además incluye los diodos para la protección del motor (lo que me ahorra aún más espacio en la placa).  La otra alternativa era utilizar un L293D el cual también tiene empaquetado DIP e incluye diodos, pero este solo puede manejar hasta 600mA a diferencia del SN754410NE  que puede manejar hasta 1000 mA.

Adicionalmente agregué un circuito de carga de baterías de litio hecho por sparkfun para recargar las 2 baterías mediante usb, eso si tuve que adicionar un switch de 3 posiciones para seleccionar una batería a la vez, ya que el circuito cargador solo soporta una batería.

Lista de materiales

Componentes:
– 1 Microcontrolador AVR Atmega328p
– 1 zócalo de 28 pines
– 1 Driver Puente H SN754410NE
– 1 Motor DC
– 1 Motor SERVO
– 2 Reguladores de voltaje lm7805
– 4 Condensadores electrolíticos de 10uf de 16v o +
– 4 Condensadores cerámicos de 0,1uf de 16v o +
– 1 Condensador electrolítico de 100uf de 16v o +
– 1 Módulo Bluetooth HC-06
– 2 Baterías de litio de 3,7v
– 1 Circuito cargador de baterías de litio
– 1 Switch de 3 posiciones
– 1 Interruptor
– 1 led de 3v
– 1 resistencia 220 ohm
– 1 placa perforada para prototipado
– cables
Herramientas:
– Programador AVR USBasp
– Cautín
– Soldadura
– Pela cables

Esquema del circuito

Para agrandar las fotos haz click en ellas, el diagrama no incluye el cargador de batería de sparkfun con el switch de 3 posiciones y sus respectivas conexiones:

_f1_1-1-1024x671

Foto del circuito real donde si se aprecia el cargador de batería con el switch de 3 posiciones, el interruptor de encendido, el circuito de control y los motores:

DSC00473

Programar un atmega con el IDE de Arduino

Para poder programar el microcontrolador directamente desde el IDE de arduino y usando “lenguaje arduino”, fue necesario agregar como “Board” al atmega328p:

atmega

Para lograr esto se debe editar el archivo boards.txt ubicado en “/hardware/arduino” y agregar el siguiente código:

atmega328bb.name=ATmega328p on a breadboard (8 MHz internal clock)
atmega328bb.upload.protocol=stk500
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.path=arduino:atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard

Una vez hecho esto el programa tiene las configuraciones necesarias para setear los fuses del microcontrolador de tal manera que podamos usarlo con el cristal interno. Asi que quemamos el bootloader desde el programa con un programador AVR como el USBasp y luego de esto podremos programar el micro directamente desde el IDE de arduino y sin necesidad de cristal externo conectado al microcontrolador. Para quemar los micros recomiendo usar el USBasp ya que es compatible con el IDE de arduino y tan solo deberemos seleccionar la opción “cargar usando programador” cada vez que queramos quemar codigo en el micro.

Programa de control

El programa de control sigue siendo el mismo sin cambios.

El programa de control lo hice en Visual Studio 2010 y básicamente lo que hace es conectarse al puerto COM del bluetooth que esta emparejado al modulo bluetooth del autito y enviar mediante comunicación serial diferentes caracteres según el botón que apretemos. Cada botón de la interfaz envía un caracter distinto el cual a su vez activa una función diferente en el microcontrolador.

f1

Descargar

El código del programa está escrito en VB.net y funciona principalmente gracias al uso de la clase SerialPort:

Imports System
Imports System.Threading
Imports System.IO.Ports
Imports System.ComponentModel

Public Class Form1
    '------------------------------------------------
    Dim myPort As Array
    Delegate Sub SetTextCallback(ByVal 1 As String)

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        myPort = IO.Ports.SerialPort.GetPortNames()
        ComboBox1.Items.AddRange(myPort)

        Button2.Enabled = False
        Button1.Enabled = False
        Button4.Enabled = False
        Label4.Text = "OFF"
        Button5.Enabled = False
        Button6.Enabled = False
        Button7.Enabled = False
        Button3.Enabled = False
        Button8.Enabled = False
        TrackBar1.Enabled = False

    End Sub
    Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If e.KeyCode = Keys.E Then
            Button2.PerformClick()
        End If
        If e.KeyCode = Keys.G Then
            Button3.PerformClick()
        End If
        If e.KeyCode = Keys.R Then
            Button5.PerformClick()
        End If
        If e.KeyCode = Keys.I Then
            Button7.PerformClick()
        End If
        If e.KeyCode = Keys.J Then
            Button6.PerformClick()
        End If
        If e.KeyCode = Keys.L Then
            Button8.PerformClick()
        End If
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        SerialPort1.PortName = ComboBox1.Text
        SerialPort1.BaudRate = ComboBox2.Text
        SerialPort1.Open()
        Button1.Enabled = False
        Button2.Enabled = True
        Button4.Enabled = True
        Label4.Text = "OK"
        Button5.Enabled = True
        Button6.Enabled = True
        Button7.Enabled = True
        Button3.Enabled = True
        Button8.Enabled = True
        TrackBar1.Enabled = True

    End Sub

    Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
        SerialPort1.Close()
        Button1.Enabled = True
        Button2.Enabled = False
        Button4.Enabled = False
        Label4.Text = "OFF"
        Button5.Enabled = False
        Button6.Enabled = False
        Button7.Enabled = False
        Button3.Enabled = False
        Button8.Enabled = False
        TrackBar1.Enabled = False
        Label11.Text = "-"
        Label12.Text = "-"
        Label13.Text = "-"
        Label14.Text = "-"
    End Sub

    Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
        Button1.Enabled = True
    End Sub
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        If TrackBar1.Value > 0 Then
            SerialPort1.Write("5")
            Label11.Text = "Encendido"
            Label12.Text = "Hacia Adelante"
        End If
    End Sub

    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        SerialPort1.Write("6")
        Label11.Text = "Apagado"
        Label12.Text = "Ninguno"
    End Sub

    Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
        If TrackBar1.Value > 0 Then
            SerialPort1.Write("4")
            Label11.Text = "Encendido"
            Label12.Text = "Hacia Atrás"
        End If
    End Sub

    Private Sub Button8_Click(sender As System.Object, e As System.EventArgs) Handles Button8.Click
        SerialPort1.Write("3")
        Label13.Text = "Encendido"
        Label14.Text = "Derecha"
    End Sub

    Private Sub Button7_Click(sender As System.Object, e As System.EventArgs) Handles Button7.Click
        SerialPort1.Write("2")
        Label13.Text = "Encendido"
        Label14.Text = "Centro"
    End Sub

    Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click
        SerialPort1.Write("1")
        Label13.Text = "Encendido"
        Label14.Text = "Izquierda"
    End Sub

    Private Sub TrackBar1_Scroll_1(sender As System.Object, e As System.EventArgs) Handles TrackBar1.Scroll
        If TrackBar1.Value = 0 Then
            SerialPort1.Write("0")
            Label11.Text = "Apagado"
        End If

        If TrackBar1.Value = 1 Then
            SerialPort1.Write("7")
        End If

        If TrackBar1.Value = 2 Then
            SerialPort1.Write("8")
        End If

        If TrackBar1.Value = 3 Then
            SerialPort1.Write("9")
        End If
    End Sub
End Class

Código arduino control de motores

El código en arduino también se mantuvo sin cambios.

Este es el código en arduino que va en el atmega328p que controla los motores, básicamente lo que hace es esperar por un caracter en el puerto serial, si este coincide con el caracter pedido por alguna de las condiciones (if), el código de la condición se ejecutará provocando un cambio en alguno de los motores, este ciclo se repite infinitamente permitiéndonos controlar el autito en diferentes direcciones.

#define S1 12                         //Pines a utilizar
#define S2 11
#define PWMdc 6
#define PWMservo 9

int valor = 0;                        // Variable que lee los datos llegado por comunicacion serial
int izq = 120;                        // Valor adecuado para girar el servo a la izquierda
int cen = 136;                        // Valor adecuado para poner el servo derecho
int der = 150;                        // Valor adecuado para girar el servo a la derecha
int cero = 0;                         // Velocidad motor DC = 0
int baja = 70;                        // Velocidad baja motor DC
int media = 150;                      // Velocidad media motor DC
int alta = 255;                       // Velocidad alta motor DC

void setup()
{
  pinMode (S1, OUTPUT);               // S1 puente H
  pinMode (S2, OUTPUT);               // S2 puente H
  pinMode (PWMdc, OUTPUT);            // PWM que determina la velocidad del motor DC
  pinMode (PWMservo, OUTPUT);         // PWM que determina el angulo del Servomotor
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available()){
    delay(100);
    while(Serial.available()>0){       //LECTURA SERIAL
      valor=Serial.read();
                                       //DIRECCION SERVO
        if(valor=='1'){
          analogWrite(PWMservo, izq);  // virar a la izquierda
        }
        else if(valor=='2'){
          analogWrite(PWMservo, cen);  // avanzar derecho
        }
        else if(valor=='3'){
          analogWrite(PWMservo, der);  // virar a la derecha
        }
                                       //ESTADOS MOTOR DC
        else if(valor=='4'){
          digitalWrite(S1, LOW);       // Motor hacia adelante
          digitalWrite(S2, HIGH);
        }
        else if(valor=='5'){           // Motor hacia atras
          digitalWrite(S1, HIGH);
          digitalWrite(S2, LOW);
        }
        else if(valor=='6'){           // Frenar Motor
          digitalWrite(S1, HIGH);
          digitalWrite(S2, HIGH);
        }
                                       //VELOCIDAD MOTOR DC
        else if(valor=='7'){
          analogWrite(PWMdc, baja);    //Velocidad baja
        }
        else if(valor=='8'){
          analogWrite(PWMdc, media);   //Velocidad media
        }
        else if(valor=='9'){
          analogWrite(PWMdc, alta);    //Velocidad alta
        }
        else if(valor=='0'){
          analogWrite(PWMdc, cero);    //Cero velocidad
        }

    }
  }
}

Fotos Circuito

DSC00474 DSC00475 DSC00477

Licencia Creative Commons
Charly F1 está distribuido bajo una Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.

  • Maxxy

    A cuanto los vendes?

    • Alex Puerto

      Créate uno, ahí esta toda la info. para hacerlo

  • matias soto

    Charly tu puedes crear lo mismo solo que la descarga sea para tablet o celular ?

    • La próxima versión se podrá controlar desde el celular, saludos!

      • Alfredo Gonzalez

        Espero que lo hagas seria aun mas fantastico

  • putalucho

    usa proteus para el circuito.
    Atte marquito rivera

  • Rob Dot

    Charly, podrías dar una lista especifica de los materiales ? .

    De todas formas gracias por compartir.

    Un abrazo 🙂

    (podrías poner un link para hacer donaciones en $$ o bitcoin 😛 )

    • Listo! lista de materiales agregada, respecto a las donaciones me conformo con que prefieran comprar en mi tienda 🙂 saludos!

  • _s3g1o_

    una pregunta el Microcontrolador AVR Atmega328p se puede programar con arduino insertantodolo en el zocalo que ya esta en el arduino r3 a responde plis

    • Si pero al sacarlo y ponerlo solo en una placa no te va a funcionar, tendrías que ponerle un cristal de 16 mhz y sus respectivos condensadores. Para usarlo sin cristal como lo hago yo debes quemarle un bootloader modificado con los fuses seteados de tal manera que ocupe el reloj interno de 8 mhz, esto lo expliqué en el primer post del charly f1.

      • _s3g1o_

        gracias charly por responder

        El 20 de marzo de 2014, 20:21, Disqus escribió:

      • Armando Shafino

        que tal, saludos desde chihuahua mexico :3 , yo tambien tengo la misma duda, entonces no es recomendable utilizar el micro controlador que biene incluido con el arduino R3?

  • roro89

    Hola, hice otro “control remoto” para Charly F1 como una aplicación de Chrome, la gracia es que es multiplataforma https://github.com/gdgchile/Charly-F1

    Espero que no te moleste que use tu proyecto xD, porfa cuéntame si te funciona. Lo hice para el grupo de desarrolladores de Google de Antofagasta (DGD Antofagasta), es código libre y todo así que haz y deshase con él si quieres. Saludos!

  • Alfredo Gonzalez

    Hola que tal te veo desde Mexico y tengo una pregunta, se puede hacer lo mismo pero cambiar el dispositivo bluetooth por una tarjeta de red inalambrica, que tanto afectaria o no es posible con el tipo de circuito que diseñaste.gracias por al atencion

    • Si, si se puede, utilizar un módulo wifi, el problema es que son muy caros xD

  • Tito

    Charly quisiera q veas una forma de conectar un control remoto en la compu y controlarla desde el ordenador

  • Renato

    Hola, excelente página, quería preguntarte como es que hiciste el sistema de dirección , porfa, y también si uso un micro controlador Atmega 168 no afectara en nada????, ademas porfavor podrías explicarme como conectas el programador AVR USBasp al micro controlador y como lo grabas ?

  • _s3g1o_

    charly hablando de arduino yo estoy subcrito a un canal y ase poco subio un video de como construir uno totalmente funcional con pocas cosas
    ahora la pregunta es podrias construirlo y conectarlo a el auto bluetooth
    aquie te dejo el link del video https://www.youtube.com/watch?v=FGT6g1oZnAM
    si te animas a contruirlo en la descripcion ay tres links que te llevan a su pagina de internet donde compras el set completo de armado y las instrucciones
    posiblemente es mas barato que comprar todo separado
    te recomiendo el canal es muy bueno y hasta la otra 🙂

    p.d : soy el mismo de youtube

    • De hecho el Charly F1 funciona igual, solo que no le puse un conversor serial a USB y por eso es necesario el programador AVR, en todo caso el atmega del Charly F1 está programado de tal forma de usar incluso menos componentes que en ese video, prescindiendo del cristal de quarzo y sus respectivos condensadores. De todas formas no sería mala idea agregar todos los componentes para que el Charly F1 se conectara al pc como un Arduino UNO, sería más facil reprogramarlo. El problema es que subiría el precio del Charly F1.

      • _s3g1o_

        entonces por ejemplo podrias poner cursos como el y poner tu propio set de armado de arduino no ?
        asi la gente tiene por decir uno de prueba

  • Antonio Galvez Galvez

    charly para este proyecto tienes a la ventas todos los materiales electrónicos?
    me interesa crear uno

    • Hola! no, aún no, pero cuando saque la próxima versión pretendo vender un kit con todos los materiales para armarlo y también venderlo armado.

  • Martin Moreno

    hola charly!como estas? espero que bien(:, cuanto me costarían los materiales mas o menos? donde se podrían comprar?, puedes por favor hacer un vídeo de como hacerlo paso a paso , quiero hacerme uno propio espero que no te moleste ,me encantan tus vídeos sigue así eres un grande! saludos…

  • Leo

    Charly, que tal, quisiera comprarte ese autito, me darias alguna direccion de correo para poderte contactar y hablar? Gracias exelente obra!

  • _s3g1o_

    charly como para programar el Atmega328p es recomendable usar el USBasp cuales son las conexiones que se deben acer desde el USBasp hacia el Atmega328p
    puedes responder aqui sergioulloabravo@gmail.com

  • mikelo

    consulta cuanto sale todas las partes (asi como pack) para armar el auto f1

  • alejandro

    cuanto cuesta un panel solar del carro solar mas o menos saben???

  • alejandro

    cuanto cuesta un panel solar del carro y donde lo compro???

  • Mario

    hola que tal,me pregunto cual es tu código para hacer la conexion del bluetooh de la PC al Atmega

  • Agustin Franco Mamani

    hola soy nuevo en ver tus videos pero me gustaria saver si la accion que le mandas al auto lo recibe hay nomas o se demora unos segundos?

    • Los cambios son prácticamente instantáneos, pero el servo tarda un poco más en responder debido a que es de baja calidad, pero aún así no tarda más de un cuarto de segundo en responder.

  • Pablo Muñoz

    Hola charly te queria preguntar si lo vendes y si lo vendes cual es el valor

  • Eric

    Charly o alguno que me de el dato de donde comprar el micro Atmega328p y el Módulo Bluetooth HC-06 por favor 😉

  • Nicolás Baldevenito

    Donde compro todas esas cosas? D:

    • Eric

      En casa royal y olimex encontré gran parte de los materiales. Me falta el bluetooth que x ahora solo he visto en mercado libre y el programador AVR. Espero te sirva 😀

      • Eddy Moncada Garcia

        puedes encontrar todas las cosas por ebay y son muy baratas

  • guillermo crucci

    charly, cuales son los contactos de las baterias de litio para sacar la energia de ellas y para cargarlas respondeme porfavor, lo quiero para hacer un cargador usb para mi celular

  • Un_Hombre_Rudo

    donde se pone el codigo del visualstudio?

  • pablo wurth

    Charly, tengo un problema con el autito, utilicé una batería de 9v, un lm7805, un l293b, un motor dc, un servo, un hc06 y el arduino, pero al conectar todo, el servo se mantiene sonando y se mueve sólo.
    Quisiera saber como contactarte, a ver si me puedes ayudar, de antemano gracias

    • Hola! una batería de 9v entrega muy poca corriente, usa 2 baterías de litio en serie como minimo, si el problema persiste, pon un condensador de 1000uf en la alimentación del servo.

  • Alexis Alejandro Arriagada Sal

    Bro como puedo contactarme contigo quiero hacer uno similar pero no se mucho necesito consejos gran admirador de ti y tus trabajos ❤️❤️❤️

  • JOGA

    amigo tienes red social para hablar necesito un favor hay

  • adolfo lopez

    donde esta el zocalo de 28 pines? o no es necesario y en el diagrama que esta en tu pagina no esta y dime puedo utilizar microcontrolador avr atmega 328p con bootloader Arduino Uno

Subir