Keresés

Részletes keresés

Rolandl200 Creative Commons License 2014.10.28 0 0 450

Köszönöm!  Jó ötlet a külön lejátszó,  csak itt fontos lenne az hogy az arduino egység tudja vezérelni mikor mi jelenjen meg(ill én a távirányítón) .  A TFT vél szerelt shield  amiben sd olvasó is van az nem jó nekem?  Vagy esetleg megoldhaó, a külső lejátszó beágyazott vezérlése?  A raspberry tudja e egyidejűleg vezérelni a kijelzőket és a szervókat? Minden eszköz összehangolt működése fontos! 

Előzmény: Prof (449)
Prof Creative Commons License 2014.10.27 0 0 449

A video nehéz ügy. Az arduino agya (Atmel 328, de még a Mega2560 is) alkalmatlan ilyen nagyságrendű és sebességű jelfeldolgozásra, vagyis ezt egy külső egységgel kell megoldanod.

Raspberry PI elvileg tudja ezt, egyúttal kicsit ágyúval verébre megoldás is (bár kérdés, hogy milyen szintű videoról van szó, illetve mennyire jelentős a többi feladat).

 

Előzmény: Rolandl200 (448)
Rolandl200 Creative Commons License 2014.10.26 0 0 448

Sziasztok!

Abban szeretném kérni a segítségeteket, hogy egyáltalán megoldható, lehetséges-e arduinoval, (vagy raspberryvel) amit szeretnék csinálni?

Ami hozzá szükséges:

 

2 szervo vezérlés

2 stepper vezérlés

1 relé kapcsolása

1 távolság szenzor, ami az egyik szervót vezérli

1 sd kártya vezérlő  kép és videónak

2 kijelző,

   az egyik mindenképp 2,4"tft (érintő nem fontos), a másik vagy 2 soros lcd vagy szintén tft.

1 kapcsolósor (menü)

 

Ami a lényeg, hogy az egyik kijelzőn levö menüvel vezéreljem az eszközöket és választott képeket küldhessek a 2,4" tft-re.

Lényegében egy projektorról van szó.

Köszönöm szépen!

 

 

 

Prof Creative Commons License 2014.10.05 0 0 447

Igen. :-)

Előzmény: Vargham (443)
Prof Creative Commons License 2014.10.05 0 0 446

Senki sehol nem mondta/írta, hogy profi cucc. Massimo is mindig ezzel kezd, hogy ugyan fejlődnek, meg erősödnek, meg Intel meg ezaz, de ez attól még egy oktatási (kvázi  hobbi) platform elsősorban.

Előzmény: Törölt nick (444)
Törölt nick Creative Commons License 2014.10.05 0 0 445

Átkozott magyar kiosztás.

Előzmény: Törölt nick (444)
Törölt nick Creative Commons License 2014.10.05 0 0 444

Nem hiszem hogy ay lett volna a cél, hogy jó sok shield-et lehessen használni, függetlenül attól, hogy fizikailag lehetséges csatlakoztatni őket. Ey ay Aurduino ilyen hobbi cucc szerintem, nem profi célokra szánták.

Előzmény: Vargham (443)
Vargham Creative Commons License 2014.10.05 0 0 443

A láb ütközés a legtöbbször átkötéssel megoldható. Ha más nem, akkor a shield nem lesz rádugva, hanem külön összedrótozva. Mondjuk akkor már jobb saját hardvert gyártani. Akár proto nyákon, akár saját maratással.

 

A szoftver nagyobb probléma. A shieldek könyvtárait 90%-ban úgy írják meg a készítők, hogy nem gondolnak arra, hogy más eszközöket is csatlakoztatsz a mikrokontrollerhez. Vagyis delay-t használ, magára húzza az egész SPI buszt, beleáll az i2c busz olvasásába, fix megszakítást használ, stb.

Mi rendszeresen használunk Arduino-t prototipizáláshoz. Gyorsan, könnyen ki lehet próbálni új ötleteket. De olyan még sosem volt, hogy két, különböző eszközt használó ötletet csak úgy összegyúrjunk. Mindig az volt a vége, hogy saját könyvtárat kellett írni az adott hardver kezeléséhez. Az pedig sok mérnöki munkaóra.

Előzmény: Prof (442)
Prof Creative Commons License 2014.10.03 0 0 442

Szia!

vfp válasza megfelel a valóságnak, legalábbis az alapelveket illetően.

A két kulcskérdés a táp, ez ugyanis több shield esetén problémás lehet, továbbá a lábak használata/kiosztása az egyes shieldek viszonylatában. Tehát lehet, hogy két shield mehetne, mert nem terhelik túl a tápot, de ütköznek, mert ugyanazt a lábat használnák egy adott feladatra. Végül szoftveresen sem mindegy, mert két komplexebb shield, plusz esetleg egy-két további könyvtár simán nehézkessé, adott esetben lehetetlenné teszi a programozást, mert nem lesz elegendő memória a teljes sketch számára.

Milyen shieldekről van szó egyébként?

Előzmény: Somodi Richard (440)
vfp Creative Commons License 2014.10.03 0 0 441

Szerintem ez így nem határozható meg.

 

Ha jól emlékszem, az UNO max áramfelvétele 500mA lehet (USB-ről). Külső tápról 700-1000mA.

A Shield-ek és a rájuk dugott eszközök általában az UNO-tól kapják a tápot, ezért erre kell figyelni.

A PIN-ek max 40mA-rel terhelhetők  

 

Nem mindegy, hogy egy data-shield-et, vagy egy LCD shield-et kötsz rá.

Előzmény: Somodi Richard (440)
Somodi Richard Creative Commons License 2014.10.03 0 0 440

Siasztok!

 

Az lenne a kérdésem, hogy hány db shield-et lehet rátenni egy arduinora?

Törölt nick Creative Commons License 2014.09.25 0 0 439

Nálam a végcél egy ECU lenne egy gázturbinához. Először csak mérnék, környezeti hőmérséklet, nyomás és hőmérséklet a kompresszor után, olajhőmérséklet és nyomás, valamint fordulatszám. Ezeket esetleg naplózni, vagy a PC-re, vagy SD-kártyára.

Törölt nick Creative Commons License 2014.09.25 0 0 438

Ugye hogy ugye?

Előzmény: nagyharcos (437)
nagyharcos Creative Commons License 2014.09.25 0 0 437

Erre nem gondoltam, de jó ötlet :). 

Előzmény: Törölt nick (436)
Törölt nick Creative Commons License 2014.09.25 0 0 436

Nekem a led naplemente tetszik a legjobban. Gondolom nem valami léptetőmotor fogja vonszolni a ledet....:-)

Előzmény: nagyharcos (434)
Prof Creative Commons License 2014.09.25 0 0 435

Érdekes kihívások tömkelege... :-) De jó móka lesz, az tuti.

Előzmény: nagyharcos (434)
nagyharcos Creative Commons License 2014.09.25 0 0 434

A végcél akváriumok vezérlése lesz. Sokmindent összeszedtem már különböző fórumokról, de én szeretem tudni, hogy mi mit csinál és miért, meg persze a saját számíze szerint szeretném jól megcsinálni éls tanulni belőle.

A vezérlő terveim szerint a következő folyamatokat vezérli: neon világítás időzítése; led világítás időzítése; led naplemente, napfelkelte; 3 dózispumpa adagbeállítás és időzített adagolás; hűtés, fűtés vezérlés; co2 és levegő pumpa időzített üzemeltetés, szűrők leállítása meghatározott időintervallumra, UV szűrő időzítésés, vízszint figyelés, riasztás alacsony vízszintnél. A különböző elemek vezérlése logikailag összefügg. Jelenleg ezeket OMRON ZEN-el oldom meg (ott egy kicsit egyszerűbb a programozás, cserébe korlátozott a programozható relék száma, sok a korlát, nagy helyet foglal... és már nincs benne kihívás).

A hobbitársaktól ötleteket kapva belevágtam ebbe és tetszik.

 

Előzmény: Prof (433)
Prof Creative Commons License 2014.09.25 0 0 433

Mi a cél?

Előzmény: nagyharcos (432)
nagyharcos Creative Commons License 2014.09.23 0 0 432

Köszönöm az eddigi segítséget, sokat tanultam belőle.  Most a DS18B20 hőmérővel ismerkedem. Ha elakadok szólok. :)

Az LCD beüzemelése engem is szivatott. Visszaolvasva a tanácsok alapján nagy nehezen ráakadtam a megfelelő librarie-re, amivel végre működik is.

Előzmény: Prof (431)
Prof Creative Commons License 2014.09.21 0 0 431

:-)

Előzmény: Törölt nick (430)
Törölt nick Creative Commons License 2014.09.21 0 0 430

Én momentán teljesen le vagyok nyűgözve....:-)

Előzmény: Prof (429)
Prof Creative Commons License 2014.09.21 0 0 429

Mi ez a síri csönd?

Prof Creative Commons License 2014.09.16 0 0 428

Öm... Ok, az alapelv jó, ugyanakkor....

 

int alap = 0;     // Kicsit felesleges ezekhez a változókhoz értéket rendelni, mert az első előforduláskor automatikusan kapnak egy releváns értéket.
int atlag = 0;
int adag = 0;    // Itt az első lehetséges galiba, ha a ciklusok számát felemeled mondjuk 100-ra (100-zal oszt átlagot, 100 mintavételből), akkor az int típusú változó 32767-nyi maximális értéke rohadt gyorsan túl fog csordulni. 10 mintavételnél ez nem akkora gond (1023×10=10230), így technikailag 32-ig mehet fel az átlagolás ciklusainak száma. Tesztelni kell, hogy milyen mértékű iterálás kell az elégségesen sima szóráshoz. Javasolt változótípus: unsigned long. (Ennek a maximális értéke uszkve 4,3 milliárd. A kető között csak a sima long [2,15 milliárd] és az unsigned int [65 ezer] van. Előbbi kettő bőven sok, utóbbi elég lehet, az unsigned int 64-szeres mintavételt elbír.)
    for (int i=1; i <= 10; i++)
    {
     alap = analogRead(pot1);
     constrain(alap, 1, 1023);   // Ez ide tökéletesen felesleges, mert az analogRead() eleve nem mehet 0 alá és 1023 fölé (hacsak nincs rosszul deklarálva a változó, pl. byte-ként, mert ugye akkor 255-nél fordul).
     alap = map(alap, 1, 1023, 1, 60);  // Változatlanul nem értem, hogy miért van szükség a map-re ebben a fázisban, tekintetbe véve, hogy a bemeneti analóg érték átlagolása (ezzel a szórásának tekintélyes csökkentése) a célunk, nem az, hogy kiderüljön, pontosan hova "esik" az analóg érték az 1-től 60-ig terjedő értelmezési tartományban.
     adag += alap;
      }
atlag = adag / 10;

 

És van benne még egy galiba: az elemhívása elején az adag változó a korábbi értéket tartalmazza (hacsak a sketch más része felül nem írja), azért nem 0-ról, hanem az előző mérés eredményéről indul az összesítés (vagyis minden hívásnál szép lassan mászik fölfelé, amit csak a constrain() kompenzál a felső határnál).

 

 

Nálam ez így néz ki (csak az átlagolás rész, amit a beolvas() hív meg és csak globális változókkal dolgozik).

 

const int pot1 = A3;              // 1. potméter A2-n
int beolv;                              // a potméter aktuális értéke
unsigned long beolvas;        // az átlagoláshoz használt átmeneti változó ("gyűjtő")
int atlagolas = 100;              // hány lépésben átlagoljon. A magasabb érték lassabb, de stabilabb mintavételt ad. Maximális elvi értéke kb. 4,2 millió

void beolvasas() {
  beolvas = analogRead(pot1);
  for (int i = 0; i < (atlagolas-1); i++) {
    beolv = analogRead(pot1);
    beolvas = beolvas + beolv;     // csak a könnyebb érthetőség kedvéért
  }
  beolvas = beolvas/atlagolas;
  beolvas = constrain(beolvas,0,1023);    // a számítási hibából eredő túlcsordulást levágja
}

 

constrain() csak a "tisztításhoz" van benne, map() egyáltalán nincs, mert a feladat nem az, hogy megatározzuk, hogy az 1-től 60-ig terjedő tartományban épp hova esik a potméter aktuális értéke, hanem az, hogy kiderítsük, a korábbi méréshez (referenciához) képest változott-e a potméter helyzete vagy sem. A kimeneti értéke a beolvas változóban van tárolva (ami ugye egy sima int), értéke 0 és 1023 között lehet.

Előzmény: nagyharcos (427)
nagyharcos Creative Commons License 2014.09.16 0 0 427

Megküzdöttem az átlagolással:

 

int alap = 0;  
int atlag = 0;
int adag = 0;
    for (int i=1; i <= 10; i++)
    {
     alap = analogRead(pot1);
     constrain(alap, 1, 1023);
     alap = map(alap, 1, 1023, 1, 60);
     adag += alap;
      }
atlag = adag / 10;

 

Ha a cikluson kívül használtam a constraint, nem volt tökéletes, így viszont jó.

Köszönöm a rávezetést.

Előzmény: Prof (426)
Prof Creative Commons License 2014.09.15 0 0 426

Átlagolás módszertan (ez nekem is érdekes tapasztalás volt, de self-learning alatt ez belefér).

1. csinálsz egy külön rutint, mondjuk void atlag() {...}

2. ezen belül lesz egy

unsigned long osszeg

változó. Ezt másutt nem kell használni, így nem kell globális változóként deklarálni.

3. for .. ciklus akárhány elemmel (mondjuk 0-tól 39-ig az 40 elem). mérsz, az osszeg változóhoz hozzáadod a mért értéket, majd elölről, amíg a 40 kör le nem fut

4. elosztod az osszeg-et a mérések számával (40-nel), ez lesz a nyers adatod,

5. ezt megvágod constrain-nel (a végállások miatt fontos, 0 alá nem mehet, de tapasztalataim szerint a kerekítési hibák miatt képes 1023 fölé szaladni).

 

Mérések alapján kb. ezer tételes átlagolásnál kerül 0,5 mp közelébe a ciklus futása (ami egyrészt ésszerűtlen, másrészt még mindig rohadt gyors).

 

 

Igen, minden mérést átlagolj! Ha a fenti külön elemet legyártod, akkor azt bármikor hívhatod.

Előzmény: nagyharcos (425)
nagyharcos Creative Commons License 2014.09.15 0 0 425

1. átlagolásnál nem értem mi a gond: két szám összegét kettővel osztom

2: a loop-ban lévő mérést is átlagoljam?

3. a teszt közben ezt az értékadást és a return is kivettem.

 

Előzmény: Prof (423)
nagyharcos Creative Commons License 2014.09.15 0 0 424

sajnos "receg" az értékek között... 

egy változtatás 3-4 eredményt ad, mégsem jó :(

Előzmény: nagyharcos (422)
Prof Creative Commons License 2014.09.15 0 0 423

1. Az átlagolás még mindig nem jó. Azóta mondjuk én is rájöttem (ugye a diploma hiánya), hogy a sima "iskolás" módszer az értékek összeadásával, majd az értékek számosságának elosztásával jobb (stabilabb) eredményt ad. Ez sem ördöngősség, és mivel egyébként is át kell írni, ezt is érdemes átvarázsolni. A gond a változók kezelésével van elsősorban.

 

2. Ez is a tesztelés eredménye, hogy praktikus minden mérést átlagolni.

 

3. A void loop () nyitása mi? Egyből felülírod valami random számmal az előzőleg jól kiszámolt értéket?

 

4. if () alá nem kell return ide, mindenképp kiszáll belőle.

Előzmény: nagyharcos (422)
nagyharcos Creative Commons License 2014.09.15 0 0 422

Teleírom a fórumot lassan... Egy mérésssel és egy változóval kevesebb! Működik. Egy hibája van mindössze - először minden esetben meghívja a kijelzést (mivel először az átlaghoz hasonlít).

 

// Carbo
const int pot1 = 5;  // 1. potenciometer A5-re kotve
int alap1;  
int alap11;
int adag1;
int atlag1;

void setup()
{
 Serial.begin(9600);
  alap1 = analogRead(pot1);
    for (int i=0; i <= 20; i++) // potmeter zavarszűrés
    {
     alap11 = analogRead(pot1);
     atlag1 = (alap1+alap11)/2;
     }
  constrain(atlag1, 1, 1023);
  atlag1 = map(atlag1, 1, 1023, 1, 60);
  }

void loop()
{
//Carbo vezérlés
  atlag1=adag1;
  adag1 =  analogRead(pot1);
  adag1 = map(adag1, 0, 1023, 1, 60);
    if (adag1 != atlag1)
      {
        kiirasCarbo();
        atlag1=adag1;
        return;
      }
 }
 
void kiirasCarbo()
{
 Serial.println("uj adag:");
 Serial.println(adag1);
    }

Előzmény: Prof (421)
Prof Creative Commons License 2014.09.15 0 0 421

Már hogy a rákba ne tudnád? Van egy adagértéked, amely a poti aktuális állapotától függ. Vagyis ha tekerődik a poti, változik az adag, méghozzá pont oda, ahol a poti áll. Ha tudod az adagot, tudod, hogy milyen tartományban kell(ene) állnia a potinak. Ha nem ott áll (ez egy méréssel megoldható), akkor változtatni akarod a mennyiséget...

Előzmény: nagyharcos (419)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!