Skocz do zawartości

Zlecę napisanie programu Arduino


karpa

Pomocna odpowiedź

Zlecę napisanie programu do sterowanie wózkiem w oparciu o sterownik MDS40A

https://www.cytron.io/c-motor-and-motor-driver/c-motor-driver/p-40amp-10v-45v-smartdrive-dc-motor-driver

Funkcje wózka:

-jazda przód - wejście analogowe - zamknięciu obwodu jazda, zatrzymanie po otwarciu obwodu.

- jazda tył - j.w.

- regulacja prędkości - potencjometr

- możliwość zmiany w programie szybkości rozbiegu i zatrzymania

 

 

 

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

dokładnie tak

jak testowałem sobie pracę to korzystałem z gotowca ze strony cytron

 

 #include "CytronMotorDriver.h"

...........

  if (digitalRead(A0) == LOW){

   motor.setSpeed(255);

    } else {

  motor.setSpeed(0);

    if (digitalRead(A1) == LOW){

    motor.setSpeed(-255);

    } else {

  motor.setSpeed(0);

 

Przyciski mogą być przypisane pod A0 i A1 w funkcji PULLUP 

Przekaźnik D2

 

Edytowano przez karpa
Link do komentarza
Share on other sites

Czyli potrzebny jest kod który po naciśnięciu przycisku płynnie rozpędza silnik i utrzymuje jego prędkość, a po zwolnieniu przycisku płynnie zatrzymuje silnik. Tak samo z drugim przyciskiem tylko że silnik ma się kręcić w drugą stronę. Maksymalna prędkość ma być regulowana przez potencjometr. Wszystko dobrze zrozumiałem?

Edytowano przez AntekBezak
  • Lubię! 1
Link do komentarza
Share on other sites

Działanie przycisków - dokładnie tak

Maksymalna prędkość może być ustawiana z poziomu programu. Po rozmowie z osobami, które obsługują wózek wynika, że maksymalna prędkość jest ustawiana przy pierwszym uruchomieniu. Brak potencjometru uprości schemat.

Link do komentarza
Share on other sites

Pierwsza wersja:

#include "CytronMotorDriver.h"

CytronMD motor(PWM_DIR, 3, 4);

// piny przyciskow
#define przycisk1 A0
#define przycisk2 A1

// predkosc maksymalna i minimalna
int smax = 128;
int smin = -128;

int pr = 0;
int p = 0;

void setup() {
  pinMode(przycisk1, INPUT_PULLUP);
  pinMode(przycisk2, INPUT_PULLUP);

}

void loop() {
  if (digitalRead(przycisk1)==HIGH){
    pr = smax;
  }
  if (digitalRead(przycisk1)==LOW){
    pr = 0;
  }
  if (digitalRead(przycisk2)==HIGH){
    pr = smin;
  }
  if (digitalRead(przycisk2)==LOW){
    pr = 0;
  }
  
  if(p<pr){
    p++;
  }
  if(p>pr){
    p--;
  }
  
  if(p > smax){
    p = smax;
  }
  if(p < smin){
    p = smin;
  }
  motor.setSpeed(p)
}

Sugeruję testy z kołem w powietrzu. Jeśli się pomyliłem układ może się zachowywać nieprzewidywalnie.

Edytowano przez AntekBezak
  • Lubię! 1
Link do komentarza
Share on other sites

zmieniłem stan przycisków, ponieważ tak tego używamy 


```cpp
void loop() {
  if (digitalRead(przycisk1)==LOW){
    pr = smax;
  }
  if (digitalRead(przycisk1)==HIGH){
    pr = 0;
  }
  if (digitalRead(przycisk2)==LOW){
    pr = smin;
  }
  if (digitalRead(przycisk2)==HIGH){
    pr = 0;
  }
```
 

układ reaguje po wciśnięciu przycisku2, 

przycisk 1 nie reaguje

Link do komentarza
Share on other sites

Program w takim wydaniu działa ok, ale nie rozpędza silnika tylko "wskakuje od razu na obroty"

 #include "CytronMotorDriver.h"



CytronMD motor(PWM_DIR, 3, 4);  // PWM = Pin 3, DIR = Pin 4.



void setup() {
  pinMode(8, OUTPUT); //Dioda kontrola przycisków
  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);
  digitalWrite(8, HIGH); 
}



void loop() {
    if (digitalRead(A0) == LOW){
  digitalWrite(8, HIGH);
  motor.setSpeed(200);  
      } 
      if (digitalRead(A0) == HIGH){
    digitalWrite(8, LOW);
  motor.setSpeed(0);
  }
    if (digitalRead(A1) == LOW){
  digitalWrite(8, HIGH);
  motor.setSpeed(-200);  
        } 
        if (digitalRead(A1) == HIGH){
    digitalWrite(8, LOW);
  motor.setSpeed(0);  
}
}

 

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.