Tabla de contenido:

Velocímetro de coche RC en funcionamiento: 4 pasos (con imágenes)
Velocímetro de coche RC en funcionamiento: 4 pasos (con imágenes)

Video: Velocímetro de coche RC en funcionamiento: 4 pasos (con imágenes)

Video: Velocímetro de coche RC en funcionamiento: 4 pasos (con imágenes)
Video: Por que no funciona el velocímetro kia - hyundai ? reparar velocimetro kia - hyundai, ubicacion VSS 2024, Septiembre
Anonim
Velocímetro de coche RC de trabajo
Velocímetro de coche RC de trabajo

Este es un proyecto corto que creé como parte de una construcción RC más grande de un Land Rover ligero. Decidí que me apetecía tener un velocímetro que funcionara en el tablero, pero sabía que un servo no lo cortaría. Solo había una opción razonable: ¡implementar el arduino!

Para empezar, un poco de experiencia… No soy una persona de codificación o electrónica. Todavía pienso en la electricidad en términos de flujo de agua y las resistencias me desconciertan un poco. Dicho esto, si incluso yo pude hacer que esto funcione, ¡tú también deberías poder hacerlo!

LISTA DE PARTES:

Microcontrolador: utilicé un chip ATTiny85, que costaba alrededor de £ 1 cada uno.

Programador de microcontroladores: para poder colocar el código en el chip, necesita una forma de programarlo. Con arduino normal, esto es solo un cable USB, pero para el chip ATTiny, necesita algo extra. Puede usar otro arduino para hacer esto o, como yo, puede usar un programador Tiny AVR de Sparkfun.

learn.sparkfun.com/tutorials/tiny-avr-prog…

Recomendaría esto, ya que he intentado programarlos con varios métodos y este es el más fácil. La placa es un poco cara, pero es una buena inversión si haces muchos proyectos ATTiny.

Enchufe de chip de 8 pines: si coloca el chip en un enchufe en lugar de soldarlo directamente, puede permitirse algunos errores en el montaje. Hablando por experiencia, nadie quiere desoldar chips para reprogramarlos.

Condensador: Se utiliza un condensador de desacoplamiento de 100nF (código 104). No entiendo muy bien por qué, pero leí que los condensadores de desacoplamiento son importantes en Internet, por lo que debe ser cierto …

Resistencia: se utiliza una resistencia de 10 kΩ para bajar la línea hacia el arduino. De nuevo, otro misterio más de la electrónica.

Perfboard / Stripboard: Un zócalo sobre el que montar su circuito.

Alambre enrollado: El alambre revestido normal es demasiado grueso para soldarlo en el motor. El uso de alambre esmaltado fino reducirá la tensión en los terminales del motor y hará su vida mucho más fácil.

Servo Wire: Una cinta de tres hilos que termina en un enchufe hembra JR de 3 pines. Obtuve el mío de un servo quemado que estaba 'modificando'.

Motor paso a paso: utilicé un motor paso a paso bipolar Nidec de 6 mm. Cualquier pequeño paso a paso debería funcionar, aunque manténgalos pequeños, ya que el paso a paso se conduce directamente desde el Arduino.

Pines de cabecera: no es esencial, pero si conecta su paso a paso a 4 pines de cabecera y coloca un enchufe en su circuito, puede desenchufar fácilmente su tablero para facilitar la instalación.

Computadora: para programar su placa, necesitará una computadora. Posiblemente con el IDE de Arduino. Y tal vez un cable USB. Si también tiene un cable de alimentación, entonces aún mejor.

Paso 1: el sistema

El esquema básico del sistema que creé fue un método mediante el cual la señal de Modulación de ancho de pulso (PWM) proveniente del receptor RC se convierte en un barrido de motor paso a paso a través de un microcontrolador ATTiny 85 (uC).

Aquí hay un recurso sobre señales PWM y RC, pero para replicar esto no es necesario comprenderlo estrictamente.

en.wikipedia.org/wiki/Servo_control

El ATTiny es mi sabor favorito de Arduino porque es pequeño y todavía tiene suficientes pines de E / S para hacer cosas básicas, por lo que encaja perfectamente en modelos pequeños y proyectos RC. La principal desventaja del ATTiny es que requiere un poco más de configuración para programar uno, pero una vez que lo tienes configurado, son tan baratos que puedes comprar montones de ellos para todo tipo de proyectos.

El tamaño del cuadrante del velocímetro es demasiado pequeño para tener un motorreductor con retroalimentación, por lo que para tener una respuesta proporcional se tuvo que usar un motor paso a paso. Un motor paso a paso es un motor que se mueve en cantidades discretas (¡o pasos …!), Lo que lo hace ideal para un sistema sin retroalimentación como este. La única advertencia es que los 'pasos' harán que el movimiento resultante sea desigual en lugar de suave. Si obtiene un paso a paso con suficientes pasos por rotación, eso no se nota, pero con el paso a paso que usé en este proyecto con solo 20 pasos en una rotación completa, el salto de ángulo es bastante malo.

El sistema, en el encendido, hará funcionar el paso a paso hacia atrás durante dos revoluciones, para poner a cero la aguja. El velocímetro necesita un pasador de apoyo donde desea que esté la marca cero, o simplemente girará para siempre. Luego, asigna las señales PWM de avance y retroceso a un número determinado de pasos del motor. Fácil, ¿verdad…?

Paso 2: el software

Descargo de responsabilidad: no soy programador. Para este proyecto soy el equivalente digital del Dr. Frankenstein, ensamblando algo que funciona a partir de varios bits de código encontrados.

Entonces, mi más sincero agradecimiento a Duane B, quien creó el código para interpretar las señales RC:

rcarduino.blogspot.com/

Y a Ardunaut, quien hizo el código para ejecutar un paso a paso como un medidor analógico:

arduining.com/2012/04/22/arduino-driving-a…

Y a ambos, mis más sinceras disculpas por lo que le hice a su código.

Ahora que está fuera del camino, esto es lo que debe cargar en ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - use el número de interrupción en attachInterrupt # define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - use el número de PIN en digitalRead #define NEUTRAL_THROTTLE en 1500 // esta es la duración del acelerador neutral en un coche RC eléctrico #define UPPER_THROTTLE 2000 // esta es la duración en microsegundos del acelerador máximo en un coche RC eléctrico #define LOWER_THROTTLE 1000 // esta es la duración en microsegundos del acelerador mínimo en un coche RC eléctrico #define DEADZONE 50 // esta es la zona muerta del acelerador. La zona muerta total es el doble. #include #define PASOS 21 // pasos por revolución (limitado a 315 °) Cambie esto para ajustar el recorrido máximo del velocímetro. #define COIL1 3 // Pasadores de bobina. El ATTiny usa los pines 0, 1, 3, 4 para el paso a paso. El pin 2 es el único pin que puede manejar interrupciones, por lo que debe ser la entrada. #define COIL2 4 // Intente cambiarlos si el motor paso a paso no funciona correctamente. #define COIL3 0 #define COIL4 1 // crea una instancia de la clase stepper: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Posición en pasos (0-630) = (0 ° -315 °) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; Float Resetcounter = 10; // tiempo para reiniciar mientras está en ralentí int Resetval = 0; volatile int ThrottleIn = LOWER_THROTTLE; StartPeriod largo sin firmar volátil = 0; // establecido en la interrupción // podríamos usar nThrottleIn = 0 en bucle en lugar de una variable separada, pero usando bNewThrottleSignal para indicar que tenemos una nueva señal // es más claro para este primer ejemplo void setup () {// decirle al Arduino queremos que se llame a la función calcInput siempre que INT0 (pin digital 2) cambie de HIGH a LOW o LOW a HIGH // captar estos cambios nos permitirá calcular cuánto tiempo está el pulso de entrada attachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // ajusta la velocidad del motor a 30 RPM (360 PPS aprox.). stepper.step (PASOS * 2); // Restablecer posición (X pasos en sentido antihorario). } bucle vacío () {Resetval = milis; for (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = map (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Resetval = 0; } // Mapeo inverso else if (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Resetval = 0; } // Fuera del rango superior else if (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Resetval = 0; } // Fuera del rango inferior else if (ThrottleInAvg Resetcounter) {stepper.step (4); // Estoy tratando de decirle al paso a paso que se reinicie si la señal RC está en la zona muerta durante mucho tiempo. No estoy seguro de si esta parte del código realmente funciona. }} int val = VELOCIDAD; // obtener el valor del potenciómetro (rango 0-1023) val = map (val, 0, 255, 0, STEPS * 0.75); // mapea el rango de potenciómetros en el rango de pasos. if (abs (val - pos)> 2) {// si la diferencia es mayor que 2 pasos. if ((val - pos)> 0) {paso a paso.paso (-1); // mover un paso a la izquierda. pos ++; } si ((val - pos) <0) {paso a paso.paso (1); // mover un paso a la derecha. pos--; }} // retraso (10); } void calcInput () {// si el pin es alto, es el comienzo de una interrupción if (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// obtén el tiempo usando micros - cuando nuestro código esté realmente ocupado, esto se volverá inexacto, pero para la aplicación actual es // fácil de entender y funciona muy bien StartPeriod = micros (); } else {// si el pin está bajo, es el flanco descendente del pulso, así que ahora podemos calcular la duración del pulso restando el // tiempo de inicio ulStartPeriod del tiempo actual devuelto por micros () if (StartPeriod) {ThrottleIn = (int) (micros () - StartPeriod); StartPeriod = 0; }}}

Consulte esto para obtener más información sobre la programación de un ATTiny85:

learn.sparkfun.com/tutorials/tiny-avr-prog…

Paso 3: el hardware

El hardware
El hardware
El hardware
El hardware
El hardware
El hardware

Consulte el diagrama del circuito para construir el circuito. La forma en que lo ensambles depende de ti, pero te sugiero que uses un poco de placa / placa perfilada que se usa para la creación de prototipos de placas de circuito y que montes el chip en un zócalo.

C1 = 100nF

R1 = 10 kΩ

El condensador debe montarse lo más cerca posible del chip para que sea más efectivo.

Cuando suelde los cables esmaltados al motor, tenga mucho cuidado, ya que a los terminales de los motores les gusta romperse y cortar el cable de la bobina al motor. Para remediar esto, una buena solución es soldar los cables y luego poner una gran gota de epoxi de 2 partes sobre la junta, dejar que se cure y luego retorcer los cables. Esto reduce la tensión en las uniones terminales individuales y debería evitar que se rompan. Si no lo hace, se romperán en el momento menos conveniente, garantizado.

Si crea el conector de clavija del cabezal y configura las clavijas de la siguiente manera: [Ca1, Cb1, Ca2, Cb2] con Ca1 en lugar de la bobina A, cable 1, etc. Esto le permite cambiar la dirección de rotación del medidor intercambiando el enchufe alrededor.

El medidor necesitará un tope final para calibrar la posición cero contra. Recomendaría hacer la aguja de metal si es posible. Esto evita que se flexione cuando golpea el tope. Una forma de colocar la aguja en una buena posición es pegar temporalmente la aguja al eje, encender el módulo, dejarlo descansar y luego quitar y volver a pegar la aguja en el eje, con la aguja apoyada contra el parada final. Esto alinea la aguja con el engranaje magnético del motor y asegura que su aguja siempre debe descansar contra el tope final.

Paso 4: Epílogo

Esperamos que haya disfrutado de este breve instructivo y lo haya encontrado útil. Si construye uno de estos, ¡hágamelo saber!

¡Buena suerte!

Recomendado: