segítség!!

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

segítség!!

HozzászólásSzerző: Naszalyvadas » 2014. november 19. szerda, 17:32

Sziasztok. Egyetemi feladatban szeretném a segítségeteket kérni. Egy zongorabillentyű nyomkodó szerkezetet kellene csinálnom. Lineármotort kellene működésbe hoznom ultrahangos szenzor segítségével(az volt itthon), a motorváltás H híddal történne. Timert is be kellene építeni, hogy meg tudjam adni hányszor fusson le az adott ciklus egy perc alatt, de a példaprogram se működik a Nanomon. A bemenetet nekem kell megadni, és változtathatónak kell lennie (ad átalakító vagy valami ilyesmit mondtak). Illetve a motort szabályoznom kellene PD szabályzóval. Elkezdtem csinálni, de új vagyok az arduinó programozásban, és elakadtam. Kérlek segítsetek. Ha valaki segít az árban meg tudunk egyezni. Nagyon sürgős lenne.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9973
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: segítség!!

HozzászólásSzerző: Robert » 2014. november 19. szerda, 18:22

A blink megy?:)

Tipp: a diplomamunkát és az éves feladat megírásáért morogni szoktam. Segíteni szívesen, de ahhoz kell hogy _TE_ értsd meg a működést, a lépéseket.
Most hol jársz?
- folyamatábra/diagramm
- részfeladatok megvalósítása (kód?)
- Irodalomkutatás mire épül (van?)?
- Részfeladatok körbejárva? HW megtervezve/lemásolva? Mintakód megy?

Ultrahangos minta megy? soroson visszaírja a távolságot? (melyik UH szenzort használod?)
Motorvezérlő oda-vissza kapcsolás H-híddal megy? Motor hiányában zsebizzó is jó rá.
Melyik H-Hidat használod?

(ad átalakító vagy valami ilyesmit mondtak)

:roll: :oops: Az hogy AD, mond valamit?
AD Studio ?
https://www.youtube.com/watch?v=nCANspmGx1E

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ásSzerző: Naszalyvadas » 2014. november 19. szerda, 19:06

Szia :)

Nem azt kérem, hogy írd meg helyettem, értenem kell az egészet, hogy majd el tudjam magyarázni, csak elakadtam, és senki nem ért hozzá a környezetemben. Az UH szenzor működik, kiadja a távolságot (ezt kipróbáltam). A H híd működését értem, félhidak vannak, mindegyikhez van led is kapcsolva. Írtam több programot is. A Feladat1-el
feladat1.docx
az a baj, hogy nagyon gyorsan lefut a program, a motor pedig valamiért túllendül mondjuk 510-ig. Megnézi 510-nél előjelet vált megy balra majd megnézi 504-nél ami még ugye mindig 500 felett van és előjelet vált, megy jobbra, és így rezonál csak egy kis érték közt. Eddig jutottam :( A Timer működését nem értem, vagy csak rosszul értelmezem (németet tanultam, angolul csak pár évet gimiben meg filmekből, játékokból stb. ). Mechatronikai mérnöknek tanulok, tanultam szabályozástechnikát, tudom mi az az erősítő meg ad converter papíron, de soha nem láttam olyat, illetve gyakorlati alkalmazását se mutatták sohasem. :/ AD converter azért kell, mert mondjuk sinusjelet akarunk rákényszeríteni a rendszerre, azt átalakítja számmá, összehasonlítja az erősítővel beszorzott kimenettel és korrigál valamit (legalábbis én ennyit értettem meg a magyarázatból).

Fealadat1:

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

#define EchoPin 2
#define TriggerPin 3
unsigned long EchoTime = 0;
unsigned long Tavolsag = 0;
int potpin = 2;
int flag = 1;
byte pwm=50;
  // Kezdeti jelkitoltes

 
void setup() {
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  analogWrite(5, pwm);
  analogWrite(6, pwm);
 pinMode(TriggerPin, OUTPUT);
 pinMode(EchoPin, INPUT);
 Serial.begin(9600);
}
void loop() {
  flag=1;
 digitalWrite(TriggerPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(TriggerPin, LOW);
 EchoTime = pulseIn(EchoPin, HIGH);
 Tavolsag = 10*EchoTime/58;
 Serial.print(Tavolsag, DEC);
 Serial.println(" mm");

// pwm=analogRead(potpin);



if (Tavolsag <200 || Tavolsag >500){
  flag = flag *(-1);
}
if(flag==1){

  analogWrite(6, pwm);
  Serial.println("kifele");
  delay(100);
  }


else if(flag !=1){
  analogWrite(5, pwm);
  Serial.println("befele");
  delay(100);
}
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ásSzerző: Naszalyvadas » 2014. november 19. szerda, 19:15

jah leesett :D
Analóg/ Digital converter :D
Nem shieldet használok, hanem rendes h hidat, és 2 digitális pin HIGH-ra emelésével szabályzom. Ha 5.pin van felhúzva akkor balra forog ha 6. akkor jobbra. Ilyen motrom van: http://www.h2wtech.com/Products/ShowPro ... ductid=126
egy sima 5V-os DC-n tudok itthon kisérletezni, a laborban rá tudom szerelni a lineármotorra is.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9973
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: segítség!!

HozzászólásSzerző: Robert » 2014. november 19. szerda, 20:17

H-hidad melyik van, hogy 2 PWM-mel hajtod meg?
Egymással a 2 PWM szembedolgozik. Ezt érzem hibának.

Tisztán olyan kódot keress/írj, ami a motort egyik irányba viszi ill. a másikba - adott sebességen. Ez a leírás alapján:
5,6 output
Irany 1:
5 - LOW szint
6 - PWM=128 (KÖZEPES SEBESSEG)
waitms 10000 (10 secig megy)

Irany1 lassu
5 - LOW szint
6 - PWM=32
waitms 10000 (10 secig megy)

Masik irany
6 - LOW szint
5 - PWM=128
waitms 10000 (10 secig megy)

Masik irany
6 - LOW szint
5 - PWM=16
waitms 10000 (10 secig megy)


Próbáld meg csak ezt.
Én a kódodban ennek a kezelésnek latom hibáit...


Illetve:

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

...

if(flag==1){

  analogWrite(6, pwm);
  analogWrite(5, 0);

  Serial.println("kifele");
  delay(100);
  }


else if(flag !=1){
  analogWrite(5, pwm);
  analogWrite(6, 0);
  Serial.println("befele");
  delay(100);
}
...


A PWM-et ne bonyolitsd AD-vel. Adj neki fix erteket. (0...255)

Ja ez is hibás:

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

pwm=analogRead(potpin);

analog jel: 0...1023
pwm: 0...255

Ha így számolsz, akkor a pwm 1/4 útom nax érték, majd 1/4 hosszon ->255 és még ez 2x.
Ami jó lenne:

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

pwm=analogRead(potpin)/4;



Első nekifutásra....

De a programot szedd szét részfeladatokra. És amikor az _összes_ részfeladat megy, akkor kell azokat összegyúrni.

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ásSzerző: Naszalyvadas » 2014. november 19. szerda, 20:40

Ez jó, a motor már megy. De az fennáll, hogy csak egy helyben remeg amiatt, amit előbb írtam. Ha túl nagyra választom a delayt az meg alapból nem jó, mert a nyomkodási sebességet változtatnom kell nagyon gyorsra is. A H hidat a tanárom csinálta, szóval nem hiszem hogy lenne fajtája :) a potmétert pedig még nem raktam be, az majd később jön :)

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9973
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: segítség!!

HozzászólásSzerző: Robert » 2014. november 19. szerda, 20:47

H-hid rajz rendel.....
_nem_ a vezerles erdekel.

Az egyhelyben remegő motor az vezérlési hibára utal ugyanis....


A kódot _LÉPÉSENKÉNT_ fejlesztik, nem itt és ott egy kicsit!
Te ez utóbbit csinálod - emiatt káoszba fullad. Ha egy funkció _stabilan_ megy, utána (de csak utána) a következő feladatra kell lépni....


:twisted: :evil:

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9973
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: segítség!!

HozzászólásSzerző: Robert » 2014. november 19. szerda, 20:48

H híd:
https://www.google.hu/search?q=h+bridge+schematic

4 tranzisztor/FET van benne. Ezt 2 vezérlőjellel hajtod. Hogyan?

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ásSzerző: Naszalyvadas » 2014. november 19. szerda, 21:21

jah és az A/D convertert és a szabályzót nem teljesen értem, hogy hogyan kellene belerakni :/

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ásSzerző: Naszalyvadas » 2014. november 19. szerda, 21:24

A végfokomon 4 db fél H híd van. 2 db fél H híddal vezérelhető a motor.

https://www.google.hu/search?q=half+h+b ... UoAA&dpr=1

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ásSzerző: Naszalyvadas » 2014. november 19. szerda, 21:33

Hu bocs az összevisszaságért csak összevissza kapom meg a válaszokat. Szóval a motor 2 kivezetése 2 fél H hídba van bekötve. A fél H hidakat digit pinekkel tudom vezérelni. Ha felhúzom kap áramot ha nem nem. Szóval ha az egyik fél H hídra adok áramot akkor a motor jobbra forog ha a másikra akkor balra.

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ásSzerző: Naszalyvadas » 2014. november 19. szerda, 21:48

Lépésenként próbáltam. A szenzor működik :) utána próbáltam egy sima oda-vissza pörgést(ki be mozgást) beletenni, ami dc motorral ment, de lineármotorra szerelve nem. Itt tartok :)

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9973
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: segítség!!

HozzászólásSzerző: Robert » 2014. november 19. szerda, 21:50

Rendben. Kerek rajzot.
Skiccet.

Az egyik láb a 1/2 hid felso es a masik also felét vezérli,
a másik láb meg forditva?

na akkor maradjunk tisztán a motorvezérlésnél.
Ha mindkét lábra ekkor adtál PWM-et egyidőben, a tranzisztoron keresztül a tápot összezártad...

azaz:
6=H; 5=L - balra
6=L; 5=H - jobbra?

Ha igen akkor a H helyett:
analogwrite (5,0...255); 6=L - allithato a sebesseg (mas a 0...255, mas a sebesseg)
analogwrite (6,0...255); 5=L

Csak ennyi legyen a teszt!


AD és szabályozó még _kimarad_

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9973
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: segítség!!

HozzászólásSzerző: Robert » 2014. november 19. szerda, 21:52

Akkor a lenarmotor vezerlest kell helyrerakni, ha nem olyan mint a DC motor. Azaz ezen a feladat(reszen) nem tudsz tovabbmenni a linearmotor nelkul.

Csinald meg az AD -> PWM illesztest a DC motoros motorvezerlesre.
Ja es legyen soros debug!



Amúgy hol van az emliett timer?

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ásSzerző: Naszalyvadas » 2014. november 19. szerda, 22:13

kapcsrajz.png
Igen úgy ahogy írtad.
5 L 6 H jobbra
5 H 6 L Balra
5 L 6 L Áll
5 H 6 H Áll

A (0....255) helyett én pwm-et adok rá ami nagyjából ugyanezt csinálja. Így a motor sebességét tudom működtetni. Nem tudom hogy mondjam el pontosan. A program gyorsabban lefut mint ahogy a lineármotor kimenne abba a helyzetbe ahova kellene neki. Próbáltam laborban. Ha 100-as delayt raktam az analogwrite után akkor mondjuk 1 centit ment ki, ha 1000-rest akkor 2 centit. Csak ugye ez minden pwm-nél más, és nagyon nagy pwm-nél nem használhatok ekkora delayeket, mert a motor nem fog tudni gyorsan mozogni.
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég