Stránka 2 z 27
Re: Mini CNC osa Z
Napsal: 19 kvě 2019, 20:06
od kiRRow
LEDse ti nerozsvítí, protože neukládáš do proměnné, kterou testuješ, aktuální pozici motoru.
Re: Mini CNC osa Z
Napsal: 19 kvě 2019, 20:14
od Hanz
aktuální pozice motoru int pos = 0; //proměnná obsahující pozici motoru (úhel natočení)
je to tak ?
Re: Mini CNC osa Z
Napsal: 19 kvě 2019, 22:27
od gilhad
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
- 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
Napsal: 20 kvě 2019, 11:38
od kiRRow
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 ?
Re: Mini CNC osa Z
Napsal: 20 kvě 2019, 18:23
od Hanz
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 :
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
Napsal: 20 kvě 2019, 18:58
od gilhad
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
)
Re: Mini CNC osa Z
Napsal: 20 kvě 2019, 19:17
od Hanz
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
Napsal: 21 kvě 2019, 01:23
od gilhad
Používej ten CODE tag, ať se to dá číst
- 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"
Pravda je, že tady je ke zlepšování prostoru ještě dost a taky že záleží na tom, zda a na jaké úrovni to chápeš a co například je pro tebe "přehledné a jasné" a co naopak "příliš ukecané a rozplizlé" ....
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
ale spíš
Kód: Vybrat vše
if (pos<175) {
digitalWrite(led2,LOW);
} else {
digitalWrite(led2,HIGH);
};
a nebo kratší
stejně jako dávám přednost zápisu
Kód: Vybrat vše
for (pos = 180; pos >= 0; pos--) { //je od úhlu 180 zpět do úhlu 0
.....
};
před
Kód: Vybrat vše
for(pos = 180; pos >= 0; pos -= 1) //je od úhlu 180 zpět do úhlu 0
{
....
};
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:
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
Napsal: 22 kvě 2019, 19:47
od Hanz
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
Re: Mini CNC osa Z
Napsal: 28 kvě 2019, 19:40
od Hanz
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