Skocz do zawartości

Problem ze sterowaniem prędkością silnika przez RF


silver2001

Pomocna odpowiedź

witam, mam problem ze sterowaniem silnika pwm'em.

Jako nadajnik używam Arduino Nano, odbiornik to Arduino Mega, moduł radiowy ( nadajnik - odbiornik ) 433mHz a sterownik silników to L298N.

Otóż dla nadajnika mam wgrany program :


#include <VirtualWire.h>

// definiuje piny 
#define led_pin 11
#define transmit_pin 8
#define pot_pin A0

void setup()
{
 // przygotowuje potrzebne informacje dla biblioteki
   vw_set_tx_pin(transmit_pin);
   vw_setup(2000);
   pinMode(led_pin, OUTPUT);
}

void loop()
{
 int pot = analogRead(pot_pin);
 String toSend = (String(pot, DEC)); // tekst wiadomości
 char msg[23]; // tworzymy tablicę typu char
 toSend.toCharArray(msg, toSend.length() + 1); // konwertuje tekst do tablicy charów

 digitalWrite(led_pin, HIGH); // zapalam LED
 vw_send((uint8_t *)msg, strlen(msg));// wysyłam 
 vw_wait_tx(); 
 digitalWrite(led_pin, LOW); // gaszę LED
 delay(100); // czekam

}

a dla odbiornika :


#include <VirtualWire.h>

#define led_pin 10
#define receive_pin 13
#define pwm_pin 9
void setup()
{
   Serial.begin(9200);
   Serial.println("setup");
// przygotowuje potrzebne informacje dla biblioteki
   vw_set_rx_pin(receive_pin);
   vw_setup(2000);   
   vw_rx_start(); // startuje odbieranie danych 

   pinMode(led_pin, OUTPUT);
   pinMode(pwm_pin, OUTPUT);

}

void loop()
{

   uint8_t buf[VW_MAX_MESSAGE_LEN];
   uint8_t buflen = VW_MAX_MESSAGE_LEN;

   if (vw_get_message(buf, &buflen)) 
   {
 int i,pwm,wartosc;
       String liczba;

       digitalWrite(led_pin, HIGH); //zapalam LED
      // w pętli zczytujemy dane z odbiornika 
       for (i = 0; i < buflen; i++) 
       {
         liczba+=char(buf[i]); // wiadomość
       }

       wartosc = liczba.toInt();
       pwm = map(wartosc,0,1023,0,255);
 Serial.print(wartosc);// Debug
       Serial.print("   ");
       Serial.println (pwm);
       analogWrite(pwm_pin, pwm);
       digitalWrite(led_pin, LOW); // gaszę LED
       digitalWrite(8,HIGH);

   }   
}


Więc na czym polega mój problem. Otóż, chcę sterować silnikiem w ten sposób, ze między wartością 0 a 150 pwm'u silnik kręci się w jedną stronę ( zwiększając prędkość bo steruję pwm'em ) a jeśli wartość jest większa niż 150, silnik kręci się w drugą stronę, ale prędkość się zwiększa aż dojdzie do maksymalnej ( bo wciąż ruszam gałką potencjometru )

więc postanowiłem w takim wypadku dodać funkcje :

if( pwm < 150)
{ 
digitalWrite(8,HIGH);
digitalWrite(7,LOW);
}
if( pwm > 150)
{
digitalWrite(8,LOW);
digitalWrite(7,HIGH);
}

po dodaniu tych 2 funkcji do programu, silnik kręci się tak jak by w ogóle ich nie widział - kręci się tylko w 1 stronę. Pomierzyłem miernikiem, pin 7 jest ciągle na stanie wysokim i nie zmienia wartości na niską

Link do komentarza
Share on other sites

Toteż zrobiłem, wykorzystałem do tego program na servo ( poszedłem trochę na łatwiznę 😋 ) :


#include <Servo.h>

Servo myservo;  

int potpin = 0;  
int val;   

void setup() {
  Serial.begin(9200);
   Serial.println("setup");

 myservo.attach(9); 
}

void loop() {
 val = analogRead(potpin);           
 val = map(val, 0, 1023, 0, 180); 
 Serial.println(val);
 myservo.write(val);               
 delay(15);  


 if(val > 150 )
 {
   digitalWrite(8,HIGH);
   digitalWrite(7,LOW);
 }
 if(val < 150 )
 {
   digitalWrite(8,LOW);
   digitalWrite(7,HIGH);
 }
}

W ten sposób działa.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.