• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterowanie silnikiem - silnik nie wyłącza się, dioda tak
#1
Dzień dobry,

Mam problem ze sterowaniem silnikiem za pomocą arduino i tranzystora.
Kod jakiego używam (steruję przez radio):

Kod:
#include <RCSwitch.h>

#define SIGNAL_START 1
#define SIGNAL_STOP 2
#define MOTOR_PIN 9

RCSwitch mySwitch = RCSwitch();

void setup() {
 Serial.begin(9600);
 pinMode(MOTOR_PIN, OUTPUT);
 mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
}

int prevValue = SIGNAL_STOP;
bool valueChanged = false;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;

void loop() {
 if (mySwitch.available()) {
   int value = mySwitch.getReceivedValue();
   if(prevValue != value) {
     lastDebounceTime = millis();
     prevValue = value;
     valueChanged = true;
   }
   mySwitch.resetAvailable();
 }
 if(valueChanged && (millis() - lastDebounceTime) > debounceDelay) {
   if(prevValue == SIGNAL_START ||
       prevValue == SIGNAL_STOP) {
     Serial.println(prevValue == SIGNAL_START ? "ON" : "OFF");
     digitalWrite(MOTOR_PIN,
       prevValue == SIGNAL_START ? HIGH : LOW);
     valueChanged = false;
   }
 }
}

Powyższy kod działa tylko z diodą LED - jest poprawnie włączana i wyłączana, natomiast silnik włącza się poprawnie, ale nie wyłącza się.

Aby rozwiązać ten problem próbowałem zmienić kod na poniższy:

Kod:
if(valueChanged && (millis() - lastDebounceTime) > debounceDelay) {
   if(prevValue == SIGNAL_START ||
       prevValue == SIGNAL_STOP) {
     digitalWrite(MOTOR_PIN, HIGH);
      delay(5000);
      digitalWrite(MOTOR_PIN, LOW);
      delay(5000);
   }
 }

Wtedy silnik pracuje poprawnie (wg kodu) czyli włącza się na 5 sekund i po upływie tego czasu wyłącza się poprawnie.

Schemat do sterowania tranzystorem jaki używam możecie zobaczyć tutaj: http://www.dummies.com/computers/arduino...e-arduino/

Czy jest jakiś sposób aby układ współpracował z silnikiem poprawnie?

Z góry dziękuję za pomoc.
 
Odpowiedź
#2
(22-09-2017, 18:27)lenny napisał(a): Czy jest jakiś sposób aby układ współpracował z silnikiem poprawnie?

Z góry dziękuję za pomoc.

Cześć, sterowanie PWM i tranzystor polowy. Jako bonus dostaniesz opcje sterowania prędkością silnika.
 
Odpowiedź
#3
Ja sterowałem niewielkim silniczkiem za pomocą tranzystora Darlingtona.
   
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości