segítség!!
-
- DrótVégénSzéndarab
- Hozzászólások: 19
- Csatlakozott: 2014. november 18. kedd, 22:05
Re: segítség!!
Debugot hogy tudok beszúrni?
Re: segítség!!
Értem. A 0...255 a fejlesztésnél még ne pwm legyen, hanem általad adott érték.
Fejlesztésnél _részeket_ fejlesztünk... Utána bővítünk.
Debug:
Fejlesztésnél _részeket_ fejlesztünk... Utána bővítünk.
Debug:
Kód: Egész kijelölése
serial.print ("itt ezt csinálom");
Re: segítség!!
idő, meg gyors programlefutás:
NE PC fejjel gondolkodj!
=> Folyamatábra!
- menjen a motor balra
- elért már 3 cm-re? nem - ujravizsgálat. Ha elérte - továbbmehet.
A kulcs utasítás a while()
NE PC fejjel gondolkodj!
=> Folyamatábra!
- menjen a motor balra
- elért már 3 cm-re? nem - ujravizsgálat. Ha elérte - továbbmehet.
A kulcs utasítás a while()
-
- DrótVégénSzéndarab
- Hozzászólások: 19
- Csatlakozott: 2014. november 18. kedd, 22:05
Re: segítség!!
Oks elkezdtem újból elölről.
Kód: Egész kijelölése
#define EchoPin 2 // SRF04 Echo laba PIN2-re kotve
#define TriggerPin 3 // SRF04 Trigger laba PIN3-ra kotve
unsigned long EchoTime = 0; // az Echo labon megjeleno jel hosszat tartalmazo valtozo
unsigned long Tavolsag = 0; // a mert tavolsagot tartalmazo valtozo
void setup() {
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
analogWrite(5, 50);
analogWrite(6, 50);
pinMode(TriggerPin, OUTPUT); // Trigger lab kimenet
pinMode(EchoPin, INPUT); // Echo lab bemenet
Serial.begin(9600); // 9600 baud-sebessegu soros kommunikacios port beallitasa
}
void loop() {
digitalWrite(TriggerPin, HIGH); // a szenzornak 10 mikroszekundumos jel kuldese a Trigger labra
delayMicroseconds(10);
digitalWrite(TriggerPin, LOW);
EchoTime = pulseIn(EchoPin, HIGH); // az Echo labon a magas allapot idejenek merese
Tavolsag = 10*EchoTime/58; // a celtargy tavolsaganak kiszamitasa (mm-ben)
Serial.print(Tavolsag, DEC); // az eredmeny elkuldese a soros porton keresztul a PC-re
Serial.println(" mm"); // mm kiirasa az eredmeny utan
if (Tavolsag <= 200 ) {
do{
analogWrite(5, LOW);
Serial.print("láb le");
analogWrite(6, 50);
Serial.println("kifele");
delay(100);
}while(Tavolsag==400);
}
else if(Tavolsag >= 400){
do{
analogWrite(6, LOW);
Serial.print("láb le");
analogWrite(5, 50);
Serial.println("befele");
delay(100);
}while(Tavolsag==200);
}
digitalWrite(6,LOW);
digitalWrite(5,LOW);
}
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
-
- DrótVégénSzéndarab
- Hozzászólások: 19
- Csatlakozott: 2014. november 18. kedd, 22:05
Re: segítség!!
Így jó lehet? Az a baj hogy Lineármotor nélkül nem tudom kipróbálni :/ Ha feltesszük, hogy jó, hogyan tovább? A pwm-et kipróbáltam DC motron azon működik. A sebességét tudom állítani rajt.
Re: segítség!!
A motorsebesseget potmeterrel hangolhatod? Vagy azzal mi a cel?
Egy blokkdiagramm/feladatkorvonal segitene. most ott jarunk, hogy UH szenzorral nezzuk hol vagyunk. DE
ha a tav<200 -> elmegyunk 400-ig
ha a tav>400 -> elmegyunk 200-ig.
Kimaradt: ha elertem a hatart, STOP-ra kell a motort tenni!
Ezt adja a 5= LOW, 6=LOW.
Mi van 200...400 közt?
Fontos! Ha PWM-et hasznalsz, nem javasolt a LOW/HIGH használata. E helyett analogwrite(5,0) illetve analogwrite(5,255).
Miért? A PWM abelső timerrel küld valamit a lábra (hardware alapon). A Low/High meg a belső felhúzót kényszeríti - totál más módon.
Hasonlat: ha egy villanymotorunk van, akkor nem úgy lassítjuk, hogy lefogjuk a tengelyt, hanem a feszültséget csökkentjük...
Debug: ha azt írja ki: "láb le" nem tudod, hogy az 5 vagy 6-os lábról van szó....
Egy blokkdiagramm/feladatkorvonal segitene. most ott jarunk, hogy UH szenzorral nezzuk hol vagyunk. DE
ha a tav<200 -> elmegyunk 400-ig
ha a tav>400 -> elmegyunk 200-ig.
Kimaradt: ha elertem a hatart, STOP-ra kell a motort tenni!
Ezt adja a 5= LOW, 6=LOW.
Mi van 200...400 közt?
Fontos! Ha PWM-et hasznalsz, nem javasolt a LOW/HIGH használata. E helyett analogwrite(5,0) illetve analogwrite(5,255).
Miért? A PWM abelső timerrel küld valamit a lábra (hardware alapon). A Low/High meg a belső felhúzót kényszeríti - totál más módon.
Hasonlat: ha egy villanymotorunk van, akkor nem úgy lassítjuk, hogy lefogjuk a tengelyt, hanem a feszültséget csökkentjük...
Debug: ha azt írja ki: "láb le" nem tudod, hogy az 5 vagy 6-os lábról van szó....
-
- DrótVégénSzéndarab
- Hozzászólások: 19
- Csatlakozott: 2014. november 18. kedd, 22:05
Re: segítség!!
A cél az lenne, hogy ne csak egyenáramot tudjunk a motornak adni, hanem mondjuk négyszögjelet, vagy tetszőleges bemenetet is (ha jól értettem). Gondolom ezért mondta a tanárom, hogy A/D átalakító kellene.
Nem vagyok benne biztos, hogy ez így jó, de eddig jutottam:
Nem vagyok benne biztos, hogy ez így jó, de eddig jutottam:
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
-
- DrótVégénSzéndarab
- Hozzászólások: 19
- Csatlakozott: 2014. november 18. kedd, 22:05
Re: segítség!!
Egyébként köszi, hogy segítesz majd írd le hogy viszonozhatnám
Re: segítség!!
A cél az lenne, hogy ne csak egyenáramot tudjunk a motornak adni, hanem mondjuk négyszögjelet, vagy tetszőleges bemenetet is (ha jól értettem). Gondolom ezért mondta a tanárom, hogy A/D átalakító kellene.
na ezt jó lenne hogyna képzeled.
- a motor tápja válztozik?
- a motor mozgás változik külső jel alapján? fix tápellátás?
Erről valami rajz/blokkdiagramm/folyamatábra kellene....
U.i.: Publikálást szeretnék kérni a megoldásról illetve fényképeket a tesztpadról/pnelről....
-
- DrótVégénSzéndarab
- Hozzászólások: 19
- Csatlakozott: 2014. november 18. kedd, 22:05
Re: segítség!!
Gondolom a pwm értéke változik. Ha pl egy egyenirányított szinuszjelet kényszerítünk a motorra akkor a szinuszjel elején pwm=0 a tetején pwm=255 a végén megint pwm=0 vagy valami ilyesmi. Azért kellene A/D átalakító, mert a sinust valahogy "számszerűsíteni" kell. Szerintem erre gondolt.
Re: segítség!!
Azaz
De milyen sűrűn változik? A pozicionálási részen belül a while ciklusban?
A "gondolom", meg a "szerintem" nem mérnöki feladatmeghatározás. Munkahelyen ezen megfogalmazások szoktak néhány MFt kiadásba kerülni.
Hogyan szól az _eredeti_ feladat/témakiírás?
Kód: Egész kijelölése
pwm=ADCérték/4;
A "gondolom", meg a "szerintem" nem mérnöki feladatmeghatározás. Munkahelyen ezen megfogalmazások szoktak néhány MFt kiadásba kerülni.
Hogyan szól az _eredeti_ feladat/témakiírás?
-
- DrótVégénSzéndarab
- Hozzászólások: 19
- Csatlakozott: 2014. november 18. kedd, 22:05
Re: segítség!!
Tesztberendezés zongora repetíciós frekvencia meghatározásához. Ez a kiírás Ezen kívül szóban kapom az utasításokat, azok is zavarosak, főleg, hogy felét nem is tanultam/tanították/láttam.
-
- DrótVégénSzéndarab
- Hozzászólások: 19
- Csatlakozott: 2014. november 18. kedd, 22:05
Re: segítség!!
Eddig így állok.
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Re: segítség!!
Ne használj delay-t soha! A várakozás idejére a mikrokontroller megáll, és nem hajt végre semmit a programodból. Sok kellemetlenséget okoz. (Nem tud reagálni bejövő jelre, felhasználói interakcióra, stb.) Rögtön az elejétől kezdve érdemes időzítésben gondolkozni.
Re: segítség!!
Még elégé hiányos a programod pl több helyen is ciklusban kiugrási feltételként vizsgálod „Tavolsag” változót.
Közben a cikluson belül sehol nem frissíted a Tavolsag változó értékét! Így sosem fog kiugrani a ciklusból.
Más:
Talán ez még nem időszerű, de sajnos akármilyen motorról van, szó mindnek van forgási tehetetlensége. Tehát lassabban gyorsul, mint ahogy vezérelnéd, és megállítani sem lehet 1 stop utasítással.
Közben a cikluson belül sehol nem frissíted a Tavolsag változó értékét! Így sosem fog kiugrani a ciklusból.
Kód: Egész kijelölése
…
digitalWrite(TriggerPin, LOW);
EchoTime = pulseIn(EchoPin, HIGH); // az Echo labon a magas allapot idejenek merese
// Tavolsag Itt kap utoljára értéket
Tavolsag = 10*EchoTime/58; // a celtargy tavolsaganak kiszamitasa (mm-ben)
Serial.print(Tavolsag, DEC); // az eredmeny elkuldese a soros porton keresztul a PC-re
Serial.println(" mm"); // mm kiirasa az eredmeny utan
if (Tavolsag <= 200 ) {
do{
analogWrite(5, 0);
Serial.print("5.láb le");
analogWrite(6, pwm);
Serial.println("kifele");
delay(100);
// itt közben Tavolsag nem változik???
}while(Tavolsag==400); // Ha mégis változna a Tavolsag? Az előző 2 Print és Delay miatt biztosan ritkán kapja el a Tavolsag==400 értéket! Vagyis innen sosem fog kiugrani!
…
Más:
Talán ez még nem időszerű, de sajnos akármilyen motorról van, szó mindnek van forgási tehetetlensége. Tehát lassabban gyorsul, mint ahogy vezérelnéd, és megállítani sem lehet 1 stop utasítással.