Índice:

Velocímetro de trabalho RC do carro: 4 etapas (com fotos)
Velocímetro de trabalho RC do carro: 4 etapas (com fotos)

Vídeo: Velocímetro de trabalho RC do carro: 4 etapas (com fotos)

Vídeo: Velocímetro de trabalho RC do carro: 4 etapas (com fotos)
Vídeo: COMO FUNCIONA A SUSPENSÃO DE UM CARRO! BIELETA E HOMOCINÉTICA #shorts 2024, Setembro
Anonim
Velocímetro de carro RC de trabalho
Velocímetro de carro RC de trabalho

Este é um pequeno projeto que criei como parte de uma construção RC maior de um Land Rover Leve. Decidi que gostaria de ter um velocímetro funcionando no painel, mas sabia que um servo não iria cortá-lo. Havia apenas uma opção razoável: implantar o arduino!

Um pouco de fundo para começar … Não sou uma pessoa de codificação ou eletrônica. Ainda penso na eletricidade em termos de fluxo de água e fico um tanto perplexo com os resistores. Dito isso, se até eu consegui fazer esse trabalho, você também deveria conseguir!

LISTA DE PEÇAS:

Microcontrolador: usei um chip ATTiny85, que custou cerca de £ 1 cada.

Programador de microcontrolador: para colocar o código no chip, você precisa de uma maneira de programá-lo. Com o arduino normal, isso é apenas um cabo USB, mas para o chip ATTiny, você precisa de algo extra. Você pode usar outro arduino para fazer isso ou, como eu, pode usar um programador Tiny AVR do Sparkfun.

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

Eu recomendaria isso, pois já tentei programá-los com vários métodos e este é o mais fácil. A placa é um pouco cara, mas um bom investimento se você faz muitos projetos ATTiny.

Soquete de chip de 8 pinos: se você colocar o chip em um soquete em vez de soldá-lo diretamente, poderá cometer alguns erros na montagem. Falado por experiência própria - ninguém quer dessoldar chips para reprogramá-los.

Capacitor: Um capacitor de desacoplamento de 100nF (código 104) é usado. Não entendo bem por quê, mas li que capacitores de desacoplamento são importantes na internet, então deve ser verdade …

Resistor: Um resistor de 10kΩ é usado para puxar a linha para o arduino. Novamente, mais um mistério da eletrônica.

Perfboard / Stripboard: Alguns rodapés sobre os quais montar seu circuito.

Fio de enrolamento: o fio normal com bainha é muito grosso para soldar no motor. O uso de fio esmaltado fino reduzirá o estresse nos terminais do motor e tornará sua vida muito mais fácil.

Servo Wire: Uma fita de três fios que termina em um plugue fêmea JR de 3 pinos. Eu peguei o meu de um servo queimado que eu estava 'modificando'.

Motor de passo: usei um motor de passo bipolar Nidec de 6 mm. Qualquer pequeno stepper deve funcionar, embora mantenha-os pequenos, já que o stepper está sendo conduzido diretamente do Arduino.

Pinos do cabeçalho: Não é essencial, mas se você conectar seu stepper a 4 pinos do cabeçalho e colocar um soquete no circuito, poderá desconectar facilmente o painel para facilitar a instalação.

Computador: para programar sua placa, você precisará de um computador. Possivelmente com o IDE do Arduino. E talvez um cabo USB. Se também tiver um cabo de alimentação, melhor ainda.

Etapa 1: O Sistema

O esboço básico do sistema que criei era um método pelo qual o sinal de modulação por largura de pulso (PWM) vindo do receptor RC é convertido em uma varredura de motor de passo por meio de um microcontrolador ATTiny 85 (uC).

Aqui está um recurso sobre sinais PWM e RC, mas para replicar isso você não precisa estritamente entendê-lo.

en.wikipedia.org/wiki/Servo_control

O ATTiny é meu sabor favorito de Arduino porque ele é pequeno, com pinos de I / O ainda suficientes para fazer coisas básicas, então se encaixa perfeitamente em modelos pequenos e projetos RC. A principal desvantagem do ATTiny é que ele requer um pouco mais de configuração para programar um, mas uma vez configurado, eles são tão baratos que você pode comprar pilhas deles para todos os tipos de projetos.

O tamanho do dial do velocímetro é muito pequeno para ter um motoredutor com feedback, portanto, para ter uma resposta proporcional, um motor de passo teve que ser usado. Um motor de passo é um motor que é movido em quantidades discretas (ou etapas …!), O que o torna ideal para um sistema sem feedback como este. A única ressalva é que os 'passos' farão com que o movimento resultante seja espasmódico ao invés de suave. Se você obtiver um stepper com passos suficientes por rotação, isso não será perceptível, mas com o stepper que usei neste projeto tendo apenas 20 ou mais passos em uma rotação completa, o salto do ângulo é muito ruim.

O sistema, ao ser ligado, executará o stepper para trás por duas revoluções, de modo a zerar a agulha. O velocímetro precisa de um pino de descanso onde você deseja que a marca zero esteja, ou então ele simplesmente girará para sempre. Em seguida, ele mapeia os sinais PWM direto e reverso para um determinado número de etapas do motor. Fácil, certo …?

Etapa 2: o software

Isenção de responsabilidade: não sou um programador. Para este projeto, sou o equivalente digital do Dr. Frankenstein, montando algo que funciona a partir de vários pedaços de código encontrados.

Portanto, meus mais sinceros agradecimentos vão para Duane B, que fez o código para interpretar os sinais RC:

rcarduino.blogspot.com/

E para Ardunaut, que fez o código para executar um stepper como um medidor analógico:

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

E a ambos, minhas mais sinceras desculpas pelo que fiz ao seu código.

Agora que isso está fora do caminho, aqui está o que fazer upload para o ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - use o número de interrupção em attachInterrupt # define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - use o número de PIN em digitalRead #define NEUTRAL_THROTTLE 1500 // esta é a duração em microssegundos de 1500 // esta é a duração de aceleração neutra em um carro RC elétrico #define UPPER_THROTTLE 2000 // esta é a duração em microssegundos da aceleração máxima em um carro elétrico RC #define LOWER_THROTTLE 1000 // esta é a duração em microssegundos de aceleração mínima em um carro elétrico RC #define DEADZONE 50 // esta é a zona morta do acelerador. A zona morta total é o dobro disso. #include #define STEPS 21 // passos por revolução (limitado a 315 °) Altere isto para ajustar o curso máximo do velocímetro. #define COIL1 3 // Pinos da bobina. O ATTiny usa os pinos 0, 1, 3, 4 para o stepper. O pino 2 é o único pino que pode lidar com interrupções, portanto, ele precisa ser a entrada. #define COIL2 4 // Tente alterá-los se o motor de passo não funcionar corretamente. #define COIL3 0 #define COIL4 1 // cria uma instância da classe stepper: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Posição em etapas (0-630) = (0 ° -315 °) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToA Average = 60; float Resetcounter = 10; // tempo para redefinir enquanto estiver em aceleração inativa int Resetval = 0; volátil int ThrottleIn = LOWER_THROTTLE; período inicial longo sem sinal volátil = 0; // definido na interrupção // poderíamos usar nThrottleIn = 0 no loop em vez de uma variável separada, mas usar bNewThrottleSignal para indicar que temos um novo sinal // é mais claro para este primeiro exemplo void setup () {// diga ao Arduino queremos que a função calcInput seja chamada sempre que INT0 (pino digital 2) mudar de HIGH para LOW ou LOW para HIGH // capturar essas mudanças nos permitirá calcular por quanto tempo o pulso de entrada é attachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // defina a velocidade do motor para 30 RPM (360 PPS aprox.). stepper.step (STEPS * 2); // Posição de reset (X passos no sentido anti-horário). } void loop () {Resetval = millis; para (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = map (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Resetval = 0; } // Mapeamento reverso else if (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Resetval = 0; } // Fora do intervalo superior else if (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Resetval = 0; } // Fora do intervalo, inferior else if (ThrottleInAvg Resetcounter) {stepper.step (4); // Estou tentando dizer ao stepper para reiniciar a si mesmo se o sinal RC estiver na zona morta por muito tempo. Não tenho certeza se essa parte do código realmente funciona. }} int val = SPEED; // obtém o valor do potenciômetro (intervalo 0-1023) val = map (val, 0, 255, 0, STEPS * 0,75); // mapeia o intervalo do pot no intervalo do stepper. if (abs (val - pos)> 2) {// se a diferença for maior que 2 passos. if ((val - pos)> 0) {stepper.step (-1); // move um passo para a esquerda. pos ++; } if ((val - pos) <0) {stepper.step (1); // move um passo para a direita. pos--; }} // atraso (10); } void calcInput () {// se o pino estiver alto, é o início de uma interrupção if (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// obtenha o tempo usando micros - quando nosso código ficar muito ocupado, isso se tornará impreciso, mas para o aplicativo atual é // fácil de entender e funciona muito bem StartPeriod = micros (); } else {// se o pino estiver baixo, é a borda descendente do pulso, então agora podemos calcular a duração do pulso subtraindo o // tempo de início ulStartPeriod do tempo atual retornado por micros () if (StartPeriod) {ThrottleIn = (int) (micros () - StartPeriod); StartPeriod = 0; }}}

Consulte isso para obter mais informações sobre a programação de um ATTiny85:

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

Etapa 3: O Hardware

O Hardware
O Hardware
O Hardware
O Hardware
O Hardware
O Hardware

Consulte o diagrama do circuito para construir o circuito. Como você monta é com você, mas eu sugiro usar um pouco de stripboard / perfboard usado para prototipagem de placa de circuito e montar o chip em um soquete.

C1 = 100nF

R1 = 10kΩ

O capacitor deve ser montado o mais próximo possível do chip para ser mais eficaz.

Ao soldar os fios esmaltados ao motor, seja extremamente cuidadoso, pois os terminais dos motores gostam de quebrar e cortar o fio da bobina do motor. Para remediar isso, uma boa solução é soldar os fios e, em seguida, colocar uma grande gota de epóxi de 2 partes sobre a junta, deixar curar e torcer os fios. Isso reduz o estresse nas juntas terminais individuais e deve impedir que se quebrem. Se você não fizer isso, eles irão se desligar no momento menos conveniente, garantido.

Se você fizer o conector do pino do cabeçalho e configurar os pinos assim: [Ca1, Cb1, Ca2, Cb2] com Ca1 representando a Bobina A, fio 1 etc. Isso permite que você altere a direção de rotação do medidor trocando o plugue por aí.

O medidor precisará de um fim de curso para calibrar a posição zero. Eu recomendo fazer a agulha de metal, se possível. Isso o impede de flexionar quando atinge o fim de curso. Uma maneira de colocar a agulha em uma boa posição é colar temporariamente a agulha no eixo, ligar o módulo, deixá-lo descansar e, em seguida, remover e colar novamente a agulha no eixo, com a agulha apoiada contra o fim de curso. Isso alinha a agulha com a engrenagem magnética do motor e garante que a agulha sempre pare contra o batente.

Etapa 4: Epílogo

Espero que você tenha gostado deste breve instrutível e considerado útil. Se você construir um desses, me avise!

Boa sorte!

Recomendado: