03-04-2024, 10:54
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 :
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...?
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...?