Program do obsługi jednego silnika
-
Autor tematu - Sympatyk forum poziom 2 (min. 50)
- Posty w temacie: 8
- Posty: 67
- Rejestracja: 30 paź 2005, 19:44
- Lokalizacja: Golubkowo
- Kontakt:
Program do obsługi jednego silnika
Szukam programu do obsługi jednego silnika krokowego, z pewnym "ale". Chciałbym aby działał jako "półautomat"
Już wyjaśniam na czym miałoby to polegać.
Silnik miałby wykonywać cyklicznie określoną liczbę kroków (w moim przypadku obrotów) z zadaną prędkością, ale start cyklu miałby odbywać się nie poprzez kliknięcie myszką na start, ale miałby być wyzwalany wejściem.
Znalazłem jakiś prosty programik w którym ustala się ilość kroków i prędkość ale brakuje mi właśnie tego "półautomatu"
Chcę po prostu uniknąć denerwującego ciągłego klikania w start programu
Może ktoś z Was widział taki programik, lub mógłby coś takiego "popełnić" to będe bardzo zobowiązany
Już wyjaśniam na czym miałoby to polegać.
Silnik miałby wykonywać cyklicznie określoną liczbę kroków (w moim przypadku obrotów) z zadaną prędkością, ale start cyklu miałby odbywać się nie poprzez kliknięcie myszką na start, ale miałby być wyzwalany wejściem.
Znalazłem jakiś prosty programik w którym ustala się ilość kroków i prędkość ale brakuje mi właśnie tego "półautomatu"
Chcę po prostu uniknąć denerwującego ciągłego klikania w start programu
Może ktoś z Was widział taki programik, lub mógłby coś takiego "popełnić" to będe bardzo zobowiązany
Tagi:
-
- Specjalista poziom 3 (min. 600)
- Posty w temacie: 1
- Posty: 741
- Rejestracja: 16 lip 2008, 15:07
- Lokalizacja: Polska, Augustow
-
Autor tematu - Sympatyk forum poziom 2 (min. 50)
- Posty w temacie: 8
- Posty: 67
- Rejestracja: 30 paź 2005, 19:44
- Lokalizacja: Golubkowo
- Kontakt:
Dzięki za zainteresowanie tematem
Do testów dobrze by było mieć możliwość regulacji ilości kroków ale docelowo potrzebował będę stała ilość
Generalnie chciałem testować na PC ale z odpowiedzi wnioskuję (i w sumie dla mnie nawet lepiej) że mógłby to być zewnętrzny kontroler tyle że dobrze by było abym mógł programować go z zewnątrz (np do regulacji tych ilości kroków)
Do testów dobrze by było mieć możliwość regulacji ilości kroków ale docelowo potrzebował będę stała ilość
Generalnie chciałem testować na PC ale z odpowiedzi wnioskuję (i w sumie dla mnie nawet lepiej) że mógłby to być zewnętrzny kontroler tyle że dobrze by było abym mógł programować go z zewnątrz (np do regulacji tych ilości kroków)
-
Autor tematu - Sympatyk forum poziom 2 (min. 50)
- Posty w temacie: 8
- Posty: 67
- Rejestracja: 30 paź 2005, 19:44
- Lokalizacja: Golubkowo
- Kontakt:
Tak jak pisałem już w tym temacie https://www.cnc.info.pl/topics12/sterow ... htm#332190 zdecydowałem się na Arduino
Dzisiaj w końcu znalazłem trochę czasu na podłączenie sterownika i silnika do płytki Arduino
Naskrobałem taki oto prosty kod
To moje początki w programowaniu więc bardzo proszę o cierpliwość i wskazanie mi ewentualnych błędów które bedę popełniał lub może już popełniłem
A więc wracając do powyższego kodu.
Po uruchomieniu silnik wykonuje zadana liczbę kroków tak jak sobie zaplanowałem.
Teraz chciałbym zapytać kolegów jak wprawiać silnik ponownie w ten sam ruch po przyciśnięciu swicha?
Dzisiaj w końcu znalazłem trochę czasu na podłączenie sterownika i silnika do płytki Arduino
Naskrobałem taki oto prosty kod
Kod: Zaznacz cały
AccelStepper stepper(1, 8, 7);
void setup() {
stepper.setMaxSpeed(1000);
stepper.setAcceleration(2000);
stepper.moveTo(2000);
}
void loop(){
stepper.run();
}
A więc wracając do powyższego kodu.
Po uruchomieniu silnik wykonuje zadana liczbę kroków tak jak sobie zaplanowałem.
Teraz chciałbym zapytać kolegów jak wprawiać silnik ponownie w ten sam ruch po przyciśnięciu swicha?
-
- Lider FORUM (min. 2000)
- Posty w temacie: 3
- Posty: 3730
- Rejestracja: 13 gru 2008, 19:32
- Lokalizacja: Szczecin
- Kontakt:
Dodaj obsługę przycisku.
http://arduino.cc/en/tutorial/button
Na kliknięcie przycisku wywołaj funkcję runMyCrazyPony()
która wygląda mniej więcej tak:
http://arduino.cc/en/tutorial/button
Na kliknięcie przycisku wywołaj funkcję runMyCrazyPony()
która wygląda mniej więcej tak:
Kod: Zaznacz cały
runMyCrazyPony(){
stepper.moveTo(2000);
while(stepper.currentPosition() != 2000 ){
stepper.run();
}
stepper.setCurrentPosition(0);
}
-
Autor tematu - Sympatyk forum poziom 2 (min. 50)
- Posty w temacie: 8
- Posty: 67
- Rejestracja: 30 paź 2005, 19:44
- Lokalizacja: Golubkowo
- Kontakt:
Zienek, wielkie dzięki
Przycisk dodałem już sobie rano ale motałem się jeszcze z tą funkcją
Mam jeszcze jedno pytanko
W obecnej chwili przy wciśniętym przycisku silnik robi określoną liczbę kroków zatrzymuje się na chwilę i robi kolejną sekwencję.
A jak zrobić aby silnik czekał na kolejne przyciśnięcie (czyli jedno przyciśnięcie = jedna sekwencja kroków)?
Przycisk dodałem już sobie rano ale motałem się jeszcze z tą funkcją
Mam jeszcze jedno pytanko
W obecnej chwili przy wciśniętym przycisku silnik robi określoną liczbę kroków zatrzymuje się na chwilę i robi kolejną sekwencję.
A jak zrobić aby silnik czekał na kolejne przyciśnięcie (czyli jedno przyciśnięcie = jedna sekwencja kroków)?
-
Autor tematu - Sympatyk forum poziom 2 (min. 50)
- Posty w temacie: 8
- Posty: 67
- Rejestracja: 30 paź 2005, 19:44
- Lokalizacja: Golubkowo
- Kontakt:
Dzięki za kolejne wskazówki
Sekwencję robi poprawną, nie wraca do zera.
Kod mam taki
[ Dodano: 2013-04-06, 22:37 ]
Zienek dzięki Twoim wskazówkom w końcu udało mi się uzyskać to co chciałem
Dzięki wielkie za pomoc
Wklejam kod w celu sprawdzenia bo ja to robiłem trochę na "czuja"
Sekwencję robi poprawną, nie wraca do zera.
Kod mam taki
Kod: Zaznacz cały
#include <AccelStepper.h>
AccelStepper stepper(1, 8, 7);
int pin_przycisk = A5;
int ilosc_krokow = 500;
void setup() {
stepper.setMaxSpeed(500);
stepper.setAcceleration(10000);
pinMode(pin_przycisk, INPUT_PULLUP);
}
void loop(){
int przycisk = digitalRead(pin_przycisk);
if(przycisk == LOW){
stepper.moveTo(ilosc_krokow);
while(stepper.currentPosition() != ilosc_krokow){
stepper.run();
}
}
stepper.setCurrentPosition(0);
}
[ Dodano: 2013-04-06, 22:37 ]
Zienek dzięki Twoim wskazówkom w końcu udało mi się uzyskać to co chciałem
Dzięki wielkie za pomoc
Wklejam kod w celu sprawdzenia bo ja to robiłem trochę na "czuja"
Kod: Zaznacz cały
#include <AccelStepper.h>
const int buttonPin = A5;
const int ledPin = 13;
int buttonState;
int lastButtonState = LOW;
long lastDebounceTime = 0;
long debounceDelay = 50;
AccelStepper stepper(1, 8, 7);
int steps = 2000;
void setup() {
stepper.setMaxSpeed(500);
stepper.setAcceleration(10000);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
//Serial.begin(9600);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
if (buttonState == HIGH) {
stepper.moveTo(steps);
while(stepper.currentPosition() != steps){
stepper.run();
digitalWrite(ledPin, HIGH);
}
stepper.setCurrentPosition(0);
digitalWrite(ledPin, LOW);
}
}
if ((millis() - lastDebounceTime) > debounceDelay) {
buttonState = reading;
}
lastButtonState = reading;
}