Table des matières:

Compteur de vitesse de voiture RC de travail: 4 étapes (avec photos)
Compteur de vitesse de voiture RC de travail: 4 étapes (avec photos)

Vidéo: Compteur de vitesse de voiture RC de travail: 4 étapes (avec photos)

Vidéo: Compteur de vitesse de voiture RC de travail: 4 étapes (avec photos)
Vidéo: accident de voiture en direct c'est violent 😱😱😱 #accident #crash #choc #collision #violent #voiture 2024, Septembre
Anonim
Compteur de vitesse de voiture RC de travail
Compteur de vitesse de voiture RC de travail

Il s'agit d'un court projet que j'ai créé dans le cadre d'une plus grande construction RC d'un Land Rover léger. J'ai décidé que j'avais envie d'avoir un compteur de vitesse fonctionnel dans le tableau de bord, mais je savais qu'un servo ne le couperait pas. Il n'y avait qu'une seule option raisonnable: déployer l'arduino !

Un peu de contexte pour commencer… Je ne suis pas une personne de codage ou d'électronique. Je pense toujours à l'électricité en termes de débit d'eau et je suis un peu mystifié par les résistances. Cela dit, si même moi j'étais capable de faire ce travail, alors vous devriez être capable de le faire aussi !

LISTE DES PIÈCES:

Microcontrôleur: j'ai utilisé une puce ATTiny85, qui coûte environ 1 £ chacune.

Programmeur de microcontrôleur: Afin d'obtenir le code sur la puce, vous avez besoin d'un moyen de le programmer. Avec un arduino ordinaire, il ne s'agit que d'un câble USB, mais pour la puce ATTiny, vous avez besoin de quelque chose en plus. Vous pouvez utiliser un autre arduino pour le faire ou, comme moi, vous pouvez utiliser un programmeur Tiny AVR de Sparkfun.

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

Je le recommanderais, car j'ai essayé de les programmer avec différentes méthodes et celle-ci est la plus simple. La carte est un peu chère, mais un bon investissement si vous faites beaucoup de projets ATTiny.

Prise de puce à 8 broches: si vous placez la puce dans une prise plutôt que de la souder directement, vous pouvez vous permettre des erreurs d'assemblage. Parlé d'expérience - personne ne veut dessouder les puces pour les reprogrammer.

Condensateur: Un condensateur de découplage de 100nF (code 104) est utilisé. Je ne comprends pas trop pourquoi, mais j'ai lu que les condensateurs de découplage sont importants sur internet, donc ça doit être vrai…

Résistance: Une résistance de 10 kΩ est utilisée pour abaisser la ligne dans l'arduino. Encore une fois, encore un autre mystère de l'électronique.

Perfboard/Stripboard: Quelques plinthes sur lesquelles assembler votre circuit.

Fil d'enroulement: le fil gainé ordinaire est trop épais pour être soudé sur le moteur. L'utilisation de fil émaillé fin réduira les contraintes sur les bornes du moteur et vous facilitera grandement la vie.

Fil Servo: Un ruban à trois fils se terminant par une prise femelle JR à 3 broches. J'ai eu le mien d'un servo grillé que j'étais en train de "modifier".

Moteur pas à pas: j'ai utilisé un moteur pas à pas bipolaire Nidec de 6 mm. Tout petit stepper devrait fonctionner, mais gardez-le petit, car le stepper est piloté directement depuis l'Arduino.

Broches d'en-tête: pas indispensable, mais si vous câblez votre stepper à 4 broches d'en-tête et placez une prise sur votre circuit, vous pouvez facilement débrancher votre tableau de bord pour faciliter l'installation.

Ordinateur: Pour programmer votre carte, vous aurez besoin d'un ordinateur. Peut-être avec l'IDE Arduino. Et peut-être un câble USB. S'il y a aussi un câble d'alimentation, c'est encore mieux.

Étape 1: Le système

Le schéma de base du système que j'ai créé était une méthode par laquelle le signal de modulation de largeur d'impulsion (PWM) provenant du récepteur RC est converti en un balayage de moteur pas à pas via un microcontrôleur ATTiny 85 (uC).

Voici une ressource sur les signaux PWM et RC, mais pour reproduire cela, vous n'avez pas strictement besoin de le comprendre.

en.wikipedia.org/wiki/Servo_control

L'ATTiny est ma saveur préférée d'Arduino car il est petit avec encore assez de broches d'E/S pour faire des choses de base, il s'intègre donc parfaitement dans les petits modèles et les projets RC. Le principal inconvénient de l'ATTiny est qu'il nécessite un peu plus de configuration pour en programmer un, mais une fois que vous l'avez configuré, ils sont si bon marché que vous pouvez en acheter des piles pour toutes sortes de projets.

La taille du cadran du compteur de vitesse est trop petite pour avoir un motoréducteur avec retour, donc pour avoir une réponse proportionnelle, un moteur pas à pas a dû être utilisé. Un moteur pas à pas est un moteur qui se déplace par quantités discrètes (ou pas…!), ce qui le rend idéal pour un système sans retour comme celui-ci. La seule mise en garde est que les « étapes » entraîneront un mouvement saccadé plutôt que fluide. Si vous obtenez un stepper avec suffisamment de pas par rotation, cela ne se remarque pas, mais avec le stepper que j'ai utilisé dans ce projet n'ayant qu'une vingtaine de pas dans une rotation complète, le saut d'angle est assez mauvais.

Le système, à la mise sous tension, fera reculer le moteur pas à pas de deux tours, de manière à remettre l'aiguille à zéro. Le compteur de vitesse a besoin d'une goupille de repos où vous voulez que le repère zéro soit, sinon il tournera pour toujours. Ensuite, il mappe les signaux PWM avant et arrière à un nombre défini d'étapes du moteur. Facile, non…?

Étape 2: Le logiciel

Avis de non-responsabilité: je ne suis pas un programmeur. Pour ce projet, je suis l'équivalent numérique du Dr Frankenstein, assemblant quelque chose qui fonctionne à partir de divers morceaux de code trouvés.

Alors, mes plus sincères remerciements vont à Duane B, qui a réalisé le code d'interprétation des signaux RC:

rcarduino.blogspot.com/

Et à Ardunaut, qui a fait le code pour faire fonctionner un stepper en tant que jauge analogique:

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

Et à tous les deux, mes plus sincères excuses pour ce que j'ai fait à votre code.

Maintenant que c'est réglé, voici ce qu'il faut télécharger sur l'ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - utiliser le numéro d'interruption dans attachInterrupt#define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - utiliser le numéro PIN dans digitalRead #define NEUTRAL_THROTTLE 1500 // c'est la durée en microsecondes de l'accélérateur neutre sur une voiture RC électrique #define UPPER_THROTTLE 2000 // c'est la durée en microsecondes de l'accélérateur maximum sur une voiture RC électrique #define LOWER_THROTTLE 1000 // c'est la durée en microsecondes de l'accélérateur nminimum sur une voiture électrique RC #define DEADZONE 50 // c'est la zone morte des gaz. La zone morte totale est le double. #include #define STEPS 21 // pas par tour (limité à 315°) Modifiez ceci pour ajuster la course maximale du compteur de vitesse. #define COIL1 3 // Broches de bobine. L'ATTiny utilise les broches 0, 1, 3, 4 pour le stepper. La broche 2 est la seule broche qui peut gérer les interruptions, elle doit donc être l'entrée. #define COIL2 4 // Essayez de les changer si le moteur pas à pas ne fonctionne pas correctement. #define COIL3 0 #define COIL4 1 // crée une instance de la classe stepper: Stepper stepper(STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; //Position en pas (0-630)= (0°-315°) int VITESSE = 0; float ThrottleInAvg = 0; int MesuresVersMoyenne = 60; float Resetcounter = 10; // temps de réinitialisation au ralenti int Resetval = 0; volatile int ThrottleIn = LOWER_THROTTLE; volatil non signé long StartPeriod = 0; // défini dans l'interruption // nous pourrions utiliser nThrottleIn = 0 en boucle au lieu d'une variable séparée, mais utiliser bNewThrottleSignal pour indiquer que nous avons un nouveau signal // est plus clair pour ce premier exemple void setup() { // dire à l'Arduino nous voulons que la fonction calcInput soit appelée chaque fois que INT0 (broche numérique 2) passe de HIGH à LOW ou LOW à HIGH // attraper ces changements nous permettra de calculer combien de temps l'impulsion d'entrée est attachée Interrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed(50); // régler la vitesse du moteur à 30 tr/min (360 PPS environ). stepper.step (ÉTAPES * 2); //Réinitialiser la position (X pas dans le sens inverse des aiguilles d'une montre). } void loop() { Resetval = millis; for (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg < UPPER_THROTTLE) { SPEED = map(ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Réinitialisation = 0; } // Mappage inverse else if (ThrottleInAvg LOWER_THROTTLE) { SPEED = map(ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Réinitialisation = 0; } // Out of range upper else if (ThrottleInAvg > UPPER_THROTTLE) { SPEED = 255; Réinitialisation = 0; } // Hors plage inférieur else if (ThrottleInAvg Resetcounter) { stepper.step(4); // J'essaie de dire au stepper de se réinitialiser si le signal RC est dans la zone morte pendant une longue période. Je ne sais pas si cette partie du code fonctionne réellement. } } valeur int = VITESSE; // obtient la valeur du potentiomètre (plage 0-1023) val = map(val, 0, 255, 0, STEPS * 0.75); // mappe la plage du pot dans la plage du stepper. if (abs(val - pos) > 2) { //si la différence est supérieure à 2 pas. if ((val - pos) > 0) { stepper.step(-1); // se déplace d'un pas vers la gauche. pos++; } si ((val - pos) < 0) { stepper.step(1); // se déplace d'un pas vers la droite. pos--; } } // délai(10); } void calcInput() { // si la broche est haute, c'est le début d'une interruption if (digitalRead(THROTTLE_SIGNAL_IN_PIN) == HIGH) { // obtenir l'heure en utilisant des micros - lorsque notre code devient vraiment occupé, cela deviendra inexact, mais pour l'application actuelle c'est // facile à comprendre et fonctionne très bien StartPeriod = micros(); } else { // si la broche est basse, c'est le front descendant de l'impulsion, nous pouvons donc maintenant calculer la durée de l'impulsion en soustrayant // l'heure de début ulStartPeriod de l'heure actuelle renvoyée par micros() if (StartPeriod) { ThrottleIn = (int)(micros() - StartPeriod); DébutPériode = 0; } } }

Référez-vous à ceci pour plus d'informations sur la programmation d'un ATTiny85:

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

Étape 3: Le matériel

Le matériel
Le matériel
Le matériel
Le matériel
Le matériel
Le matériel

Reportez-vous au schéma de circuit pour la construction du circuit. La façon dont vous l'assemblez dépend de vous, mais je suggérerais d'utiliser un peu de stripboard/perfboard utilisé pour le prototypage de circuits imprimés et de monter la puce dans un socket.

C1 = 100nF

R1 = 10kΩ

Le condensateur doit être monté aussi près que possible de la puce pour être le plus efficace.

Lorsque vous soudez les fils émaillés au moteur, soyez extrêmement prudent, car les bornes des moteurs aiment se détacher et couper le fil de la bobine au moteur. Pour remédier à cela, une bonne solution consiste à souder les fils, puis à mettre une grosse goutte d'époxy en 2 parties sur le joint, laisser durcir, puis torsader les fils ensemble. Cela réduit le stress sur les joints terminaux individuels et devrait les empêcher de se casser. Si vous ne le faites pas, ils se briseront au moment le moins opportun, c'est garanti.

Si vous réalisez le connecteur à broches de l'en-tête et configurez les broches ainsi: [Ca1, Cb1, Ca2, Cb2] avec Ca1 pour la bobine A, le fil 1, etc. Cela vous permet de changer le sens de rotation de la jauge en échangeant la fiche environ.

La jauge aura besoin d'une butée pour étalonner la position zéro. Je recommanderais de fabriquer l'aiguille en métal si possible. Cela l'empêche de fléchir lorsqu'il atteint la butée. Un moyen de placer l'aiguille dans une bonne position est de coller temporairement l'aiguille sur l'axe, de mettre le module sous tension, de le laisser reposer, puis de retirer et de recoller l'aiguille sur l'axe, l'aiguille reposant contre le terminus. Cela aligne l'aiguille avec le crantage magnétique du moteur et garantit que votre aiguille doit toujours s'appuyer contre la butée.

Étape 4: épilogue

J'espère que vous avez apprécié ce bref instructable et que vous l'avez trouvé utile. Si vous en construisez un, faites-le moi savoir !

Bonne chance!

Conseillé: