segítség!!

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Lezárt
Naszalyvadas
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2014. november 18. kedd, 22:05

Re: segítség!!

Hozzászólás Szerző: Naszalyvadas »

Debugot hogy tudok beszúrni?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: segítség!!

Hozzászólás Szerző: Robert »

É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:

Kód: Egész kijelölése

serial.print ("itt ezt csinálom");
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: segítség!!

Hozzászólás Szerző: Robert »

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()
Naszalyvadas
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2014. november 18. kedd, 22:05

Re: segítség!!

Hozzászólás Szerző: Naszalyvadas »

Oks elkezdtem újból elölről.
feladat1.docx

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.
Naszalyvadas
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2014. november 18. kedd, 22:05

Re: segítség!!

Hozzászólás Szerző: Naszalyvadas »

Í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.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: segítség!!

Hozzászólás Szerző: Robert »

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ó....
Naszalyvadas
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2014. november 18. kedd, 22:05

Re: segítség!!

Hozzászólás Szerző: Naszalyvadas »

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:
feladat1.docx
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Naszalyvadas
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2014. november 18. kedd, 22:05

Re: segítség!!

Hozzászólás Szerző: Naszalyvadas »

Egyébként köszi, hogy segítesz :) majd írd le hogy viszonozhatnám :)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: segítség!!

Hozzászólás Szerző: Robert »

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....
Naszalyvadas
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2014. november 18. kedd, 22:05

Re: segítség!!

Hozzászólás Szerző: Naszalyvadas »

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.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: segítség!!

Hozzászólás Szerző: Robert »

Azaz

Kód: Egész kijelölése

pwm=ADCérték/4;
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?
Naszalyvadas
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2014. november 18. kedd, 22:05

Re: segítség!!

Hozzászólás Szerző: Naszalyvadas »

Tesztberendezés zongora repetíciós frekvencia meghatározásához. Ez a kiírás :D 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.
Naszalyvadas
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2014. november 18. kedd, 22:05

Re: segítség!!

Hozzászólás Szerző: Naszalyvadas »

feladat1.docx
Eddig így állok.
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: segítség!!

Hozzászólás Szerző: vargham »

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.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: segítség!!

Hozzászólás Szerző: kapu48 »

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.

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!
…

8)

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.
Lezárt