아누이노 관련 좋은 강좌입니다.

PDF로 배포하고 있으며 온라인 도서 형태입니다.

저자의 열성이 대단합니다.

입문자 뿐만 아니라 개발자들도 종종 이용해도 좋을 것 같네요.

네이버 "아두이노 생초보 무조건 따라하기 " 카페에서 내용을 확인하시면 됩니다.


작성자    → hgycap@hotmail.com

관련 URL → http://cafe.naver.com/myarduino/237




Table of Contents

 

Part I. 아두이노 배우기···························································································1  
  Chapter 1. 아두이노란 무엇인가?············································································2  
  Chapter 2. 아두이노 개발환경 설정·········································································12  
  Chapter 3. 아두이노 프로그램의 구조·······································································32  

  Chapter 4. 디지털 및 아날로그 입출력······································································40  

  Chapter 5. 아두이노 함수·····················································································50 
  Chapter 6. 기본 클래스······················································································· 77  
  Chapter 7. 라이브러리·······················································································106


Part II. 아두이노 사용하기·····················································································126
  Chapter 8. 아두이노를 위한 C/C++ 언어·································································127  
  Chapter 9. 디지털 및 아날로그 입출력 사용하기························································171  
  Chapter 10. 직렬 통신 사용하기···········································································207  
  Chapter 11. 센서 사용하기··················································································218

 


Part III. 아두이노 활용하기····················································································231  
  Chapter 12. 초음파 거리 센서··············································································232  
  Chapter 13. 텍스트 LCD····················································································245  
  Chapter 14. 그래픽 LCD····················································································258  
  Chapter 15. 7 세그먼트 표시장치··········································································270  
  Chapter 16. 네 자리 7 세그먼트 표시장치································································286  
  Chapter 17. EEPROM 라이브러리········································································295  
  Chapter 18. Real Time Clock··············································································298  
  Chapter 19. Real Time Clock - Wire 라이브러리 활용················································309  
  Chapter 20. 소프트웨어 시리얼·············································································326  
  Chapter 21. I2C와 SPI 통신을 이용한 아두이노 연결···················································334  
  Chapter 22. 블루투스·························································································348  
  Chapter 23. 서보 & DC 모터················································································369  
  Chapter 24. 모터 쉴드························································································380  
  Chapter 25. LED 매트릭스··················································································386  
  Chapter 26. I2C를 통한 LED 매트릭스 제어·····························································407  
  Chapter 27. 타이머 라이브러리 
  Chapter 28. 전자부품
  Chapter 29. 마이크로컨트롤러
  Chapter 30. 이더넷

  Chapter 31. 버튼 입력 확장

  Chapter 32. 부트로더

  Chapter 33. TFT-LCD
  Chapter 34. SD 라이브러리 
  Chapter 35. DIY Arduino 
  Chapter 36. ATmega128 
  Chapter 37. ATtiny85 

  Chapter 38 ~ 39 Reserved for future use

  Chapter 40. 아두이노 레오나르도

  Chapter 41. 아두이노 레오나르도 - 마우스 키보드 라이브러리

  Chapter 42. 아두이노 메가2560

  Chapter 43 ~ 47 Reserved for future use

  Chapter 48. 프로세싱 언어란 무엇인가? 

  Chapter 49. Reserved for future use 

  Chapter 50. 프로세싱으로 안드로이드 앱 만들기  

  Chapter 51. Reserved for future use 

  Chapter 52. Ketai 라이브러리 

  Chapter 53.1 프로세싱 - controlP5 라이브러리 - 버튼

  Chapter 53.2 프로세싱 - controlP5 라이브러리 - 노브 슬라이더

  Chapter 53.3 프로세싱 - controlP5 라이브러리 - 텍스트라벨, 텍스트필드

  Chapter 54 Ketai 라이브러리 - 블루투스 맛보기      

  Chapter 55.1 스마트폰으로 아두이노 제어하기 첫번째  

  Chapter 55.2 스마트폰으로 아두이노 제어하기 두번째   

  Chapter 55.3 스마트폰으로 아두이노 제어하기 세번째 - RGB LED 제어   

  Chapter 55.4 스마트폰으로 아두이노 제어하기 네번째 - 가변저항값을 그래프로 



반응형

센서 작업을 하다보면 전류/전압에 대한 변경이 필요할 때가 많습니다.

아누이노에서도 마찬가지입니다.


아래는 저가형 DC 컨버터 중 LED가 달린 모델입니다. LED가 달려서 저가 중에서는 상대적으로 좀 비싼 녀석입니다. 특이사항으로 가변 저항(전위차계, potentiometer)이 달려서 출력 전압(output)을 조절할 수 있습니다.


□ DC 4.5-24V To 0.93-20V Converter Step Down Module With LED Voltmeter



아래는 6셀 리튬폴리머 22.2 volt 배터리로 테스트를 한 결과입니다.

22.2 V가 12V 로 step down된 것을 볼 수 있습니다. 


□ 테스트 1) 22.2 V → 12V


아래 가변저항을 돌려주면 전압 조절이 가능합니다. 보통 반시계방향일 경우 buck ( step down, 감압 ) 됩니다.


좀 더 낮은 전압도 잘 변경됩니다. 스펙처럼 4.5 V - 24 V를 0.93 - 20V 정도로 변경이 가능할 듯 합니다.

□ 테스트 2) 11.1 V → 5.0 V


□ 주의사항

22.2V 연결시 상당히 뜨거워 집니다. 장기간 사용해도 괜찮을까 생각이 스믈스믈 떠오르게 되는데요.

화재 위험이 있는 곳에서는 사용하지 않는 것이 좋겠습니다.

역시 ... 싼건 싼 이유가 있는 것일까요? 그러나, 간단한 테스트용으로는 가성비가 좋습니다.


□ 기타

보통 DC-DC 강압 컨버터는 강압 컨버터, step down 컨버터, 또는 buck 컨버터라도 흔히들 부릅니다. 사실 buck 컨버터는 강압 컨버터 중 하나이긴 하지만, 가격대 성능비와 작은 크기때문에 많이 사용되는 바람에 DC-DC 강압 컨버터의 대명사처럼 사용되죠.

아래 사이트는 buck 컨버터에 대해 잘 소개되어 있습니다.

시간날때 보셔도 좋을 듯 합니다.


관련 URL  buck converter란? http://blog.naver.com/pstek1124?Redirect=Log&logNo=70178049607





반응형

□ USB To Serial port 설치 문제( Setup Problem )

 

아두이노 나노를 설치할 때 일반적으로 USB to Serial 포트를 자동 설치하지 못하고 FTDI 드라이버 등을 인스톨하여 수동 설치하는 경우가 일반적이다. 특히, Windows 7 64bit 환경에서는 거의 100% 발생한다.

 

그런데, 일부 아두이노 나노 호환 제품들은 FTDI 또는 PL2302 드라이버로 USB to Serial 포트 인식을 하지 못하는 경우가 있다.

 

이 중 WCH CH240G 칩셋을 사용한 제품이 가장 흔하다.  WCH CH240G 칩셋 오류는 아래와 같이 드라이버를 설치하여 해결할 수 있다.

 

 This device did not work with the FTDI drivers, nor the PL2302 drivers.

 

□ 정품과 USB to Serial port 컨트롤러에 WCH CH240G칩을 사용한 클론칩 구성 비교

정품( Original, FTDI )

클론( Clone, WCH CH240G )

 

 

 

 

 

 

시리얼 포트를 설치할 수 없을 경우

- 뒤면 chip 확인

  WCH CH340G 일 경우

 

 

 

 

 

□ Driver download

  - 제조사            WCH Nanjing QinHeng Electronics

  - 제조사 Driver   http://www.wch.cn/downloads.php?name=pro&proid=5

  - driver file       CH341SER.ZIP

 

 

□ 설치 방법( Setup Guide )

  1) CH341SER.ZIP Download 및 압축해제

 

  2) 드라이버 수동 설치 선택

 

 

  3) 압축을 해제한 디렉토리 지정

 

 

  4) 설치 결과 확인(Result)

 

 

반응형
  • 본 제품은 Sharp사의 적외선 근접센서(Part# GP2Y0A02YK0F)로 측정한 거리를 아날로그 출력으로 내보냅니다.
  • 4.5-5.5VDC를 공급받으며 15cm(2.8V) ~ 150cm(0.4V)을 측정합니다.
  • 센서에는 JST 커넥터가 부착되어 있습니다.
  •  

     

     

    gp2y0a02yk_e.pdf

     

    반응형

     

    10cm~80cm

    0~10cm까지를 사용할 수도 있지만, 그 값이 일정하지 않고, 0cm에서 0V를 출력하지 않는 것으로 확인되었습니다. 따라서 10cm 이후부터 사용하는 것이 적합하며, 10cm이내의 거리 센싱은 근거리 센서를 사용하는 것이 적합할 것입니다. 

     

     

     

     

     

    int ir = 0;

    void setup()

    {

      analogReference(DEFAULT);

      Serial.begin(9600);

      pinMode (ir, INPUT);

    }

     

    void loop()

    {

      int raw=analogRead(ir);

      int volt=map(raw, 0, 1023, 0, 5000);

      int cm=(21.61/(volt-0.1696))*1000;

      Serial.println(cm);  

      }

     

    반응형

    4~30 cm

     

     

     

     

    int IRpin = 1;                                    // analog pin for reading the IR sensor

    void setup() {
      Serial.begin(9600);                             // start the serial port
    }

    void loop() {
      float volts = analogRead(IRpin)*0.0048828125;   // value from sensor * (5/1024) - if running 3.3.volts then change 5 to 3.3
      float distance = 65*pow(volts, -1.10);          // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk
      Serial.println(distance);                       // print the distance
      delay(100);                                     // arbitary wait time.
    }
    [출처] GP2Y0A41SK0F 적외선 거리센서 with 아두이노|작성자 roboholic84


     

     

    반응형

    - If you can try to use sprintf() to convert from a float to a string on Arduino, it doesn't work.

      The function sprintf() return a "?" instead of float format.

      The alternative to solve the problem is to use dtostrf(), the function in the avr-libc library.

     

    아두이노에서 부동소수값 출력을 위해

     

    sprintf( buf, "%f", 1.1f );

    Srial.println( buf );

     

          → output : ?  

     

    위와 같이 sprintf() 함수를 사용한 경우 1.1이 아닌 "?" 가 출력된다.

    정확한 결과를 위해 

     

    dtostrf() 함수를 사용

     

    하여 해결 가능하다.

     

    □ dtostrf()  개요

      - dtostrf() 함수는 부동소수(double, float) 변수를 주어진 형식에 따른 문자열을 출력

      - The dtostrf() function converts the double value passed in val into an ASCII representation that will be

        stored under s.

     

    char* dtostrf

    (

    double 

    __val,

    signed char 

    __width,

    unsigned char 

    __prec,

    char * 

    __s 

    )

     

    □ 매개변수 정의 

     매개변수

    내용

     

     double __val

     - 변경할 부동소수

     - floatvar

       Float variable

     

     signed char __width

     - 음수부호(-)와 소수점을 포함한 전체 자리수

     - StringLengthIncDecimalPoint

       It is the length of the string will be created

     소수점 포함, 음수는 (-)포함

     unsigned char__ prec

     - 소수점을 제외한 소수점 자릿수

     - numVarsAfterDecimal

       The number of digits after the dicimal point 

     소수점 제외 

     char * __s

     - 문자열 버퍼 ( char buffer )

     - charbuf

       The char array to store the result

     

     

     

    □ dtostrf() 사례 ( Sample )

    #include    <stdio.h>
     
    void    setup() {
        Serial.begin( 9600 );
    }
     
    void    loop() {
        char    CAa [20] = "";
        char    CAb [20] = "";
        char    CAc [ 3] = "";
        char    CAd [ 5] = "0000";
     
        char buf[128];    
     
        dtostrf( 123.123    ,  6, 2, CAa );
        dtostrf( 456.456     , 1, 3, CAb );
        sprintf(buf, "dtostrf( 123.123     ,  6, 2, CAa ) -> %15s\n"
                     "dtostrf( 456.456     ,  1, 3, CAb ) -> %15s"
                     , CAa
                     , CAb          );
        Serial.println(buf);
     
        dtostrf( 123.123    ,  6, 2, CAa );
        dtostrf( 456.4567    , 6, 2, CAb );
        sprintf(buf, "dtostrf( 123.123     ,  6, 2, CAa ) -> %15s\n"
                     "dtostrf( 456.4567    ,  6, 2, CAb ) -> %15s"
                     , CAa
                     , CAb          );
        Serial.println(buf);
     
        dtostrf( 12312.123   , 3, 2, CAa );
        dtostrf( 456.4567789 , 2, 5, CAb );
        sprintf(buf, "dtostrf( 12312.123   ,  3, 2, CAa ) -> %15s\n"
                     "dtostrf( 456.45674444,  2, 5, CAb ) -> %15s"
                     , CAa
                     , CAb          );
        Serial.println(buf);
     
        dtostrf( 123.12345678, 10, 3, CAa );
        dtostrf( 456456.4567 , 11, 4, CAb );
        sprintf(buf, "dtostrf( 123.12345678, 10, 3, CAa ) -> %15s\n"
                     "dtostrf( 456456.4567 , 11, 4, CAb ) -> %15s"
                     , CAa
                     , CAb          );
        Serial.println(buf);
     
        dtostrf( 123.123     , 10, 3, CAa );
        dtostrf( 456456.45   , 10, 4, CAb );
        sprintf(buf, "dtostrf( 123.123     , 10, 3, CAa ) -> %15s\n"
                     "dtostrf( 456456.45   , 10, 4, CAb ) -> %15s"
                     , CAa
                     , CAb          );
        Serial.println(buf); 
     
        dtostrf( 789.789    ,  3, 3, CAc );
        sprintf(buf, "dtostrf( 789.789     ,  3, 3, CAc ) -> %15s\n"
                     "CAd is 0000                         -> %15s"
                     , CAc         
                     , CAd );
        Serial.println(buf);
           
       delay( 2000 );
    }       

     

     

    □ 결과 (Result)

    dtostrf( 123.123     ,  6, 2, CAa ) ->          123.12      // Normal. 정상
    dtostrf( 456.456     ,  1, 3, CAb ) ->         456.456      // Error. 전체자리수 무시됨
    dtostrf( 123.123     ,  6, 2, CAa ) ->          123.12      // Normal. 정상
    dtostrf( 456.4567    ,  6, 2, CAb ) ->          456.46      // Normal. 정상. 소수점 끝자리 반올림됨
    dtostrf( 12312.123   ,  3, 2, CAa ) ->        12312.12      // Error. 전체자리수 무시됨
    dtostrf( 456.45674444,  2, 5, CAb ) ->       456.45679      // Error. 부동소수 오류(끝자리 4가 아님)
    dtostrf( 123.12345678, 10, 3, CAa ) ->         123.123      // Normal. 정상
    dtostrf( 456456.4567 , 11, 4, CAb ) ->     456456.4700      // Error. 부동소수 오류 발생
    dtostrf( 123.123     , 10, 3, CAa ) ->         123.123      // Normal. 정상
    dtostrf( 456456.45   , 10, 4, CAb ) ->     456456.4400      // Error. 소수점 끝자리 오류발생
    dtostrf( 789.789     ,  3, 3, CAc ) ->         789.789      // Error. sizeof(CAc)→3, Buffer Over Flow 발생
    CAd is 0000                         ->            .789      // Error. CAc의 BoF로 원래 값이 지워짐

     

    결과에서 알 수 있듯이 dtostrf()도 정확한 연산이 되는 것은 아니다.

    그러나, dtostrf()를 sprintf() 대신 충분히 사용가능하다.

     

    As the result, dtostrf () also is not working exactly.
    But, however , the dtostrf () is fully available instead of sprintf().

     

    반응형

    '아두이노 > 일반' 카테고리의 다른 글

    [브리핑] 아두이노 강좌  (0) 2016.02.03
    Arduino Nano USB to Serial Port 설치-WCH CH340G  (0) 2014.12.31
    I2C 통신  (0) 2014.11.21
    Arduino 사용자 라이브러리 작성법  (0) 2014.11.16

     

     

     

     

     

    GENERAL SPECIFICATIONS 

     
    CIRCUIT:SPST
    CURRENT RATING:12mA
    VOLTAGE RATING:24VDC
    CONTACT RESISTANCE:50mΩ Max.(inital)
    INSULATION RESISTANCE:100MΩ Min
    OPERATING FORCE:170gf±50g
    TOTAL TRAVEL:2.8mm±0.4mm
    OPERATING LIFE:50,000 CYCLES Min
    SOLDER SPECIFICATIONS:256°C for 3 seconds
    FUNCTION:Momentary
    OPERATING TEMPERATURE:+10°C ~ +60°C
     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    반응형

    '아두이노 > 센서' 카테고리의 다른 글

    Sharp 2Y0A21 : 적외선 거리센서  (0) 2014.12.24
    GP2Y0A41SK0F : 적외선 거리센서  (0) 2014.12.24
    스위치 : 푸시형 NON-LOCK DJP2213  (0) 2014.11.26
    HC-SR04 : 초음파 거리측정 센서  (0) 2014.11.24
    I2C Address  (0) 2014.11.21

     

     

     

     

     

     

     * Typical Specifications
     
    1.Rating : DC30V 0.1A
     2.Circuit : 2C - 2P
     3.Contact Resistance : 30mΩMax.
     4.Operating Force : 200±80gf, 300±100gf
     5.Operating Life : 10,000cycles
     6.KNOB 사이즈 : 10 X 10 X 6.5mm 

     

     

     

     

     

     

     

     

     

     

     

     

     

    반응형

    '아두이노 > 센서' 카테고리의 다른 글

    GP2Y0A41SK0F : 적외선 거리센서  (0) 2014.12.24
    스위치 : 푸시형 NON-LOCK PB86-A1  (0) 2014.11.26
    HC-SR04 : 초음파 거리측정 센서  (0) 2014.11.24
    I2C Address  (0) 2014.11.21
    801s : 진동센서  (0) 2014.11.20

     

    □ HC-SR04

     

     

     

     

    □ HC-SR04 특징(Specification)

     항목 

     내용 

     동작 전압(Working Voltage)

     5V

     동작 전류(Working Current)

     15mA

     동작 주파수(Working Frequency)

     40KHz

     측정 거리(Min, Max Range)

     2 cm ~ 4 m

     측정 각도(Measuring Angle)

     15도 (degree)

     트리거 입력 신호(Trigger Input Signal)

     10㎲ TTL Pulse

     응답 출력 신호(Echo Output Signal)

     거리에 비례하는 TTL Pulse

     크기(Dimension)

     45 * 20 * 15 mm

     라인 구성

     Vcc, Trig, Echo, GND 

     

     

    □ HC-SR04 아두이노 회로 구성도( HC-SR04 Arduino circuit diagram )

     

     

     

     

    □ HC-SR04 와 아두이노 Pin 배열 

     HC-SR04 

     Arduino 

     비고

     VCC

     5V

     

     TRIG

    Digital pin 12

     

     ECHO

    Digital pin 11

     

     GND

     GND

     

    * TRIG와 ECHO는 Digital INPUT 중 어떤 것을 사용해도 무방함

     

     

    □ HC-SR04 Sample Source 

    #define DEFN_TRIGGER 12
    #define DEFN_ECHO    11
    #define DEFN_DELAY   1000
    #define DEFN_BIT_RATE 9600
     
    void setup(){
     pinMode(DEFN_TRIGGER, OUTPUT);
     pinMode(DEFN_ECHO   , INPUT );
     Serial.begin(DEFN_BIT_RATE);    
    }
     
    void loop() {
     digitalWrite(DEFN_TRIGGER, LOW);                  
     DEFN_DELAYMicroseconds(2);
     digitalWrite(DEFN_TRIGGER, HIGH);
     DEFN_DELAYMicroseconds(10);
     digitalWrite(DEFN_TRIGGER, LOW);
     
     long time_us = pulseIn(DEFN_ECHO, HIGH);  // Get DEFN_ECHO time in microsecs
     long dist_mm = time_us * 0.17;            // 0.34 / 2
     
     Serial.print("Time(us) : ");        Serial.print(time_us); 
     Serial.print("\tDistance(mm) : ");  Serial.print(dist_mm);
     Serial.println("");
     
     DEFN_DELAY(DEFN_DELAY);
    }

     

     

    □ HC-SR04 참고자료

    HC-SR04 001 datasheet.pdf

     

     

     

     

     

    반응형

    '아두이노 > 센서' 카테고리의 다른 글

    스위치 : 푸시형 NON-LOCK PB86-A1  (0) 2014.11.26
    스위치 : 푸시형 NON-LOCK DJP2213  (0) 2014.11.26
    I2C Address  (0) 2014.11.21
    801s : 진동센서  (0) 2014.11.20
    BMP180 : 고도센서, 기압센서, 온도센서  (0) 2014.11.20

    + Recent posts