Ce site contient essentiellement des notes de travail. Le contenu est en constante évolution, et loin d'être achevé. (+ d'infos)
La plupart des documentations informatiques sont orientées Debian / Ubuntu.

Electronique/Projets/WinchPedal

De Ordinoscope.net
Sauter à la navigation Sauter à la recherche

Introduction

Commande d'un moteur brushless depuis une pédale

Ce projet permet de commander un moteur brushless depuis une pédale, typiquement pour un treuil.

Attention: il n'y a aucun contrôle quant au blocage du moteur, ce qui peut provoquer la destruction du contrôleur et du moteur. Faites en sorte que, sur le plan mécanique, le moteur soit toujours en mouvement.

Ce code envoie un signal ON / OFF (1000 / 2000us) au contrôleur. Ce dernier gérera la rampe d'accélération du moteur. Si vous ne voulez pas finir avec un plat de spaghettis, vous seriez avisé de régler le contrôleur brushless sur le mode "hard brake".

La plupart des contrôleurs peuvent être calibrés en branchant la batterie alors que le manche des gaz est au maximum, attendre l'avertissement sonore, puis relâcher les gaz. Avec ce circuit, cela revient à dire:

  • appuyer sur le bouton
  • brancher la batterie (le bouton toujours appuyé)
  • attendre l'avertissement sonore
  • relâcher le bouton

Code

/*
2014-04-29 - Jean-Christophe Heger

Brushless winch control

This simple script will read a button state (pedal) and change the servo pulse from 1000
to 2000us. There is no ramp, assuming that the brushless controller will handle the motor
acceleration. If you don't want the rope to look as a huge spaghetti plate, you should
rather set the brushless controller to hard brake.

The servo lib is required, supplied with the Arduino IDE 1.0+
(http://arduino.cc/en/Reference/Servo)

Pinout:

brushless controller   s ---> D3 (3)
                       + ---> VCC
                       - ---> GND
                      
button                 1 -+-> 5
                          +-> R10k -> GND (pulldown)
                       2 ---> VCC
*/

#include <Servo.h>

Servo myservo;

const int buttonPin = 5;
const int servoPin  = 3;
const int ledPin    = 13;

int buttonState = 0;

void setup () {
  pinMode (ledPin, OUTPUT);      
  pinMode (buttonPin, INPUT);
  myservo.attach (servoPin);
  myservo.writeMicroseconds (1000);
}

void loop () {
  buttonState = digitalRead (buttonPin);

  if (buttonState == HIGH) {
    myservo.writeMicroseconds (2000);
    digitalWrite(ledPin, HIGH);  
  } else {
    myservo.writeMicroseconds (1000);
    digitalWrite(ledPin, LOW); 
  }
}