Keresés

Részletes keresés

Prof Creative Commons License 2019.02.16 0 0 3461

Üdv,

Állapotgépnek olvass utána!

Előzmény: Bazarghai (3460)
Bazarghai Creative Commons License 2019.02.13 0 0 3460

Szia!

 

Ez az ötlet egyben pofon egyszerű és briliáns!

Köszönöm, már be is "vertem" a kódba, tökéletesen működik!

 

Bazar

Előzmény: tibi-d (3459)
tibi-d Creative Commons License 2019.02.12 0 0 3459

Szia!

Bevezetsz egy másik változót, amit akkor változtatsz meg, amikor végrehajtod a "B" feladatot. Vissza pedig akkor mikor nem nulla a vizsgált feltétel. 

Tehát:

"A" feladat:

Ha (1. változó = 0 és 2. változó =1) akkor "B" feladat

Ha (1. változó = 1) akkor 2. változó = 1

 

"B" feladat:

2. változó = 0

,

,

,

 

Így a "B" feladat csak 1X fut le az 1. változó 1->0 átmeneténél.

Remélem sikerült kimozdítani a holtpontról.

Előzmény: Bazarghai (3458)
Bazarghai Creative Commons License 2019.02.12 0 0 3458

Sziasztok!

 

Egy érdekes problémám lenne, már minden formában próbálkoztam (gugli is jó barátom) de eddig semmi eredmény.

Adott "A" és "B" feladat.

"A" feladat folyamatosan fut a loop()-ban. Van egy változó amit figyelek, és adódik olyan körülmény (változó 0 értéket kap huzamosabb ideig), hogy ekkor "B" feladatot kell elvégezni. A probléma az, hogy ha a változó továbbra is 0, akkor a "B" feladat ne hajtódjon végre újra és újra, hanem várjon addig, míg a változó újra nagyobb lesz, mint 0 és "A" feladat újra végrehajtható.

 

Tehát olyan megoldás kellene, hogy "B" végrehajtás után kikapcsolja magát és induljon "A" feladattal, mikor a változó új, nullánál nagyobb értéket kap. 

 

Előre is köszönöm!

 

Bazar

Prof Creative Commons License 2018.10.08 0 0 3457

Pompás, írtam.

Előzmény: SzI1185 (3455)
Prof Creative Commons License 2018.10.08 -1 0 3456

Hobbinak jó, de arra számíts, hogy így soha nem fogsz haladni vele rendesen.

Előzmény: Gergö86 (3452)
SzI1185 Creative Commons License 2018.10.08 -1 0 3455

Így talán könnyebb lesz  imre.szabo.hun@gmail.com

Előzmény: Prof (3454)
Prof Creative Commons License 2018.10.08 -1 0 3454

Parádés lenne, ha megadnál egy elérhetőséget.

Előzmény: SzI1185 (3453)
SzI1185 Creative Commons License 2018.10.08 -1 0 3453

Fejlesztőt KERESEK

 

Keresek valakik vállalkozó szellemű szakembert, aki össze tud rakni egy kis Arduinos rendszert. Ha számlát is tudnál adni, még jobb lenne, de megoldható másként is.

 

Nem egy kész "terméket" kell kifejleszteni, csak egy kis részét, nem kell garancia se, pusztán "segítség" kell, hogy tovább tudjunk lépni. 

 

Röviden a feladat:

 

RFID olvasókat kell összekötni egy Arduino boarddal, majd WIFIn keresztül egy http requestben elküldeni amit kiolvasott.  Elvileg nagyon jó leírások vannak hozzá, mind a RC522 readeről, mind a wifire (beépített vagy ESP8266)

 

 

Üdv,

 

Imre

Gergö86 Creative Commons License 2018.10.08 -1 0 3452

Persze,nem is várom el.

3 éve írom ezt, ugyhogy nem kapkodok vele :)

Ott a gond, hogy még általánosban tanítottak egy kis Pascalt, azóta meg villanyszerelő vagyok, emiatt máshogy képzelem ezt is.

Ahogyan irtad a kapcsolós példádnál: vagy megy, vagy nem...a többit nem értem :)

Előzmény: Prof (3451)
Prof Creative Commons License 2018.10.08 0 0 3451

Nincs igazán.

Ha megcsináltad, az adott kódrészre szívesen ránézek, de ahogy eddig is, eztán sem fogok más helyett kódolni. Illetve kódolok, csak az ugye nem ingyenszolgálat lenne.

Előzmény: Gergö86 (3450)
Gergö86 Creative Commons License 2018.10.08 0 0 3450

Szia!

Köszönöm a részletes ismertetőt.

Igazából ez az eredeti "program" amit összeollóztam,  ebbe kellene beleoperálni ugye azt a 30 mp-et.

Kezdhettem volna akkor ezzel is az elején.... :)

Ha van kedved olvasgatni, (illetve jókat röhögni) :)

 

#include <GPRS_Shield_Arduino.h>
#include <SoftwareSerial.h>
#include <Wire.h>

#define PIN_TX    14  //sim
#define PIN_RX    15  //sim
#define BAUDRATE  9600
#define PHONE_NUMBER  "0670123456"

#define MESSAGE11 "mozgas a lakasban"
#define MESSAGE12 "mozgas a garazsban"



GPRS gprsTest(PIN_TX,PIN_RX,BAUDRATE);//RX,TX,PWR,BaudRate
#define riaszto 6         //váltó /  az rfid zöld ledje
#include <RCSwitch.h>      //rf 433mhz
#include <EasyTransfer.h>  //TX
EasyTransfer ET;           //TX
struct DATA_STRUCTURE{     //TX
int int_data;};            //TX
DATA_STRUCTURE myData;     //TX
 
  //wiegand:

#define MAX_BITS 100                 // max number of bits
#define WEIGAND_WAIT_TIME  3000      // time to wait for another weigand pulse.  

  //felvételek
 
boolean riasztoState=true;          // riaszto Státus aktív
boolean teraszajtostatus=false;  // teraszajtó Státus
boolean bejaratiajtostatus;         // bejárati ajtó Státus
boolean nappaliablak1status;     // nappali kis ablak Státus
boolean nappaliablak2status;     // nappali dupla ablak Státus
boolean haloablakstatus;            // háló dupla ablak Státus
boolean kisszobaablakstatus;    // kisszoba ablak Státus
// boolean villanyorastatus;        // villanyóra szekrény Státus

int bejaratiajtonyitas;         // bejárati ajtó nyitás
int bejaratiajtocsukas;         // bejárati ajtó csukás
int teraszajtonyitas;           // terasz ajtó nyitás
int teraszajtocsukas;           // terasz ajtó csukás
int nappaliablak1nyitas;        // nappali kis ablak nyitás
int nappaliablak1csukas;        // nappali kis ablak csukás
int nappaliablak2nyitas;        // nappali nagy ablak nyitás
int nappaliablak2csukas;        // nappali nagy ablak csukás
int haloablaknyitas;            // háló dupla ablak nyitás
int haloablakcsukas;            // háló dupla ablak csukás
int kisszobaablaknyitas;        // kisszoba ablak nyitás
int kisszobaablakcsukas;        // kisszoba ablak csukás
int villanyoranyitas;           // villanyora nyitás
// int villanyoracsukas;           // villanyora csukás


int aramsensor   = 4;             // áramszünet reléről érkező jel
int amplifier    = 9;             // amplifier relay


RCSwitch mySwitch = RCSwitch();   // rf 433mhz

  //wiegand:

unsigned char databits[MAX_BITS];    // stores all of the data bits
unsigned char bitCount;              // number of bits currently captured
unsigned char flagDone;              // goes low when data is currently being captured
unsigned int weigand_counter;        // countdown until we assume there are no more bits

unsigned long facilityCode=0;        // decoded facility code
unsigned long cardCode=0;            // decoded card code

  // interrupt that happens when INTO goes low (0 bit)
void ISR_INT0()
{
  //Serial.print("0");   // uncomment this line to display raw binary
  bitCount++;
  flagDone = 0;
  weigand_counter = WEIGAND_WAIT_TIME;  

}

  // interrupt that happens when INT1 goes low (1 bit)
void ISR_INT1()
{
  //Serial.print("1");   // uncomment this line to display raw binary
  databits[bitCount] = 1;
  bitCount++;
  flagDone = 0;
  weigand_counter = WEIGAND_WAIT_TIME;  
}

void setup()
{

  ET.begin(details(myData), &Serial);      //TX küldő
  Serial.begin(9600);
  myData.int_data = 151; ET.sendData ();   //rendszer ujraindult
  Serial.println("Ujraindult");               // kiírja
  while(!gprsTest.init()) { //gprs init
      delay(1000);
      Serial.print("init errorrn");
  }
  Serial.println("gprs init success");
 
 

 


  pinMode(aramsensor, INPUT);                 // áramszünet relé
  pinMode(amplifier, OUTPUT);                 // amplifier relékimenet
  pinMode(riaszto, OUTPUT);                   // váltó
  pinMode(13, OUTPUT);                        // LED(nincs funkciója)
  pinMode(11, INPUT);                         // wiegand DATA0 (INT0)
  pinMode(12, INPUT);                         // wiegand DATA1 (INT4)


  digitalWrite(aramsensor, LOW);              // áramszünet relé
  digitalWrite(amplifier, HIGH);              // amplifier relé kimenet
 
  digitalWrite(riaszto, LOW);                 // váltó
 
 
  mySwitch.enableReceive(1);          //pin2 = int1     // 433Mhz Receiver on inerrupt 0 => that is pin #2

  // binds the ISR functions to the falling edge of INTO and INT4
  attachInterrupt(0, ISR_INT0, FALLING);   // pin3 = int0 rfid
  attachInterrupt(4, ISR_INT1, FALLING);   // pin7 = int4 rfid


  weigand_counter = WEIGAND_WAIT_TIME;
}

       void loop()  {


int garazssensorValue       = analogRead(A0);  //mozgáserzékelök
int eloszobasensorValue    = analogRead(A1);
int konyhasensorValue       = analogRead(A2);
int kisszobasensorValue     = analogRead(A3);
int nappalisensorValue       = analogRead(A4);
int haloszobasensorValue  = analogRead(A5);
         
  //rf433mhz olvasás
 
  if (mySwitch.available()) {
  int value = mySwitch.getReceivedValue();
  if (value == 0) {
      Serial.print("Unknown encoding");
    }
    else {
      Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );
    }
    
    
  // RF nyitásérzékelők:
    
    bejaratiajtonyitas=mySwitch.getReceivedValue  ()== 10353326;     //bejárati nyitásérzékelő
    bejaratiajtocsukas=mySwitch.getReceivedValue  ()== 16544578;     //bejárati csukásérzékelő
    teraszajtonyitas=mySwitch.getReceivedValue    ()== 16665578;     //terasz nyitásérzékelő
    teraszajtocsukas=mySwitch.getReceivedValue    ()== 166644578;    //terasz csukásérzékelő
    nappaliablak1nyitas=mySwitch.getReceivedValue ()== 2074542;      // nappali kis ablak nyitás
    nappaliablak1csukas=mySwitch.getReceivedValue ()== 2084435;      // nappali kis ablak csukás
    nappaliablak2nyitas=mySwitch.getReceivedValue ()== 2078742;      // nappali nagy ablak nyitás
    nappaliablak2csukas=mySwitch.getReceivedValue ()== 2074535;      // nappali nagy ablak csukás
    haloablaknyitas=mySwitch.getReceivedValue     ()== 1071022;      // háló dupla ablak nyitás
    haloablakcsukas=mySwitch.getReceivedValue     ()== 1071015;      // háló dupla ablak csukás
    kisszobaablaknyitas=mySwitch.getReceivedValue ()== 16599978;     // kisszoba ablak nyitás
    kisszobaablakcsukas=mySwitch.getReceivedValue ()== 16588878;     // kisszoba ablak csukás
    villanyoranyitas=mySwitch.getReceivedValue    ()== 16777578;     // villanyora nyitás
 // villanyoracsukas=mySwitch.getReceivedValue    ()== 1657778;      // villanyora csukás
    
   
    if (bejaratiajtonyitas==true) bejaratiajtostatus = true;
    if (bejaratiajtocsukas==true) bejaratiajtostatus = false;
    
    if (teraszajtonyitas==true) teraszajtostatus = true;
    if (teraszajtocsukas==true) teraszajtostatus = false;
    
    if (nappaliablak1nyitas==true) nappaliablak1status = true;
    if (nappaliablak1csukas==true) nappaliablak1status = false;
    
    if (nappaliablak2nyitas==true) nappaliablak2status = true;
    if (nappaliablak2csukas==true) nappaliablak2status = false;
    
    if (haloablaknyitas==true) haloablakstatus = true;
    if (haloablakcsukas==true) haloablakstatus = false;
   
    if (kisszobaablaknyitas==true) kisszobaablakstatus = true;
    if (kisszobaablakcsukas==true) kisszobaablakstatus = false;
    
    mySwitch.resetAvailable();
  }
         

  int mozgasgarazs    =(garazssensorValue<400 || garazssensorValue>900)      // mozgásérzékelők érzékelése
  int mozgaseloszoba  =(eloszobasensorValue<400 || eloszobasensorValue>900)    
  int mozgaskonyha    =(konyhasensorValue<400 || konyhassensorValue>900)     
  int mozgaskisszoba  =(kisszobasensorValue<400 || kisszobasensorValue>900)     
  int mozgasnappali   =(nappalissensorValue<400 || nappalisensorValue>900)      
  int mozgashaloszoba =(haloszobasensorValue<400 || haloszobasensorValue>900)     





  //wiegand:

 // This waits to make sure that there have been no more data pulses before processing data
  if (!flagDone) {
    if (--weigand_counter == 0)
      flagDone = 1;    
  }
 // if we have bits and we the weigand counter went out
  if (bitCount > 0 && flagDone) {
    unsigned char i;
  Serial.print("Read ");
    Serial.print(bitCount);
    Serial.print(" bits. ");
 // we will decode the bits differently depending on how many bits we have
 // see www.pagemac.com/azure/data_formats.php for mor info
    if (bitCount == 35)
    {
      // 35 bit HID Corporate 1000 format
      // facility code = bits 2 to 14
      for (i=2; i<14; i++)
      {
        facilityCode <<=1;
        facilityCode |= databits[i];
      }
 // card code = bits 15 to 34
      for (i=14; i<34; i++)
      {
        cardCode <<=1;
        cardCode |= databits[i];
      }
      Serial.print("FC = ");
      Serial.print(facilityCode);
      Serial.print(", CC = ");
      Serial.println(cardCode);
    }
    else if (bitCount == 26)
    {
      // standard 26 bit format
      // facility code = bits 2 to 9
      for (i=1; i<9; i++)
      {
        facilityCode <<=1;
        facilityCode |= databits[i];
      }
 // card code = bits 10 to 23
      for (i=9; i<25; i++)
      {
        cardCode <<=1;
        cardCode |= databits[i];
      }
 //kártyaszámok kiíratása
      Serial.print("FC = ");
      Serial.print(facilityCode);
      Serial.print(", CC = ");
      Serial.println(cardCode);  
    }
    else {
      // you can add other formats if you want!
      Serial.println("Unable to decode.");
    }
    
 
    //kártya:
    
  if (cardCode==54685)
  {
    {

    digitalWrite(riaszto, !digitalRead(riaszto));   // ki/be kapcsolja a riasztót és ki/be kapcsolja az rfid zöld ledjét
   riasztoState = digitalRead(riaszto);             // read pin status
    Serial.println(riasztoState);                  
  }
 
   if (cardCode==54685 && riasztoState == 0)     

  {
     
    digitalWrite(amplifier, LOW);                  //bekapcsolja az amplifiert
    Serial.print("gergo riaszto kikapcsolva ");
    myData.int_data = 152; ET.sendData ();          //lejátsza:riasztó kikapcsolva

   digitalWrite(amplifier, HIGH);                //kikapcsolja az amplifiert

   
  }
 
  }
 
  //cleanup and get ready for the next card
  //törli a kártyaszámokat
    bitCount = 0;
    facilityCode = 0;
    cardCode = 0;
    for (i=0; i<MAX_BITS; i++)
    {
      databits[i] = 0;
    }
  }


 // ha riaszt:

     if (riasztoState==true && (mozgasgarazs|| mozgaseloszoba || mozgaskonyha || mozgaskisszoba || mozgasnappali || mozgashaloszoba || teraszajtonyitas || bejaratiajtonyitas  || nappaliablak1nyitas || haloablaknyitas || kisszobaablaknyitas ) )  //ha mozgás,vagy bejaratiajtonyitas,vagy teraszajtó nyitás
      {
      gprsTest.callUp(PHONE_NUMBER);              // hív   
      Serial.print("riasztas "); 

   
   }

}

Előzmény: Prof (3449)
Prof Creative Commons License 2018.10.08 0 0 3449

Szia,

Még annyit, hogy ha valami tele van hibával, akkor az csak úgy tűnik, mintha működne, és potenciálisan benne van az esélye annak, hogy előbb-utóbb olyasmibe futsz bele, amit nem vársz. És az elég gáz, hogy pl. nem tudsz a lakásba bemenni vagy nem tudod lelőni a riasztót vagy...

Előzmény: Gergö86 (3444)
Prof Creative Commons License 2018.10.08 0 0 3448

Szia,

Végtelenül leegyszerűsítve az állapotgép: vannak feltételek, amelyek lehetnek simán binárisak (igaz/hamis), vagy lehetnek analógok (adott érték alatt vagy felett, de ebből is bináris eredmény lesz). Az események a feltételek változásait jelentik. Egy állapotgépnek annyi konkrét állapota van, ahány kombináció előfordulhat a feltételekben.
A legegyszerűbb állapotgép a villanykapcsoló--villanykörte kombináció. Ha a villanykapcsoló "BE" állapotban van, akkor a lámpa világít, ha "KI" állapotban van, akkor nem világít. Az állapotváltozás a kapcsoló átbillentése egyik állapotból a másikba.
Beágyazott fejlesztésnél az állapotok változását vizsgáljuk, és a régi feltételcsomagból az új feltételcsomagba történő átmenet pillanatában egy szándékolt új állapotot hozunk létre. Ha a villanykapcsoló mikrokontrolleres vezérlést kapna, akkor azt vizsgálnánk, hogy mikor kerül át egyik állapotból a másikba a kapcsoló, és ennek megfelelően kapcsolnánk ki és be azt a bemenetet, amelyen a relémodul van.

A kódodban deklarálva és definiálva van már az elején néhány állapot:

boolean alarm=true;  // kezdéskor aktív
boolean ido=false;   
boolean idolejart=false;

Ez már eleve több, mint ami a legtöbb kezdő kódjában alapból megtalálható. A villanykapcsolós részt most nem írom le teljes egészében, az 5 perc ELEKTRONIKA facebook oldalán van erről egy elég hosszú jegyzet kódrészletekkel, példákkal egyetemben.
A te esetedben az van, hogy:
-- van egy esemény, az ajtó nyitása (ez egy feltétel változását jelenti),
-- az ajtó nyitása indukál egy állapotot, amikor a rendszer a riasztásig 30 másodpercig vár,
-- ebből az állapotból két további állapot elérése lehetséges:
1. ha beírod 30 mp-en belül a kódot, akkor kikapcsol az élesítés,
2. ha nem írod be a kódot vagy rossz kódot ütsz be vagy későn ütöd be, akkor riasztani kezd.
A 30 mp-es várakozási idő alatt tehát alapvetően két dolgot kell figyelned: beütötted-e a jó kódot vagy lejárt-e a 30 mp.
Az elsőt hagyjuk most, nem erre vonatkozott a kérdés. A második, az idő lejáratához kettő dolog kell: valami, amivel időt mérünk és valami, amivel megakasztjuk a program futását úgy, hogy közben ezt-azt tudunk csinálni. Az elsőre a megoldás a millis() függvény, ami eredményül a reset óta eltet időt adja vissza unsigned long formátumú változóban, milliszekundumokban. A másik a while() ciklus, ami addig fut, amíg a while utáni zárójelben lévő feltétel igaz.
A kódot nem fogom neked megírni, de a funkcionális kódvázlat így kellene kinézzen:
1. kezdeti állapot: ajtó zárva, riasztó éles, állapotfigyelés: nyílik-e az ajtó.
1--2. trigger: kinyílt az ajtó, indul a számláló.
2. állapot: ajtó nyitva, riasztó éles, állapotfigyelés: beírtad-e a jó kódot vagy lejárt-e az idő.
2--3. trigger: beírtad a jó kódot, kikapcsol a riasztó. [erre nem térünk ki]
2--4. trigger: lejárt az idő: bekapcsol a sziréna.
4. állapot: szól a sziréna (hogy meddig, az már részletkérdés, nyilván ez is egy állapot lesz).
Minden vizsgálandó dologhoz tartozik egy feltétel (egy-egy boolean), és minden triggervizsgálathoz kell egy-egy while utasítás.

A delay() függvény egy while, de semmi mást nem csinál, mint hogy azt figyeli, hogy lejárt-e az idő, nem tudod meghatározni, hogy közben mit csináljon. Ha a delay() helyett a while()-ba ágyazod bele azt a vizsgálatot, hogy lejárt-e az idő és hogy sikerült-e a jó kódot beírnod, akkor pont azt éred el, ami a célod (és remélhetőleg megérted az állapotgépek működését).
A BlinkWithoutDelay pontosan ezt demonstrálja, csak ott egyetlen feltétel van (letelt-e az idő), és egyetlen állapotot vált (világít-e a led).

Előzmény: Gergö86 (3444)
Prof Creative Commons License 2018.10.08 0 0 3447

Hali,

Attól, hogy elébe löksz egy készre gyártott megoldást és ebből úgy-ahogy összetálok valamit, ami vagy működik, vagy nem működik, nem leszünk előrébb.

Előzmény: tibi-d (3445)
Gergö86 Creative Commons License 2018.10.07 0 0 3446

Szia!

Köszi a segítséget, elég kínai, de utánanézek. :)

Előzmény: tibi-d (3445)
tibi-d Creative Commons License 2018.10.07 0 0 3445

Szia!

A rengeteg lehetőség közül az egyik:

Készítesz egy timerinterruptot (TimerOne library), ami a beállított időközönként megszakítás generál. Ebben a rutinban egy számlálót növelsz a megfelelő feltételek teljesülése esetén. Ha a számláló elérte a beállított értéket, akkor a kimenetet(ket) vezérelheted ahogy szeretnéd. Közben a program fut tovább a köztes időben.

 

Előzmény: Gergö86 (3444)
Gergö86 Creative Commons License 2018.10.07 0 0 3444

Szia köszi Azt már néztem de nem tudom értelmezni sajnos kb 0 előképzettséggel sikerült összeraktam egy működő rendszert tudom hogy tele van hibával de működik  :)

 

Ahogy írtam Nem ez a valós program azért írtam le ezt mert arra lenne szükségem hogy valaki megírja hogy mit írjak a delay helyébe hogy ne álljon le addig

Előzmény: Prof (3443)
Prof Creative Commons License 2018.10.07 0 0 3443

Szia,
Van gáz ebben a kódban rendesen...

A kérdésedre a választ a BlinkWithoutDelay nevű mintaprogramban találod.
Szólj, ha nem megy!

Előzmény: Gergö86 (3442)
Gergö86 Creative Commons License 2018.10.07 0 0 3442

Sziasztok!

 

Lakásriasztó tervezésben szeretnék egy kis segítséget kérni.

Leegyszerűsítve, ott akadtam el, (már persze az elején) :) hogy amikor hazamegyek, kinyitom a bej.ajtót, szükségem lenne 30mp-re,amíg a kártyám hozzáérintem az RFID-hez. Persze ez delay-el nem megy,mert addig áll a progi.

a saját kódom, kicsit bonyolult,mert GSM,RF,RFID,MP3, minden van benne, amúgy működik,,csak  ez a delay a gond.

Itt egy egyszerűbb kód, segítene valaki átírni?

Köszönöm!

 

 

boolean alarm=true;  // kezdéskor aktív
boolean ido=false;  
boolean idolejart=false;


int sensor         = 3;      // bejárati ajtó érzékelő
int nyomogomb = 4;   // legyen most ez egy sima monentary button amivel aktiválom/deaktiválom
int szirena         = 5;     // ez hozza müködébe a szirénát

 void setup()
{             
  pinMode(sensor,      INPUT);       
  pinMode(nyomogomb,   INPUT);              
  pinMode(szirena,     OUTPUT);              
 
 digitalWrite(sensor,   HIGH);
 digitalWrite(nyomogomb, HIGH);
 digitalWrite(szirena,  HIGH);
}

 void loop()  {

int ajtonyitas=digitalRead(sensor);
int gombnyomas=digitalRead(nyomogomb);

if (ido==true)
{
  delay(30000); //30 mp, amíg deaktiválom ( na ez ani nemjo, ide kéne vmi más...)
  idolejart==true;
}




if (alarm==true && (ajtonyitas ==LOW) )  //ha nyilik az ajtó
 {
 ido==true;
 }
 
if (ido==true && (gombnyomas==LOW) )     //ha megnyomom a gombot
 {
 alarm=false;                            //deaktiválja
 }

if (alarm==true && (idolejart==true) )
{
 digitalWrite(szirena, LOW);               //bekapcsolja a szirénát
 }

 }

 


 

Prof Creative Commons License 2018.10.07 0 0 3441

Szia,

Jó lenne, ha ez ilyen egyszerű lenne.

Ha pénzt ad érte, az már eleve kereskedelmi forgalomba hozásnak minősül, ennek megfelelően minden ehhez kapcsolódó kötelezettsének meg kell felelned. Ez alól ki lehet bújni ilyen-olyan megoldásokkal, de mindegyikre egyöntetűen jellemző, hogy gyakorlatilag minden létező közvetlen és közvetett kárért te felelsz, ha galiba történik.

Nyilván valószerűtlen, hogy fog. De ha történik, akkor számolni kell a következményekkel.

 

Előzmény: Alpári Gnác (3440)
Alpári Gnác Creative Commons License 2018.10.05 0 0 3440

Helló!

 

Köszönöm a további információkat!

Magam is arra jutottam, hogy ehhez a készülékhez nem lesz CE-minősítés és kész.

Ha valakinek így is megfelel, az megveszi, akinek nem felel meg, az nem veszi meg.

 

Egy magánlabor minden további nélkül rendelt a napokban pár darabot, pedig ők pontosan ugyanúgy és ugyanarra használják, mint az állami kórház laborja használta volna. Nekik csak az volt fontos, hogy jól használható és olcsó legyen. Máshol nyilván vannak ezeknél erősebb prioritások is...

 

Mivel ez nem sorozatgyártásban készül, hanem nálam a konyha asztalon, a gyártás legfontosabb eszközei a lombfűrész és a tűreszelő, hát vicces lenne erre gyártástechnológiát írni:)

 

A másik téma esetében én is rátaláltam, az abszolút encoderre, de amikor megláttam az árát, rögtön rájöttem, hogy ilyenem se lesz:)

 

Itt azért nem valami rettentő precíz mozgatásra és reprodukcióra van szükség, lényegében ha egy kommersz léptető- vagy szervo motor felbontását tudja, az már bőven elég.

 

A mechanikai rész is persze problémás, de azt nem is vállalnám, azt majd megcsinálja más, ha eljutunk odáig.

 

Köszi.

Előzmény: Prof (3439)
Prof Creative Commons License 2018.10.02 0 0 3439

Szia,

Nem tudom, hogy konkrét választ kaptál-e erre a két felvetett kérdésre, nem olvastam végig a folyamot. Amit el tudok mondani a témában.

 

CE minősítéshez sorozatgyártási eljárással készített mintadarab kell, több. Irreleváns az egyszerűsége, a felhasználási körülmények és az eszköz jellege determinálja, hogy milyen vizsgálati protokollon megy át. Sok ezek közül az eszköz megsemmisülésével jár, tehát a beadott x darab mintadarab közül nem fogsz visszakapni mindent. Épen legalábbis nem. A vizsgálat ára is a protokolloktól függ, alapból százezres nagyságrend, de simán el tud menni sok milliós nagyságrendig.

De.

Nem a vizsgálat lesz a drága, hanem a termék sorozatgyártásra való előkészítése, a megfelelő gyártó megtalálása, a gyártói (és tervezői) minősítések megszerzése, majd az x számú sorozatgyártott (!) próbadarab elkészítése. Ha x = 10, akkor az. Darabonként mondjuk 300 000 forint. Amit később összetörnek, felgyújtanak, árammal szétcsapnak, megfagyasztanak, szétráznak, eláztatnak stb. (Nem egymás után, külön-külön.)

 

A robot tekintetében ez kb. az ipar 4.5 (még nem feltétlen 5.0). Az összes nagy cég fejleszt ilyet. Amire szükséged van/lesz azt abszolút enkódernek hívják. Attól függően, hogy milyen pontosságú mozgást akarsz megvalósítani, különböző felbontású és precizitású enkóderek léteznek, úgy optikai, mint elektromechanikus megoldással (előbbi felbontása azért jóval rosszabb, mint az optikaié). Az már egy egészen komoly mérnöki feladat, hogy ezt hogy oldod meg mechanikusan, kuplungolod a motort, nem adsz rá tartófeszültséget, vagy mint az ipar 5.0 robotok teszik, a nyomatékérzékelők adatai alapján dekódolod a mozgást. És akkor ez még mindig csak a mozgás rögzítése, ott van mögötte a műszaki specifikáció második hulláma, nevezetesen az, hogy milyen abszolút precizitással és milyen ismétlődő precizitással kell visszaadniuk a mozgást.

 

Szép feladat, de igen költséges és igen időigényes hobbi keretek között.

Előzmény: Alpári Gnác (3416)
Vargham Creative Commons License 2018.08.23 0 1 3438

A szabályozás szerint az lesz orvostechnikai eszköz, amit a gyártója annak szán. Az eredeti kérdező szánhatja nem orvostechnikai eszköznek is a specializált számológépét. A kérdés, hogy ebben az esetben el tudja-e adni.

 

Egy példa: Gyárthatsz szike alakú tárgyat.

1. Ha nincs minősítésed az alapanyagról, akkor maximum dísztárgy lehet.

2. Ha van beszállítói igazolásod, hogy nem mérgező az alapnyagod, akkor eladhatod konyhakésnek.

3. Ha van beszállítói alapanyag minősítésed ÉS minősítteted a terméket, hogy megfelel az orvostechnikai készülékekre vonatkozó szabványoknak (sterilizálhatóság, hőmérséklet tűrés, stb), akkor eladhatod orvosi szikének.

Látszik, hogy mindhárom esetben ugyanaz a termék, egyedül a gyártói szándék más.

 

De ez egy szikénél azért egyértelmű. Nem hiszem, hogy bármelyik kórház is vállalná a rizikót, hogy Aliexpressen rendeljen szikét...

A specializált számológép azért jó kérdés, mert miért ne lehetne általános célú segédeszköz, mint a példaként említett számítógép, amit történetesen az egészségügyben használnak.

Jelen esetben a probléma azzal lesz, hogy míg egy általános célú számítógépet, számológépet, mobiltelefont, akármit folyamatosan gyárt a gyártója ÁLTALÁNOS felhasználásra, és mellesleg veszik egészségügyi felhasználásra IS, addig az itt tárgyalt számológép kifejezetten egy adott feladatra, megbízásból készül. Ez innentől pedig inkább jogi téma, mint műszaki. Az eredeti kérdező pedig adja ki trainspotter néven a készüléket, és a leírásban legyen benne, hogy vasúti kocsik HOBBICÉLÚ számolásának segítségét szolgálja. :-)

Előzmény: balage8888 (3437)
balage8888 Creative Commons License 2018.08.22 0 0 3437

Az értelmezésed alapján a papír, a toll, számológép IS megfelel a definíciónak.

 

Egy általános célú nyomógombos számláló (márpedig a tervezett eszköz BÁRMINEK a számlálására alkalmas) "diagnosztikai" szempontból semmiben sem különbözik egy számológéptől.

 

Előzmény: Vargham (3434)
Alpári Gnác Creative Commons License 2018.08.22 0 0 3436

Ez már nézőpont kérdése.

 

Ha akarom, akkor in vitro a mikroszkóp, mert abban történik maga a vizsgálat.

Azt meg te is tudod, hogy lehet úgy pergésmentesíteni, hogy ne számoljon tévesen, nem is számol.

Ezeket a vizsgálatokat amúgy szakorvosok végzik, észre veszik, ha duplán sípol, vagy valami baj van.

 

De végül is mindegy, én nem nagyon tudok tenni semmit, amúgy pont ma hívott fel a negyedik közbeszerzési pályázó, hogy ajánlatot kérjen és ez ugyanaz a közbeszerzés.

 

Nem egy drága dolog ez, ha kell nekik, akkor majd megveszik közbeszerzésen kívül, ha nem kell, akkor meg így jártam.

Előzmény: Vargham (3434)
Vargham Creative Commons License 2018.08.22 0 0 3435

"A korhazban hasznalt szamitogep SEM orvostechnikai eszkoz"

Az nem. De a rajta futó diagnosztikai szoftver, a kórelőzmény adatbázis kezelője, stb már az.

Előzmény: balage8888 (3432)
Vargham Creative Commons License 2018.08.22 0 1 3434

Tudja a fene... Hiszen diagnózis felállításához használják.

"Az in vitro diagnosztikai orvostechnikai eszközök (továbbiakban IVD orvostechnikai eszközök) definíciója az in vitro diagnosztikai orvostechnikai eszközökről szóló 8/2003. (III.13.) ESzCsM rendelet 2. § (1) bekezdés a) pontjában került meghatározásra a következők szerint: „minden olyan orvostechnikai eszköz, amely mint reagens, reagens származék, kalibráló, kontrollanyag, reagens készlet, készülék, berendezés, gép vagy rendszer, önmagában vagy más eszközzel együttesen alkalmazva, a gyártó meghatározása szerint emberi szervezetből származó minták – ideértve a vér- vagy szövetadományozást is – in vitro vizsgálatára szolgál kizárólag vagy elsősorban azzal a céllal, hogy információt nyújtson"

Én úgy látom, hogy eszerint a definíció szerint benme van.

 

Mi van, ha az egyik sejttípust számoló nyomógomb pergésmentesítése nem jó, és néha 2-4 darabot is hozzáad egy nyomásra? Ilyenkor ki felelős a téves diagnózisért?

 

Ha a mintát elemző ember papírt, tollat, számológépet vagy egyéb általános célú eszközt használ, akkor az övé a felelősség. De ha te adsz neki egy eszközt, amiben ő megbízik, és vakon használja, akkor szerintem közös lesz a felelősség.

Előzmény: balage8888 (3433)
balage8888 Creative Commons License 2018.08.22 0 1 3433

Itt eleg egyertelmuen le van irva, hogy mi az orvostechnikai eszkiz:

 

https://fogalomtar.aeek.hu/index.php/Orvostechnikai_anyagok_%C3%A9s_eszk%C3%B6z%C3%B6k

 

es

 

https://net.jogtar.hu/jogszabaly?docid=A0900004.EUM&celpara=

 

 

Ezek alapjan egy "szamologep" NEM orvostechnikai eszkoz (mint ahogy az eddig alkalmazott toll, ceruza, papir sem az)

 

 

Előzmény: Vargham (3431)
balage8888 Creative Commons License 2018.08.22 0 0 3432

A korhazban hasznalt szamitogep SEM orvostechnikai eszkoz (mint ahogy meg egy csomo minden, pl. egy zsebszamologep sem...)

Előzmény: Vargham (3429)

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