Skocz do zawartości

Kurs Arduino - #8 - Sterowanie silnikami DC, pętla for


Pomocna odpowiedź

(edytowany)

Cześć wszystkim! 🙂

Zadania.
Zadanie 8.1
 

void setup() {
  pinMode(6, OUTPUT); // Sygnał PWM silnika 1
  digitalWrite(6, HIGH); // Ustawiamy (na stałe) stan wysoki na pinie 6

  pinMode(5, OUTPUT); // Sygnał PWM silnika 2
  digitalWrite(5, HIGH); // Ustawiamy na stałe stan wysoki na pinie 5

  pinMode(7, OUTPUT); // Sygnały sterujące kierunkiem obrotów silnika nr 1
  pinMode(8, OUTPUT);

  pinMode(5, OUTPUT); // Sygnały sterujące kierunkiem obrotów silnika nr 2
  pinMode(4, OUTPUT);
}

void loop() {
  digitalWrite(7, LOW); // Silnik nr 1 - w przód
  digitalWrite(8, HIGH);

  digitalWrite(5, LOW); // Sinlin nr 2 - w przód
  digitalWrite(4, HIGH);
  delay(3000);

  digitalWrite(7, HIGH); // Silnik nr 2 - obroty w prawo
  digitalWrite(8, LOW);

  digitalWrite(5, LOW); // Silnik nr 2 - obroty w lewo
  digitalWrite(4, HIGH);
  delay(3000);

  digitalWrite(7, HIGH); // Silnik nr 1 - w tył
  digitalWrite(8, LOW);

  digitalWrite(5, HIGH); // Silnik nr 2 - w tył
  digitalWrite(4, LOW);
  delay(3000);

}

Zadanie 8.2 dla pętli While:

int ledBlink = 0;

void setup() {
  Serial.begin(9600);
  pinMode(8, OUTPUT);

  digitalWrite(8, LOW);
}

void loop() {
  
  while(ledBlink < 5){
    digitalWrite(8, HIGH);
    delay(1000);
    digitalWrite(8, LOW);
    delay(1000);
    ledBlink++;
  }

}

Miałem także dla FOR, ale chyba nadpisałem projekt programu pętlą while.

Zadanie 8.3

String userInput;
int userToInt = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("Podaj liczbe z zakresu 0-9");

}

void loop() {
  while(Serial.available() == 0){}

  userInput = Serial.readStringUntil('\n');
  if(userInput.toInt() >= 0 && userInput.toInt() <= 9){
    userToInt = userInput.toInt();
    for(userToInt; userToInt != 0; userToInt--){
      Serial.print("*");
    }
  }else{
    Serial.println("Podaj liczbe z zakresu 0-9");
  }

}

 

Zadanie 8.4

int motorSpeed = 0;

void setup() {
  pinMode(6, OUTPUT); // Sygnał silnika PWM nr 1

  pinMode(7, OUTPUT); // Sygnały sterujące kierunkiem obrotów silnika nr 1
  pinMode(8, OUTPUT);

  digitalWrite(7, LOW); // Silnik nr 1 - obroty w lewo
  digitalWrite(8, HIGH);
}

void loop() {
  for (motorSpeed; motorSpeed <= 255; motorSpeed++){
    analogWrite(6, motorSpeed); // Spokojne rozpędzanie silnika
    delay(25);
  }

  for (motorSpeed; motorSpeed >= 0; motorSpeed--){
    analogWrite(6, motorSpeed);
    delay(25);
  }

}

 

Edytowano przez FTNewbie
  • Lubię! 1
  • 4 tygodnie później...
String data = ""; //Data send by UART
int value = 0; //Data changed to int
int i = 0; //Data for operation within for loop

void setup() {
  Serial.begin(9600); //UART communication start
}

void loop() {
  if(Serial.available() > 0) { //Whether Arduino get data
    data = Serial.readStringUntil('\n'); //If yes, read them to the end of line and save 
    value = data.toInt(); //Change data to int
    if(value <= 9) { //Function to designate of max value  
      for(int i = 0; i < value; i++) { //Function to count stars number 
        Serial.print("*"); //Stars display 
      }
    }  
    Serial.print("\n"); //Line end
  }
}

 

Zadanie 8.4

void setup() {
  pinMode(6, OUTPUT); // PWM signal motor 1

  pinMode(7, OUTPUT); // Control signal of direction turn at motor 1
  pinMode(8, OUTPUT);

  digitalWrite(7, LOW); // Motor 1 - left turnover direction
  digitalWrite(8, HIGH);
}

void loop() {
  for(int i = 0; i <= 255; i++) {
    analogWrite(6, i); // Motor acceleration
    delay(25);
  }
  for(int i = 255; i >= 0; i--) { 
    analogWrite(6, i); // Motor slowdown 
    delay(25);
  }
}
  • 2 miesiące później...

@Krzysztof1029 witam na forum 🙂 Sprawdź, czy dodanie krótkiego opóźnienia na początku programu (np. 100, 200 ms) nie rozwiąże u Ciebie tego problemu. Sytuacja z "kwadracikami" może wyglądać różnie na każdym komputerze.

  • 3 miesiące później...

Czy przypadkiem tabela prawdy nie różni się od tego co jest przedstawione na zdjęciach z diodą, mam na myśli że w tabeli jest że gdy IN1 = 1 i IN2 = 0 to kręci się w lewo a w przypadku naszego schematu gdy IN1 = 0 i IN2 = 1 to kręci się w lewo (dioda czerwona świeci)

  • Lubię! 1
1 godzinę temu, T101 napisał:

Podłączyłem układ tak jak w kursie

W kursie było ładniej połączone, przynajmniej było widać co z czym jest połączone. A na tym zdjęciu widać chaos.

T101 podziwiam twoją wytrwałość. Czy mógłbyś jednak przed wrzuceniem zdjęć na stronę sprawdzić czy:

- są ostre
- czy widać na nich opisy liczb na płytce stykowej
- czy widać nr pinów na płytce Arduino
- czy widać które piny Arduino są połączone z którymi otworami płytki stykowej
- czy widać jak są zamontowane na płytce stykowej inne elementy: rezystory, kondensatory
Oświetlenie twojego miejsca pracy nie jest zbyt jasne więc może mógłbyś użyć lampy błyskowej w aparacie (jeśli taka jest)?

Jeśli miałbyś z tym dalej problem to narysuj prosty rysunek składający się z prostokątów, kwadratów, trójkątów i kółek połączonych liniami i opisanych numerami jak na płytce Arduino i płytce stykowej.

  • Lubię! 1
(edytowany)

Te są lepsze?

 

DSC_0002(2).thumb.JPG.d9ebe80e4f1bf771eddebfcfefdfef1b.JPGDSC_0003(2).thumb.JPG.1e1a3002601addc3eb7a95d266b05c1e.JPGDSC_0006(1).thumb.JPG.ecd2ab0af531a376a6c493e4cc2f55bc.JPGDSC_0005(1).thumb.JPG.843053b673cd84ea4ac1ce7f9bc251ba.JPGDSC_0004(2).thumb.JPG.3d9e7839b4e4effc8ec2125d4eaed29d.JPG

Chociaż nie wiem po co wstawiam skoro tym razem zadziałało

DSC_0008.thumb.JPG.1f6ca9fbcf8db5db2df3d71ec383b274.JPGDSC_0007.thumb.JPG.3e4edcba6252db5f3e51cb53260b7582.JPG

 

Wszystko raczej podłączyłem tak samo. Kondensator jest co prawda w innym miejscu(bardziej na prawo) ale czy to ma znaczenie?  Teraz czas na podłączenie jakiegoś silnika.

Edytowano przez T101

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...