about Arduino

Posted by 알 수 없는 사용자
2015. 3. 29. 15:41 프로그래밍/사물인터넷

1. 아두이노란 ?




: 오픈 소스를 지향하는 마이크로 컨트롤러를 내장한 기기 제어용 기판이다. 컴퓨터 메인보드의 단순 비전으로 이 기판에 다양한 센서나 부품 등의 장치를 연결할 수 있다. 컴퓨터와 연결해 소프트웨어를 로드하면 동작을 하게 되므로 제어용 전자장치부터 로봇과 같은 것을 만들 수 있는 '오픈 소스 하드웨어'라고 할 수 있다.



2. Arduino IDE


 작성한 소스를 컴파일 합니다

 작성한 소스를 컴파일 한 후 컴파일된 이진코드를 아두이노 보드에 업로드 합니다

  새로운 문서를 엽니다

  기존파일이나 라이브러리 소스를 불러옵니다

  파일을 저장합니다


setup() 함수 : setup() 함수는 스케치를 시작할 때 불러옵니다.​ 초기 변수, 핀 상태, 사용 라이브러리 라이브러리 시작등에 사용합니다 

         setup기능은 전원이 켜졌을 때 혹은 리셋버튼을 눌렀을 때 한번만 실행됩니다


loop() 함수 : setup()을 생성한 후에 loop() 함수가 프로그램의 변화와 응답 내에서 연속적으로 작동합니다 



3. 기본예제

- LED On/Off

#define PIN 13  //13 번을 PIN이라는 글자로 별칭을 줍니다

 

 //13 번을 PIN이라는 글자로 별칭을 줍니다

 void setup() {

   pinMode(PIN, OUTPUT);  //13 번을 PIN이라는 글자로 별칭을 줍니다

 }

 

 //무한루프로 실제 수행할 동작을 코딩하는 함수

 void loop() {  

   digitalWrite(PIN, HIGH); //13번 핀으로 HIGH(1)를 디지털로 출력

   delay(1000);  //1초(1000밀리세컨드) 동안 대기해라

  

   digitalWrite(PIN, LOW); //13번 핀으로 LOW(0)을 디지털로 출력

   delay(1000);  

 }


디지털 핀으로 뭔가를 입력을 받을 때에는 digitalRead() 함수를 사용합니다.

반대로 디지털 출력을 할때는 digitalWrite() 를 사용합니다.  

 

아날로그 핀으로 입력을 할때에는 analogRead() 함수를 씁니다.

반대로 아날로그 출력을 할때에는 analogWrite() 를 쓰는데 이건 실제론 PWM(Pulse Width Modulation)이라는 기술을 씁니다.  


- 버튼 입력 받기




     #define BTN_PIN 2

 

      void setup() {

        Serial.begin(9600); // Baud rate(보율) : 통신속도

        pinMode(BTN_PIN, INPUT);

      }

 

 

      void loop() {

        int btn = digitalRead(BTN_PIN);

        Serial.println(btn); //시리얼모니터창에 출력

        delay(100);

      }






버튼을 눌렀을 때는 시리얼 모니터창에 1이 출력되고 버튼을 떼어놓으면 0이 출력되야 되는게 정상이다

하지만 하지만 버튼을 눌렀을 때는 1이 정확히나오지만 버튼을 떼버리면 0과 1이 마구잡이로 뜨게된다. 그이유는 바로 전문적인 용어로 플로팅이 발생해서 입니다


플로팅이란 외부환경이나 기타 자연계의 여러 이유로 깨끗한 0V가 아닌 미세한 전압이 영향을 주기 때문입니다



4. 풀업/풀다운 저항


: 플로팅 현상을 없애주고 전압을 원하는대로 꺠긋하게 보내주는 회로이다.




 - 풀업 저항







 스위치를 누르지 않을때에는 저항을 통과하여 무조건적으로 2번핀으로 전압이 통하게 됩니다. 이때 스위치를 닫게 되면 2번핀으로 가해지던 전압이 검은색선(GND)쪽으로 가게됩니다. 2번핀의 미세하게 입력되던 전압도 GND로 흐르게 되서 결국 2번핀에는 깨끗한 0V가 됩니다. 


그래서 스위치를 뗐을때는 전압이 가해져서 코드상으로 1이 나오게 되고 눌렀을때는 0V니까 코드상으로 0이 나오게 됩니다.

값이 반대입니다.












 - 풀다운 저항

 







-

스위치가 열렸을때는 신호선으로는 0V이고 미세한 전압은 GND쪽으로 갑니다.

 

그리고 버튼이 눌러졌을때는 신호선으로 전압이 가해지게 됩니다.

풀업과는 다르게 보통때는 0 눌렀을때는 1입니다.

 

직관적으로 생각하면 풀다운을 많이 쓸거 같지만 실제로는 풀업저항을 더 많이 씁니다.











※ 플로팅을 피하기위해서는 풀업/풀다운 저항의 사용하지 않을 수 없습니다. 하지만 풀업/풀다운 저항을 사용하기위해서 저항을 매번 새로 연결해야하기 때문에 여간 귀찮을수 있습니다.

    하지만 놀랍게도 아두이노 안에 내부회로에 이미 풀업저항이 이미 구성되어 있기 떄문에 코드수정만으로도 풀업저항을 사용할 수 있습니다.


void setup() {

   Serial.begin(9600);

   pinMode(BTN_PIN, INPUT_PULLUP);  // INPUT을 INPUT_PULLUP으로 교체

 }



5.출처


한국 아두이노 개발자 커뮤니티 이노데브         http://inodev.co.kr/

MechaSolution                                             http://blog.naver.com/roboholic84/220297061644







IIS란? ( HTML 웹 서버 구축)

Posted by 알 수 없는 사용자
2015. 3. 29. 10:22 시스템인프라/MS서버군

 IIS는 Internet Information Sevices 의 약자 이며, 마이크로소프트 원도우를 사용하는 서버들을 위한 인터넷 기반 서비스들의 모임

아파치 웹서버에 이어 세계에서 두번째로 가장 잘 알려진 웹서버입니다.

서버는 현재 FTP, SMTP, NNTP, HTTP/HTTPS를 포함하고 있습니다. 지금까지 IIS 8.0 버전이 나왔습니다.
(IIS 8.0 은 windwos server 2012, Windwos 8 부터 사용 가능합니다)

장점이자 단점인 마이크로소프트에서 제공하는 윈도우 OS에서만 사용이 가능하다는점.

IIS에서는 ASP 스크립트 언어를 사용 할 수 있다.

 

IIS 8.0 신규, 업데이트 기능

웹 서버 성능 비교
     (출처-http://www.gtcomm.net/blog/nginx-the-best-http-server/)

CPU Utilization
• IIS – 9 percent
• Nginx – 21 percent
• Apache – 26 percent

Peak Throughput
• IIS – 49,000 responses per second (r/s)
• Nginx – 23,000 r/s
• Apache – 14,000 r/s

Response Time
• IIS – 2.8 milliseconds
• Nginx – 5.5 milliseconds
• Apache – 6.3 milliseconds

IIS 서버 Html 구축 하는법

OS : Windwos server 2012 R2 Datacenter

1.1 서버 관리자에서 역할 및 기능 추가

1.2 웹서버(IIS) 설치

 

2.IIS 관리자 실행

2.1 웹사이트 추가 클릭

2.2

(1)    사이트 이름 항목에는 추가 할 사이트에 원하는 이름을 적어준다. 
        관리자가 사이트들을 구별목적으로 사용되는 것이므로 별칭으로 적어두면 된다.

(2)    실제 경로 항목에서 웹사이트의 root로 설정할 디렉토리를 선택한다.

(3)    두 항목을 기재하였으면, 이제 확인을 누르고 대화상자를 닫는다. 
        웹 사이트 추가시에는 기본으로 “웹 사이트 즉시 시작” 항목에 체크가 되어 있어 확인을 누르면 웹사이트 추가와 동시에 서비스가 시작된다.

 

3.    사이트 추가가 완료 되었다면, 이제 IIS 관리자의 사이트 프레임 내에 방금 추가한 사이트가 등록된 것을 확인 할 수 있으며, "시작됨" 상태
        정상적으로서비스가 되고 있는 것을 확인 할 수 있다.

 

 

 

4.자, 그럼 이제 클라이언트에서 웹 브라우저로 접속하여 웹 서비스에 접속이 가능한지 확인을 해보자.root디렉토리에 만들어 놓은 Html 파일을 넣어놓고
브라우저를 열고 http://서버ip/change.html 이라고 주소를 입력해보면 만들어 놓은 html 파일이 열리는 것을 확인 할 수 있다.


Java의 Garbage Collection

Posted by 알 수 없는 사용자
2015. 3. 27. 16:13 프로그래밍/JAVA

Garbage Collection (GC)

 : 쉽게 이야기해서 Java가 개발자 대신 사용하지 않는 객체를 자동으로 찾아 메모리에서 제거해줌으로써 메모리를 관리해주는 것이다.


 ■ GC를 시작하기 전 알아야 할 용어

 - GC를 시작하기 앞서 "stop-the-world"라는 용어를 알아야 한다. 이것은 GC를 실행하기 위해 JVM의 애플리케이션 실행을 잠시 멈추는 것을 뜻한다. "stop-the-world"가 발생하게 되면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. GC를 실행한 후 멈추었던 쓰레드가 다시 실행되게 된다. 어떠한 GC알고리즘을 사용하더라도 "stop-the-world"는 실행되는데 이것의 시간을 줄이는 것이 GC를 튜닝한다고 하는 것이다.


  GC가 만들어진 2가지 전제조건

 - 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다.

 - 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.


  Java의 힙(Heap) 영역


영역

설명 

Young

 이 영역은 Java 객체가 생성되자마자 저장되고, 생긴지 얼마 안된 객체가 저장되는 곳이다. Java 객체가 생성되면 이 영역에서 저장되다가

 시간이 지남에 따라 우선순위가 낮아지면 Old 영역으로 옮겨진다. 이 영역에서 객체가 접근 불가능 상태가 되어 사라질때 Minor GC가

 발생한다고 한다. 

Old

 Young 영역에서 저장되었던 객체중에 접근 불가능 상태가 되지 않는 오래된 객체가 이동되어서 저장되는 영역이다. Young 영역보다

 크게 할당하며, 크기가 큰 만큼 Young 영역보다 GC가 적게 발생한다.(기본적으로 데이터가 가득 차면 GC를 실행) 이 영역에서 객체가

 사라질때 Major GC(혹은 Full GC)가 발생한다고 한다.

Perm

 Class, Method 등의 Code등이 저장되는 영역으로 JVM에 의해서 사용된다.

 

 ■ Minor GC



: Eden 에서 Alive 된 객체를 Survivor1 으로 이동한 후 Eden 영역을 Clear 한다.


: Eden 영역에 Alive 된 객체와 Survivor1 영역에 Alive 된 객체를 Survivor2 에 Copy 한다. Eden, Survivor1 영역을 Clear 한다.


: 객체가 생성된 시간이 오래지나면 Eden과 Survivor 영역에 있는 오래된 객체들을 Old 영역으로 이동한다.


 ■ Full GC (Major GC)


: Mark & Compact 알고리즘을 이용한다. 전체 객체의 Reference를 체크하여 연결되지 않는 객체를 Mark 한 후 이 Mark 된 객체를 삭제한다.

(실제로는 Compact라고 해서 Mark된 객체로 생기는 부분을 Unmark된 즉 사용하는 객체로 매꾸어 버리는 방법)


 ■ Full GC의 여러가지 방식

 - Serial GC

 - Parallel GC

 - Parallel Old GC (Parallel Compacting GC)

 - Concurrent Mark & Sweep GC (CMS)

 - G1(Garbage First) GC


 ■ 주의사항

 - GC를 튜닝하기 위하여 "System.gc()"라는 메소드를 코드에 직접 삽입하여 사용하려는 부분이 있는데, 이것은 절대로 하지 말아야 할 사항이다. 코드에 직접적으로 GC를 호출하게 하여 사용할 경우 응답시간이 약 5,000배 늘어나게 되어 엄청난 성능저하를 초래한다. GC의 튜닝은 각자 서비스마다의 GC 상황을 모니터링 한 후 알맞은 GC방식의 지정과 Heap 크기의 지정으로 튜닝을 하게되니 절대적으로 코드에 GC를 호출하는 일은 없어야 한다.



※ 출처

http://helloworld.naver.com/helloworld/textyle/1329

http://bcho.tistory.com/attachment/ck14.pdf

http://www.jpstory.net/2013/12/garbage-collection-in-java/



'프로그래밍 > JAVA' 카테고리의 다른 글

JSTL Core Tag (c tag)  (4) 2015.06.02
Java의 Collections (List, Set, Map) 이해  (320) 2015.04.10
Java의 String, StringBuffer, StringBuilder 설명  (277) 2015.03.24
JAVA 첫번째  (3) 2015.03.17