Arduino Polska Forum
Sterowanie silnikiem - silnik nie wyłącza się, dioda tak - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Sterowanie silnikiem - silnik nie wyłącza się, dioda tak (/watek-sterowanie-silnikiem-silnik-nie-wy%C5%82%C4%85cza-si%C4%99-dioda-tak)



Sterowanie silnikiem - silnik nie wyłącza się, dioda tak - lenny - 22-09-2017

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/how-to-spin-a-dc-motor-with-the-arduino/

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

Z góry dziękuję za pomoc.


RE: Sterowanie silnikiem - silnik nie wyłącza się, dioda tak - gemsi - 27-09-2017

(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.


RE: Sterowanie silnikiem - silnik nie wyłącza się, dioda tak - krn78 - 20-10-2017

Ja sterowałem niewielkim silniczkiem za pomocą tranzystora Darlingtona.
[attachment=424]