• 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 dwoma silnikami 28byj-48 z uln2003 pilot IR
#1
Hey.

Próbuję stworzyć system sterujący dwoma silnikami 28byj-48 z uln2003 do rolety ekranu projektora. Generalnie na programowaniu Arduino znam się wcale. Poszperałem poszukałem i znalazłem kod, który zgodnie z opisem odpowiada praktycznie mojemu zastosowaniu ( praktycznie bo twórca kodu użył aż 4 przycisków - patrząc po kodzie lecz mogę się mylić) Zaimplementowałem program do arduino - kompilacja i wgranie poprawne.

Ok. Odczytałem swoje kody IR za pomocą innego kodu stworzonego wcześniej i postanowiłem podmienić je w kodzie zaciągniętym z innego forum. I Zonk.... wywala błąd. Mam prośbę o wsparcie znawców tematu. Generalnie zamysł jest taki:

Klawisz 1 - o kodzie HEX B73522A0 silniki opuszczają roletę w dół ( czyli będące naprzeciwko siebie silniki wykonują obrót w przeciwne strony jeden w lewo o X kroków drugi w prawo o X kroków)

Klawisz 2 - o kodzie HEX B63422A0 silniki opuszczają roletę w górę ( czyli będące naprzeciwko siebie silniki wykonują obrót w przeciwne strony jeden w lewo o X kroków drugi w prawo o X kroków)

Klawisz 3 - o kodzie HEX 44C622A0 zatrzymuje pracę silników ( bo to można chyba też według autora wykonać - choć ta opcja nie będzie niezbędna).


Załączam kod autora z innego forum do modyfikacji :
Kod:
#include <AccelStepper.h> //biblioteka do sterowania silnikiem krokowym
#include <IRremote.h> //biblioteka do rc5
#define STEP1 4 //sterowanie pełnymi krokami
#define STEP2 4

// Zdefiniowanie pinów silnika 1
#define motorPin1  6     // IN1 w układzie ULN2003
#define motorPin2  7     // IN2 w układzie ULN2003
#define motorPin3  8    // IN3 w układzie ULN2003
#define motorPin4  9    // IN4 w układzie ULN2003

// Zdefiniowanie pinów silnika 2
#define motorPin5  13     // IN1 w układzie ULN2003
#define motorPin6  12     // IN2 w układzie ULN2003
#define motorPin7  11    // IN3 w układzie ULN2003
#define motorPin8  10    // IN4 w układzie ULN2003

// Inicjalizacja pinów
AccelStepper stepper1(STEP1, motorPin1, motorPin3, motorPin2, motorPin4);
AccelStepper stepper2(STEP2, motorPin5, motorPin7, motorPin6, motorPin8);
IRrecv irrecv(4); //pin 4 odczyt komend rc5
decode_results results;


void setup() {
  irrecv.enableIRIn(); //uruchomienie odczytu rc5
 
  stepper1.setMaxSpeed(500.0); //maksymalna predkosc silnika nr 1
  stepper1.setAcceleration(350.0); //przyspieszenie silnika nr 1
  stepper1.setSpeed(100); //ustalenie predkosci silnika nr 1

  stepper2.setMaxSpeed(500.0); //maksymalna predkosc silnika nr 2
  stepper2.setAcceleration(350.0); //przyspieszenie silnika nr 2
  stepper2.setSpeed(100); //ustalenie predkosci silnika nr 2

  Serial.begin (9600);
}

void loop() {

if (irrecv.decode(&results))
{
    switch (results.value)
  {
   
   case 0xB63422A0: 
    stepper1.moveTo(4096); //jedz silnikiem na pozycje 4096
    Serial.println(stepper1.currentPosition());
    delay (200);
    break;

   case 0x34347887:
    stepper1.moveTo(0); //jedz silnikiem na pozycje 0
    Serial.println(stepper1.currentPosition());
    delay (200);
    break;

   case 0x343433CC:
   stepper1.stop();
   delay (200);
   break;

   case 0x343442BD:
   stepper2.moveTo(4096); //jedz silnikiem na pozycje 4096
   Serial.println(stepper2.currentPosition());
   delay (200);
   break;

   case 0x343455AA:
   stepper2.moveTo(0); //jedz silnikiem na pozycje 0
   Serial.println(stepper2.currentPosition());
   delay (200);
   break;

   case 0x3434748B:
   stepper2.stop();
   delay (200);
   break;
  }
    irrecv.resume();
   
}
  if (stepper1.currentPosition() == 4096 || stepper1.currentPosition() == 0)
  {
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
  }
  if (stepper2.currentPosition() == 4096 || stepper2.currentPosition() == 0)
  {
    digitalWrite(13, LOW);
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
    digitalWrite(10, LOW);

  }
  stepper1.run(); //uruchom silnik 1
  stepper2.run(); //uruchom silnik 1
}



Całość zbudowana na płytce Arduino Nano uln nr 1 wpięty w piny 6,7,8,9 uln nr2 wpięty w piny 10, 11, 12, 13
IR sygnał wpięty w pin 4 - zasilania pociągnięte z wejścia DC 5v


Szczerze nie wiem czy wgl te dwa silniki uciągną ten ekran ale ryzyk-fizyk. Trzeba spróbować. 
Dodatkowo do znawców arduino - czy macie jakieś miejsce skąd można czerpać wiedzę na temat składni i ewentualnych części składowych języka - podobny jest do C ale chyba nie jest to to samo...?
 
Odpowiedź
  


Wiadomości w tym wątku
Sterowanie dwoma silnikami 28byj-48 z uln2003 pilot IR - przez dRoooopED - 03-04-2024, 10:54

Skocz do:


Przeglądający: 2 gości