Mini CNC osa Z
Re: Mini CNC osa Z
LEDse ti nerozsvítí, protože neukládáš do proměnné, kterou testuješ, aktuální pozici motoru.
Re: Mini CNC osa Z
aktuální pozice motoru int pos = 0; //proměnná obsahující pozici motoru (úhel natočení)
je to tak ?
je to tak ?
Re: Mini CNC osa Z
Neni. Podívej se, co tam skutečně děláš:
Do pos pri deklaraci priřadíš nulu, potom v loopu (aniž bys ji jakkoli měnil) ji porovnáš s nulou (a překvapivě je ta nula v ní menší, nebo rovná) a pak ji porovnáš se 180 (a zase je ta nula v ní menší, nebo rovná). Nikde ji neměníš, takže je pořád nula, bez ohledu na cokoli dalšího.
do proměnné led1 přiřadíš 13, v setupu pomocí ní nastavíš pin 13 jako OUTPUT, pak do ní v loop dvakrát přiřadíš true (což je tuším 1) protože pos je pořád nula a tak vždy proběhne stejnou cestou v ifu.
Pin 13 (často má připojenou led na Arduinu) v setupu nastavíš na OUTPUT (hodnotu mu nezadáš, ale defaultně to je 0) a dál už ho neměníš. Protože bez dalšího nastavování je na něm 0, tak připojená LEDka pochopitelně nesvítí.
Pin 12 přesně to samé.
v loop do serva vložíš nulu (myservo.write(0) ) a po 1.25s do něj zapíšeš 180 a po 1s to zase zopakuješ a tak pořád dokola. Nikde nezjišťuješ, v jaké je pozici, ale můžeš si být celkem jistý, že minimálně v druhém a všech dalších průchodech loop při vyhodnocování prvního ifu NENÍ v nule a při vyhodnocování druhého NENÍ ve 180 (protože Arduino udělá 16 000 000 instrukcí za sekundu a servo se z jedné pozice do druhé přesouvá docela dlouho).
Takže když to shrnu
Do pos pri deklaraci priřadíš nulu, potom v loopu (aniž bys ji jakkoli měnil) ji porovnáš s nulou (a překvapivě je ta nula v ní menší, nebo rovná) a pak ji porovnáš se 180 (a zase je ta nula v ní menší, nebo rovná). Nikde ji neměníš, takže je pořád nula, bez ohledu na cokoli dalšího.
do proměnné led1 přiřadíš 13, v setupu pomocí ní nastavíš pin 13 jako OUTPUT, pak do ní v loop dvakrát přiřadíš true (což je tuším 1) protože pos je pořád nula a tak vždy proběhne stejnou cestou v ifu.
Pin 13 (často má připojenou led na Arduinu) v setupu nastavíš na OUTPUT (hodnotu mu nezadáš, ale defaultně to je 0) a dál už ho neměníš. Protože bez dalšího nastavování je na něm 0, tak připojená LEDka pochopitelně nesvítí.
Pin 12 přesně to samé.
v loop do serva vložíš nulu (myservo.write(0) ) a po 1.25s do něj zapíšeš 180 a po 1s to zase zopakuješ a tak pořád dokola. Nikde nezjišťuješ, v jaké je pozici, ale můžeš si být celkem jistý, že minimálně v druhém a všech dalších průchodech loop při vyhodnocování prvního ifu NENÍ v nule a při vyhodnocování druhého NENÍ ve 180 (protože Arduino udělá 16 000 000 instrukcí za sekundu a servo se z jedné pozice do druhé přesouvá docela dlouho).
Takže když to shrnu
- pos nijak nesouvisí s pozicí serva a celou dobu je nula a nemění se
- led1 z 13 rychle změníš na 1, ale ta hodnota nijak nesouvisí s žádnou ledkou, to samé led2
- servu posíláš nějaké příkazy, ale jak na ně reaguje nijak nezjišťuješ
- piny 13 a 12 nastavíš jako výstupní, ale neposíláš na ně nikdy nikde žádnou hodnotu, nemají tedy důvod se nějak měnit a pokud na ně připojíš svítivé diody proti zemi, tak nemají důvod se rozsvěcet
Re: Mini CNC osa Z
Zastav se a popřemýšlej nad tím. Začal bych tímhle :
Jak se arduino vůbec dozví, že servo reaguje na jeho příkazy a že se natočilo do požadované pozice ?
Chci aby arduino vědělo v jaké přesně pozici je servo, nebo mi stačí vědět jestli je na jednom konci, nebo na druhém ?
Jak se arduino vůbec dozví, že servo reaguje na jeho příkazy a že se natočilo do požadované pozice ?
Chci aby arduino vědělo v jaké přesně pozici je servo, nebo mi stačí vědět jestli je na jednom konci, nebo na druhém ?
Re: Mini CNC osa Z
trochu jsem nad tím přemýšlel a díky za vaše nakopávání, začal jsem od začátku jen s jednou led ať svítí od polohy 0 do polohy 10. Povedlo se sketch je tady :
teď vyzkouším ať se rozsvítí i led2, kterou přidám doufám, že se mi to podaří !!! mám velkou radost
Kód: Vybrat vše
#include <Servo.h> //zahrnutí knihovny pro ovládání servo motoru
Servo myservo; //každý motor má svou instanci třídy Servo
int pos = 0; //proměnná obsahující pozici motoru (úhel natočení)
int led1 = 11; //první dioda
void setup()
{
myservo.attach(9); //tento motor je připojen na pin 9
pinMode(led1, OUTPUT); //nastavení funkce led1
}
void loop()
{
for(pos = 0; pos <= 180; pos += 1) //je od úhlu 0 do úhlu 180
{
myservo.write(pos); //natočení motoru na aktuální úhel
delay(10); //chvilka čekání než se motor natočí
if (pos>5)
digitalWrite(led1,LOW);
if(pos<5)
digitalWrite(led1, HIGH);
}
for(pos = 180; pos >= 0; pos -= 1) //je od úhlu 180 zpět do úhlu 0
{
myservo.write(pos); //natočení motoru na aktuální úhel
delay(10); //chvilka čekání než se motor natočí
}
}
teď vyzkouším ať se rozsvítí i led2, kterou přidám doufám, že se mi to podaří !!! mám velkou radost
Re: Mini CNC osa Z
Ještě dávej kód do tagů code (to je takový to </> tlačítko nahoře) a bude to rázem líp čitelné
(by admin kódy jsem do těch tagů přidal )
Kód: Vybrat vše
int led1 = 11; //první dioda
Re: Mini CNC osa Z
přiřadil jsem i led2 a povedlo se, sic po pár pokusech, ale funguje to ! je to bomba !!! tohle mě vážně vzalo, maličkosti, ale potěší !!! Díky všem co jste mi radili jak dosáhnou cíle. Avšak, je tento sketch tak, jak má být napsaný ? nebo jde něco upravit ? a jak ? Díky Hanz
Kód: Vybrat vše
#include <Servo.h> //zahrnutí knihovny pro ovládání servo motoru
Servo myservo; //každý motor má svou instanci třídy Servo
int pos = 0; //proměnná obsahující pozici motoru (úhel natočení)
int led1 = 11; //první červená led
int led2 = 10; //druhá zelená led
void setup()
{
myservo.attach(9); //tento motor je připojen na pin 9
pinMode(led1, OUTPUT); //nastavení funkce led1
pinMode(led2, OUTPUT); //nastavení funkce led2
}
void loop()
{
for(pos = 0; pos <= 180; pos += 1) //je od úhlu 0 do úhlu 180
{
myservo.write(pos); //natočení motoru na aktuální úhel
delay(15); //chvilka čekání než se motor natočí
if (pos>5)
digitalWrite(led1,LOW);
if(pos<5)
digitalWrite(led1,HIGH);
}
for(pos = 180; pos >= 0; pos -= 1) //je od úhlu 180 zpět do úhlu 0
{
myservo.write(pos); //natočení motoru na aktuální úhel
delay(15); //chvilka čekání než se motor natočí
if (pos<175)
digitalWrite(led2,LOW);
if(pos>175)
digitalWrite(led2,HIGH);
}
}
Re: Mini CNC osa Z
Používej ten CODE tag, ať se to dá číst
Já bych rozhodně nepsal konstrukce typu
ale spíš
a nebo kratší
stejně jako dávám přednost zápisu
před
Pokud to jen natáčí to servo a svítí těma diodama, tak to takhle třeba funguje, ale pokud bych do toho chtěl nějak zasahovat, tak bych se rozhodně vyhnul loop() trvající řadu sekund a blokující pomocí delay() a dal bych přednost neblokující loop() trvající pár milisekund max, aby to mohlo reagovat i na nějaké řízení třeba, nebo obecně dělat něco jiného užitečného. Například něco ve smyslu:
- Pokud dělá co má, tak je asi napsaný "dost dobře" na to aby šel použít
- Cokoli jde upravit, nebo napsat líp - může to být kratší, rychlejší, univerzálnější, lépe využívat použitý HW, být přenositelnější, lépe komentované, méně přeplácané, ... - akorát to nikdy nebude všechno z toho naráz, protože některé ty požadavky jdou proti sobě, takže záleží na volbě kritérií - a vždy si můžeš zvolit (a odůvodnit), jinou sadu kritérií a podle ní to upravit a "vylepšit"
Já bych rozhodně nepsal konstrukce typu
Kód: Vybrat vše
if (pos<175)
digitalWrite(led2,LOW);
if(pos>175)
digitalWrite(led2,HIGH);
// a když je to přesně 175, tak to necháme v předchozím stavu
Kód: Vybrat vše
if (pos<175) {
digitalWrite(led2,LOW);
} else {
digitalWrite(led2,HIGH);
};
Kód: Vybrat vše
digitalWrite(led2,pos>175);
Kód: Vybrat vše
for (pos = 180; pos >= 0; pos--) { //je od úhlu 180 zpět do úhlu 0
.....
};
Kód: Vybrat vše
for(pos = 180; pos >= 0; pos -= 1) //je od úhlu 180 zpět do úhlu 0
{
....
};
Kód: Vybrat vše
#include <Servo.h> //zahrnutí knihovny pro ovládání servo motoru
Servo myservo; //každý motor má svou instanci třídy Servo
int pos = 0; //proměnná obsahující pozici motoru (úhel natočení)
int led1 = 11; //první červená led
int led2 = 10; //druhá zelená led
unsigned long currentMillis, lastPosMillis;
int smer; // +1 dopředu, -1 dozadu
void setup(){
myservo.attach(9); //tento motor je připojen na pin 9
pinMode(led1, OUTPUT); //nastavení funkce led1
pinMode(led2, OUTPUT); //nastavení funkce led2
pos = 0;
smer = 1;
currentMillis=millis();
lastPosMillis=currentMillis;
digitalWrite(led1, pos<5);
digitalWrite(led2, pos>175);
myservo.write(pos);
}
void loop() {
currentMillis=millis();
// tady můžu řešit třeba čtení tlačítek, nebo další zajímavé věci, co se dějí průběžně
if (currentMillis - lastPosMillis >= 15 ) {
lastPosMillis=currentMillis;
pos += smer; // další krok serva správným směrem
if (pos <1 ) {
smer = 1;
pos=0; // pro jistotu, ale ono to není nutné, pokud s pos nehýbu i jinde
};
if (pos > 179 ) {
smer = -1;
pos=180; // pro jistotu, ale ono to není nutné, pokud s pos nehýbu i jinde
};
digitalWrite(led1, pos<5);
digitalWrite(led2, pos>175);
myservo.write(pos);
}; // if ( currentMillis - lastPosMillis >= 15 )
// a tady taky můžu řešit co chci
}
Re: Mini CNC osa Z
natočil jsem jak ledky blikají v koncových polohách, tak se mrkněte.
odkaz :
https://www.youtube.com/watch?v=pI9DIUj ... e=youtu.be
nápad s tlačítkem se mi líbí, něco bych se zase naučil a použít tlačítko jako "start/stop" je pro mě výzva ! díky
odkaz :
https://www.youtube.com/watch?v=pI9DIUj ... e=youtu.be
nápad s tlačítkem se mi líbí, něco bych se zase naučil a použít tlačítko jako "start/stop" je pro mě výzva ! díky
Re: Mini CNC osa Z
vrátil jsem se k původnímu dotazu, tedy zobrazování polohy serva osy Z u mini cnc pomocí led. A nalezl odkaz na sketch, který jsem aplikoval a který funguje. Jenom jsem musel použít druhém Arduino, protože nevím jak sketch přidat do původního ?! odkaz zde : https://randomnerdtutorials.com/monitor ... d-arduino/. Vyzkoušel jsem taky variantu pomocí spínače / v mém případě kontaktu ze staré dvd mechaniky /, který jsem umístil na osu Z. Kontakt spíná napájení pro 5V relátko M4-5H a s pomocí jeho kontaktů se led rožínají - zhasínají tak, jak má napájení cívka.Taky funguje - odkaz na video : https://www.youtube.com/watch?v=Oi70rBmHqx4&t=50s
No a program,který je na prvním videu je fajn po úpravě od gilhada, ale bohužel zatím taky nevím, jak ho napasovat do sketche, aby to běželo. Díky za nápovědu
No a program,který je na prvním videu je fajn po úpravě od gilhada, ale bohužel zatím taky nevím, jak ho napasovat do sketche, aby to běželo. Díky za nápovědu
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů