szakdoga téma + későbbi segítség

bgachip
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2013. november 5. kedd, 20:00

szakdoga téma + későbbi segítség

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

Sziasztok!

Mérnök informatikus hallgató vagyok, szakdoga előtt állok, Arduinoban gondolkodom DE nincs témám.
Ez év November 30-ig le kellene adnom. Ismereteim elég hiányosak ezért fordultam hozzátok, remélem tudtok segíteni.
Remélem együtt kitalálunk valami szakdogának való témát. Bármi érdekel, ha 3-4 hónap alatt kivitelezhető!

Köszönettel

István
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: szakdoga téma + későbbi segítség

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

Egy javaslat:
- háztartási eszközök automatizálása és internethez kapcsolása Arduino segítségével

Kiválasztasz mondjuk 3 lámpát (inkább LED-et, hogy ne csapjon agyon a villany szerelésnél).

A neten keresztül beállíthatod, hogy a lámpák hogyan viselkedjenek.
- mondjuk este 10-től reggel 8-ig világítson
- vagy éjszaka és szürkületkor világítson (fényérzékelés)
- vagy fotocellás bekapcsolás, érzékelés után 10 percig ég

Mindezt interneten keresztül beállíthatod.

Az elektronikus megvalósítás nem lesz nehéz (fényérzékeny ellenállás + infraled).

A szoftver kicsit nehezebb lesz:
- EEPROM használat a beállítások mentésére (könnyű)
- mini HTML webkiszolgáló elkészítése (nehéz)
- a különféle esetek (beállított időzítés + fényérzékelés + fotocella) lekezelése (közepes).

De: látványos, el lehet adni szakdolgozatnak.

Én ha ma nekifogok 1 hét múlva kész lesz, de mivel kezdő vagy, ezért a 3-4 hónap reálisnak tűnik és a konzulens sem fog elhajtani, hogy túl egyszerű az egész.
230-at relével csak papíron kapcsoljál.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: szakdoga téma + későbbi segítség

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

A netes rész az most slágertéma. És a bluetooth, WiFi is.

De a szakdolgozatot sokan azzal rontják el, hogy a WiFi stack/Bluetooth stack amit leírogatnak (erre van a 3256 db könyv/cikk és a szabványok/RFC-k). A megvalósítást add el. A saját ötletet.
Tipp: legyen egy blog mögötte, ahol a _folyamatot_ publikálod. Ezt építettem, ezt a kódot használom, ez a trükk benne. Ilyen megoldást használ más, ezért jó/nem jó.
Ezzel 2..5 legyet ütsz egy csapásra:
1, készül a szakdolgozat váza és készen van egy jegyzeted hozzá,
2, megtanulsz fogalmazni/írni (nekem 4 év kellett, mire (normális) anyagokat tudtam összehozni (volt eleje-közepe-vége és mondanivalója is)
3, a publikálás után lehet belőle egy 1-2-3 oldala _szakcikk_ szakmai folyóiratban
4, van publikációd! Sőt, beküldhető 1-2 helyre poszterként vagy akár előadásként (TDK, stb.)
5, a munkaerőpiacon igen jól mutat az önéletrajzban ha van 1245 db infomérnök és ugyanennyi álláspályázat. de egy párnak van _szakmai_ előélete. És a referenciád _publikus_. Na kit vesznek fel munkára?:)

Tipp: tanuld meg a szoftveralkalmazás mellett a _hardware_ tervezést. mit teszünk miért és miért nem, A következő 20 éven elfogynak erről a területről az emberek! Mindenki a készt akarja alkalmazni...


Ami jó _és_ piacképes (ha már lehet, akkor legyen zsebpénz a diplomamunka):
1, Netes elérés, PWM kimenet és szobai LED világítás vezérlés, órával.
Ébresztő beállítható óra/perc alapon. Ébresztés _előtt_ a LED-eket elkezdi felkapcsolni, mintha napfelkelte lenne. Kipihenten érkezel az ébrenlétbe. Erre pszichológia/humánbiológia tök jól ráhúzható (Határterületi fejlesztés: senki sem ért rajtad kívül hozzá!).
Ébresztés lehet NET-rádióval (Sima MP3 dekóderchip), mintaalkalmazás
Tudjon Infravevőt kezelni: távirányítóval is beállítható.
Infraadót is kezelhet: akkor bekapcsolja ébresztésnek a TV-t.
Ha van rajta relé, akkor a 230V-os kávéfőzőt is beindíthatja ébredés előtt 6 perccel (forró kávé vár). Azt hogy behozza: azt asszonyban hívják :) . (Az nem fejlesztés, hanem állapot.)
De ez _modulárisan_ továbbgondolható. Így meg van a termék váza + a koncepcióterv is.

Idő/feladatigény:
Arduino+net: instructables/arduino oldalon van minta (kezdőnek a _megértés_ nehéz, az utánépítéssel nem lesz diplomatéma. De működik, alapnak jó)
LED: PWM: könnyű, és ötletes
IR vevő: alacsony/könnyű szint, angol/magyar full dokumentáció;a 60 nap alatt Arduino tanfolyamban most jön (tényleg : feliratkoztál rá: http://www.tavir.hu/60nap)
IR adó: alacsony/könnyű szint, angol full dokumentáció; mint előbbi pont
ÓraIC: közepes szint; készen van, magyarázattal a 60 napos tanfolyamban (I2C, DS1307-es RTC modul)
Relékimenet: tranzisztorkapcsolt , egyszerű: Egyszerű elektronika a főoldalon a Könyvek közt.
bgachip
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2013. november 5. kedd, 20:00

Re: szakdoga téma + későbbi segítség

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

UPC routerem van, de nem tudok portot nyitni! -.-

Valamelyikőtök tudna skype-on segítíteni?
neoisti néven vagyok fent!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: szakdoga téma + későbbi segítség

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

Típus? Azonosító? Az UPC az maximum a szolgáltató....
bgachip
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2013. november 5. kedd, 20:00

Re: szakdoga téma + későbbi segítség

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

Sikerült azóta, default port 0-0 volt, megadni 8081-et akartam, de így kellett 8081-8081, azóta működik!
Róbert neked írtam párszor skype-on, rég nem láttalak fent!
Pedig kellene a segítséged!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: szakdoga téma + későbbi segítség

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

Szombat este / vasárnap este ált.vagyok....
bgachip
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2013. november 5. kedd, 20:00

Re: szakdoga téma + későbbi segítség

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

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

#include <Ethernet.h>
#include <SPI.h>
#include <SD.h>
#include <Time.h> 
#include <EthernetUdp.h>

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAC, 0xCE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,17); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80
IPAddress timeServer(132, 163, 4, 101);

const int timeZone = 2; 
EthernetUDP Udp;
unsigned int localPort = 8888;
File webFile;
String HTTP_req="";          // stores the HTTP request
String http="";
boolean vizsgal = true;
char c;
void setup()
{
  Ethernet.begin(mac,ip);  // initialize Ethernet device
  delay(2000);
  server.begin();           // start to listen for clients  
  Serial.begin(9600);       // for diagnostics
  pinMode(4,OUTPUT);
  digitalWrite(4,HIGH);
  pinMode(32,OUTPUT);       // LED on pin 2

  Serial.print("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println(" failed!");
    return;
  }
  Serial.println(" done.");
  if (!SD.exists("index.htm")) {
        Serial.println("HIBA - Nem talalom a fajlt!");
        return;  // can't find index file
    }
    Serial.println("SUCCESS - Found index.htm file.");
    
  Udp.begin(localPort);
  Serial.println("Varakozas synk");
  setSyncProvider(getNtpTime);
}
time_t prevDisplay = 0;
void loop()
{
  EthernetClient client = server.available();  // try to get client
  if (client) {  // got client?
    while (client.connected()) {
      if (client.available()) {   // client data available to read
            
        
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Charset: utf-8");
          client.println("Connection: close");
          client.println();
          webFile = SD.open("index.htm");        // open web page file
          if (webFile) {
            while(webFile.available()) {
               client.write(webFile.read()); // send web page to client
//               c= client.read(); // read 1 byte (character) from client
//         // save the HTTP request 1 char at a time
//        // last line of client request is blank and ends with \n
//        // respond to client only after last line received
//        HTTP_req+=c;
//               Serial.println(HTTP_req);
          char c=client.read();
               HTTP_req+=c;
                 
               }
            }
            
            Serial.print(HTTP_req);
               if(c=='\n'){
               if(HTTP_req.indexOf("option=8")>0)
               {
               Serial.println("BENT VAGYOK ; ]") ;
                        
               digitalWrite(32,HIGH);
               delay(10);
               }
               }
            webFile.close();
          
        } 

             //time();
    
  } // end if (client.available())
  } 
 
  delay(1);      // give the web browser time to receive the data
  client.stop(); // close th
Adott a fenti kód, de nem akar működni!
A lényeg az lenne, hogy csináltam egy weboldalt, amit rátoltam sd kártyára, el tudom érni, bejön ahogy kell.
A GET részig minden oké, Serial.print-el kiíratom a HTTPRequest-et, szépen látszik amire kíváncsi vagyok.
Tehát, ledet akarok kapcsolni, ha megkap egy adott "parancsot".
A feltétel részt amely a HTTP_req string-ben tárolt szövegből kikeresi az "option=8"-at, és ezáltal kapcsolna a relé, ami egy ledet zár közre, nem akar világítani, a relé meg se nyikkan, de rx || tx-re kötve működik.
Légyszíves, aki megtalálja a hibát, írja meg mert én már 2 órát *****-am vele. :/
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: szakdoga téma + későbbi segítség

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

Az option=8 a legelején van a szövegnek?

Mert az indexOf eredménye ekkor 0, tehát a feltétel hamis. A BENT VAGYOK-ot kiírja?
Látatlanban elég nehéz bármit írni. Annyit vettem észre, hogy az indexOf-ot rosszul használod, de ettől még működhetne.

Van ténylegesen 32 lábad (atmega2560-as Arduino)?
bgachip
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2013. november 5. kedd, 20:00

Re: szakdoga téma + későbbi segítség

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

A "bent vagyok"-ot eddig 2 alkalommal írta ki.
Az if elágazást ide oda rakosgattam, nem tudom már mikor írta ki.
De a DigitalWrite(2,HIGH) utasítás nem valósult meg soha.
Pedig egy blokkban vannak egymás alatt.
A Serial.print(HTTP_req)-ről teszek fel délután képet.
A HTTP_req-ben egy több soros szöveg van.
Külföldi oldalakon is az indexOF-ot használták, de lehet igazad van. Közvetlen a HTTP_req+=c után kellene tennem az indexOf-os if elágazást.
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: szakdoga téma + későbbi segítség

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

1. Az indexOf -1-gyel tér vissza, ha nincs benne.

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

if(HTTP_req.indexOf("option=8")>=0)
2. Ez minek kell bele? Mi történne, ha kivennéd?

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

if(c=='\n'){
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: szakdoga téma + későbbi segítség

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

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

char c;

while(webFile.available()) {
  client.write(webFile.read()); // send web page to client
  char c=client.read();
  HTTP_req+=c;
}
 
if(c=='\n'){
}
Mennyi c értéke?
Az informatikailag helyes válasz, hogy fogalmunk sincs róla, mert sosem adtunk neki értéket. Az avr-gcc kinullázza c-t induláskor, ezért valószínűsíthető, hogy ott 0-van, de más fordító alatt más is lehet.

( a belső és a külső c változó más változó! )

A helyes válasz: valamennyi van c változóban, AVR alatt valószínűsíthetően 0. :)
bgachip
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2013. november 5. kedd, 20:00

Re: szakdoga téma + későbbi segítség

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

indexOf-ot meg ha -1 el teszem egyenlővé akkor fordítva működik a feltétel, mint ahogy szeretném.
Tehát , ha nem teljesül a feltétel, akkor kapcsol be a led?
Ha nem lesz a GET által "option=8", azaz nem találja, akkor LED=ON!

Vagy én gondolkodom rosszul :?

Közben átnéztem a kódot amit beillesztettem, c változóból annyi van mint égen a csillag, lehet bekavar?! :D
bgachip
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2013. november 5. kedd, 20:00

Re: szakdoga téma + későbbi segítség

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

Sketch:

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

#include <Ethernet.h>
#include <SPI.h>
#include <SD.h>
#include <Time.h> 
#include <EthernetUdp.h>

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAC, 0xCE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,17); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80
IPAddress timeServer(132, 163, 4, 101);

const int timeZone = 2; 
EthernetUDP Udp;
unsigned int localPort = 8888;
File webFile;        // stores the HTTP request
String HTTP;



void setup()
{
  Ethernet.begin(mac,ip);  // initialize Ethernet device
  server.begin();           // start to listen for clients  
  Serial.begin(9600);       // for diagnostics
  pinMode(4,OUTPUT);
  digitalWrite(4,HIGH);
  pinMode(32,OUTPUT);       // LED on pin 2

  Serial.print("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println(" failed!");
    return;
  }
  Serial.println(" done.");
  if (!SD.exists("index.htm")) {
        Serial.println("HIBA - Nem talalom a fajlt!");
        return;  // can't find index file
    }
    Serial.println("SUCCESS - Found index.htm file.");
    
  Udp.begin(localPort);
  Serial.println("Varakozas synk");
  setSyncProvider(getNtpTime);
}
time_t prevDisplay = 0;



void loop()
{
  EthernetClient client = server.available();  // try to get client
  if (client) {  // got client?
    while (client.connected()) {
      if (client.available()) {   // client data available to read
            char c=client.read();
           if(HTTP.length()<100){
          HTTP+=c;
          Serial.print(HTTP);
           }
          if (c=='\n'){
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Charset: utf-8");
          client.println("Connection: close");
          client.println();
          webFile = SD.open("index.htm");        // open web page file
          if (webFile) {
        
            while(webFile.available()) {
               client.write(webFile.read()); // send web page to client
     
               }
               webFile.close();
            }
     break;
            
      }
      
    if(HTTP.indexOf("?option=8")>-1){
               
               
               
                      
               digitalWrite(32,HIGH);
    }
               
        else{
        if(HTTP.indexOf("?option=")>-1)
               {
               
                        
               digitalWrite(32,LOW);
               
               }
        
        } 
     HTTP="";
          
            
    }// end if (client.available())
             
    
  } // end while (client.connected())
  delay(1);      // give the web browser time to receive the data
  client.stop(); // close the connection
      
  } //end if (client)
        
 
  
  
  
  
  
} //LOOP END
Serial monitor:

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

Initializing SD card... done.
SUCCESS - Found index.htm file.
Varakozas synk
Transmit NTP Request
Receive NTP Response
GET /favicon.ico HTTP/1.1

GET /?option=8 HTTP/1.1

GET /down_arrow_select.jpg HTTP/1.1

GET /favicon.ico HTTP/1.1
Ott van az "?option=8", de nem kapcsol be a LED.
Ötlet?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: szakdoga téma + későbbi segítség

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

Tipp:

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

if(HTTP.indexOf("?option=8")>-1)
helyett

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

if(HTTP.indexOf('?option=8')>-1)
?

A HTTP.indexOf() milyen értéket ad vissza? Debugsort ráengednék.... (println...)
Válasz küldése