목차

1. 1.8 Inch 128*160 Serial SPI TFT LCD Module Display

(1) 핀 연결

1.8인치 TFT LCD 모듈 아두이노 UNO 비고
SCK 13
SDA 11
A0 9
RESET 8
CS 10
GND GND
CC VCC +5V, +3.3V 모두 가능
LED+ 3 (PWM) PWM 핀이면 아무나 가능
LED- GND
SD MISO 12
SD SCK 13 LCD의 SCK와 동일
SD MOSI 11 LCD의 SDA와 동일
SD CS 4

(2) 소스 코드

소스코드의 길이가 길어 다른 페이지의 링크로 대신한다.
LCD 테스트 소스 코드 바로가기

2. 자이로/가속도/고도/나침반 센서

(1) 센서 스팩

항목 내용
모델명 GY-89
자이로 센서 칩 10DOF
가속도 센서 칩 L3GD20
고도계 센서 칩 BMP-180
지자계 센서 칩 LSM303D

센서의 기능

(2) 사진

ae01.alicdn.com_kf_htb1dfwplxxxxxaxxxxxq6xxfxxxg_202598555_htb1dfwplxxxxxaxxxxxq6xxfxxxg.jpg

(3) 핀 연결

자이로 센서 모듈 아두이노(Uno/Pro Mini) 비고
SCL A5
SDA A4
GND GND
VIN 5V

(4) 테스트용 소스코드

소스코드의 길이가 길어 다른 페이지의 링크로 대신한다.
자이로 센서 모듈 테스트 코드 바로가기

3. 초음파 거리 센서

(1) 센서

1) 특징

항목 내용
모델명 HC-SR04
동작 전압 5V
소비 전류 15mA
동작 주파수 40KHz
측정 거리 2 cm ~ 4 m
측정 각도 15도 (degree)
트리거 입력 신호 10㎲ TTL Pulse
응답 출력 신호 거리에 비례하는 TTL Pulse
크기 45 * 20 * 15 mm
라인 구성 Vcc, Trig, Echo, GND

2) 사진

pds.devpia.com_maeul_251_top_pds_33000_32466_990ca24a5c25a97210.jpg

(2) 핀 연결

HC-SR04 초음파 센서 아두이노(Uno/Pro Mini) 비고
VCC 5V
TRIG 디지털 7번핀
ECHO 디지털 6번핀
GND GND

(3) 테스트용 소스코드

#include <Ultrasonic.h>
 
int pinTrig = 7;
int pinEcho = 6;
 
Ultrasonic ultrasonic(pinTrig,pinEcho);
 
void setup()
{
  Serial.begin(9600);
}
 
void loop()
{
  Serial.println("Distance(cm) = " + String(ultrasonic.Ranging(CM)) );
 
  delay(1000);
}

(4) 참고

초음파 거리 센서 라이브러리
초음파 거리 센서 튜토리얼

4. 온습도 센서

(1) 센서

1) 특징

항목 내용
모델명 KY-015
센서 칩 모델 DHT11

데이터 쉬트 다운로드

2) 사진

(2) 핀 연결

HC-SR04 초음파 센서 아두이노(Uno/Pro Mini) 비고
VCC 5V
DATA 디지털 2번핀
GND GND

(3) 테스트용 소스코드

소스코드의 길이가 길어 다른 페이지의 링크로 대신한다.
DHT11 온습도 센서 테스트용 소스 코드

(4) 참고

DHT11 온습도 측정 라이브러리

5. GPS 센서

(1) 센서

1) 특징

항목 내용
모델명 GY-NEO6MV2
센서 칩 NEO-6M
크기 36mm X 24mm

데이터 쉬트 다운로드

2) 스팩

3) 사진

(2) 핀 연결

NEO-6M GPS 센서 아두이노(Uno/Pro Mini) 비고
VCC 5V
GND GND
RX 디지털 2
TX 디지털 3

(3) 테스트용 소스코드

소스코드의 길이가 길어 다른 페이지의 링크로 대신한다.
GPS 센서 테스트용 소스 코드

6. 트랜지스터 배열(ULN2003) - DC Motor Driver (모터 제어)

(1) TR Array

1) 특징

항목 내용
모델명 ULN2003
제조사 중국

데이터 쉬트 다운로드

2) 스팩

3) 사진

(2) 핀 연결

ULN2003 칩 아두이노(Uno/Pro Mini) 모터 연결 비고
IN 1 11
GND GND
COM 5V
OUT1 -
+ (외부 전원 사용 추천)

(3) 테스트용 소스코드

int motor = 11;
 
void setup() 
{
  pinMode(motor, OUTPUT);
}
 
void loop() 
{
  digitalWrite(motor, HIGH);
  delay(1000);   
  digitalWrite(motor, LOW);  
  delay(1000);
}

7. ESP8266으로 I2C LCD를 제어하기

핀 연결

I2C LCD ESP8266 12E 비고
GND GND
VCC VIN
SDA D2 (GPIO 4)
SCL D1 (GPIO 5)

(1) I2C LCD의 주소 값 가져오기

LCD에 글자를 출력하기 위해서 먼저 LCD의 I2C 주소를 알아야한다. ESP8266과 선을 연결하고 I2C 스캐너 스캐치를 업로드한다.

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
*********/
 
#include <Wire.h>
 
void setup() {
  Wire.begin();
  Serial.begin(115200);
  Serial.println("\nI2C Scanner");
}
 
void loop() {
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for(address = 1; address < 127; address++ ) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address<16) {
        Serial.print("0");
      }
      Serial.println(address,HEX);
      nDevices++;
    }
    else if (error==4) {
      Serial.print("Unknow error at address 0x");
      if (address<16) {
        Serial.print("0");
      }
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0) {
    Serial.println("No I2C devices found\n");
  }
  else {
    Serial.println("done\n");
  }
  delay(5000);          
}

제대로 동작이 되면 아래 그림과 같이 주소값을 얻을 수 있다.

(2) I2C LCD에 문자열 출력

이제 “HELLO”를 출력하는 코드를 업로드 해보자.

 
/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
*********/
 
#include <LiquidCrystal_I2C.h>
 
// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;
 
// set LCD address, number of columns and rows
// if you don't know your display address, run an I2C scanner sketch
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);  
 
void setup(){
  // initialize LCD
  lcd.init();
  // turn on LCD backlight                      
  lcd.backlight();
}
 
void loop(){
  // set cursor to first column, first row
  lcd.setCursor(0, 0);
  // print message
  lcd.print("Hello, World!");
  delay(1000);
  // clears the display to print new message
  lcd.clear();
  // set cursor to first column, second row
  lcd.setCursor(0,1);
  lcd.print("Hello, World!");
  delay(1000);
  lcd.clear(); 
}

8. 트랜지스터 DC 모터 제어

9. 가변 저항기

ESP8266과 연결하기

가변 저항기를 ESP8266과 연결하는 방법은 그냥 연결하면 된다.

10. 2극 IR 수신기

ESP8266과 연결하기

11. 마이크로 서보 모터

1) ESP8266 12E와 연결하기

핀 연결

Micro Servo Motor ESP8266 12E
갈색 GND
빨간색 VCC (3.3VDC)
주황색 GPIO14 (PWM)

연결 회로도

12. Gesture Sensor

알리에서 구입한 APDS-9930 Guesture 센서.
APDS-9930 근접센서

1) 핀 배열 설명

핀 이름 설명
VL Optional power to the IR LED if PS jumper is disconnected. Must be 3.0 – 4.5V
GND Ground
VCC Power to the sensor. Must be 2.4 – 3.6V
SCL I²C clock
SDA I²C Data
INT External interrupt. Pulled low by the sensor on interrupt event.

2) 사용할 라이브러리

본 Sensor를 사용하기 위해 APDS9930 Class Library (Davide Depau) 를 이용한다.
여기를 클릭 후 Github 홈페이지에서 파일을 다운받는다.

예제도 제공되니 예제를 참고하도록 한다.

유의 사항

APDS-9930 모듈을 사용해 본 결과, 그대로 사용할 경우 정상 동작하지 않았다.

대신 PS, PU 를 납땜한 후 정상 동작이 되었다.
사용한 라이브러리는 Dayide Depau의 APDS9930 Lirary를 이용하였다.

3) 아두이노에서 사용하기

(1) 아두이노 UNO에 연결

아두이노 APDS-9930 Board
3.3V VCC
GND GND
A4 SDA
A5 SCL
GPIO2 INT

(2) ESP8266 12E에 핀 연결

ESP8266 APDS-9930 Board
3.3V 3.3VDC
GND GND
D2 (GPIO 4) SDA
D1 (GPIO 5) SCL
INT X

13. CDS 조도 측정기 (Photoresistor Sensor)

CDS 조도 측정기는 아날로그 센서이다.

1) 아두이노 연결

14. RCWL-0516 레이더 센서

1) 특징

RCWL-0516 칩을 사용합니다.

마이크로 웨이브를 이용해 센싱을 합니다.

동작 전압 3.3v

CDS밝기센서 장착가능

뒷면의 점퍼를 통해 출력시간 및 감도 조정가능

측정 거리 5m

얇은 물체는 어느정도 통과가 가능합니다.

감지 방향은 위와 같습니다.

2) 아두이노 연결

아두이노 RCWL-0516 비고
디지털 핀 OUT HIGH(감지), LOW(보통상태)
5V VIN 5V 전원 사용 시
3.3V 3.3V 3.3V 전원 사용 시
GND GND

3) 참고 사이트

4) 핀배열

i.imgur.com_1jzkach.jpg

15. 피에조 부저 (PIEZO SPEAKER)

1) 외관

i.imgur.com_q91pwlc.jpg

2) 아두이노 연결 방법

아두이노 부저 비고
PWM 출력 핀 + TONE 출력
GND -

3) 예제 코드

const int buzzer = 3;
 
void setup() {
  // put your setup code here, to run once:
pinMode(buzzer, OUTPUT);
}
 
void loop() {
  // put your main code here, to run repeatedly:
  tone(buzzer, 1000); // Send 1KHz sound signal...
  delay(1000);        // ...for 1 sec
  noTone(buzzer);     // Stop sound...
  delay(1000);        // ...for 1sec
}

16. IR 수신기

imgur.com_mfqg9sv.jpg

1. 아두이노 배선

imgur.com_jfjhoao.jpg

2. 아두이노 테스트 코드

//------------------------------------------------------------------------------
// Include the IRremote library header
//
#include <IRremote.h>
 
//------------------------------------------------------------------------------
// Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838)
//
int recvPin = 11;
IRrecv irrecv(recvPin);
 
//+=============================================================================
// Configure the Arduino
//
void  setup ( )
{
  Serial.begin(9600);   // Status message will be sent to PC at 9600 baud
  irrecv.enableIRIn();  // Start the receiver
}
 
//+=============================================================================
// Display IR code
//
void  ircode (decode_results *results)
{
  // Panasonic has an Address
  if (results->decode_type == PANASONIC) {
    Serial.print(results->address, HEX);
    Serial.print(":");
  }
 
  // Print Code
  Serial.print(results->value, HEX);
}
 
//+=============================================================================
// Display encoding type
//
void  encoding (decode_results *results)
{
  switch (results->decode_type) {
    default:
    case UNKNOWN:      Serial.print("UNKNOWN");       break ;
    case NEC:          Serial.print("NEC");           break ;
    case SONY:         Serial.print("SONY");          break ;
    case RC5:          Serial.print("RC5");           break ;
    case RC6:          Serial.print("RC6");           break ;
    case DISH:         Serial.print("DISH");          break ;
    case SHARP:        Serial.print("SHARP");         break ;
    case JVC:          Serial.print("JVC");           break ;
    case SANYO:        Serial.print("SANYO");         break ;
    case MITSUBISHI:   Serial.print("MITSUBISHI");    break ;
    case SAMSUNG:      Serial.print("SAMSUNG");       break ;
    case LG:           Serial.print("LG");            break ;
    case WHYNTER:      Serial.print("WHYNTER");       break ;
    case AIWA_RC_T501: Serial.print("AIWA_RC_T501");  break ;
    case PANASONIC:    Serial.print("PANASONIC");     break ;
    case DENON:        Serial.print("Denon");         break ;
  }
}
 
//+=============================================================================
// Dump out the decode_results structure.
//
void  dumpInfo (decode_results *results)
{
  // Check if the buffer overflowed
  if (results->overflow) {
    Serial.println("IR code too long. Edit IRremoteInt.h and increase RAWBUF");
    return;
  }
 
  // Show Encoding standard
  Serial.print("Encoding  : ");
  encoding(results);
  Serial.println("");
 
  // Show Code & length
  Serial.print("Code      : ");
  ircode(results);
  Serial.print(" (");
  Serial.print(results->bits, DEC);
  Serial.println(" bits)");
}
 
//+=============================================================================
// Dump out the decode_results structure.
//
void  dumpRaw (decode_results *results)
{
  // Print Raw data
  Serial.print("Timing[");
  Serial.print(results->rawlen-1, DEC);
  Serial.println("]: ");
 
  for (int i = 1;  i < results->rawlen;  i++) {
    unsigned long  x = results->rawbuf[i] * USECPERTICK;
    if (!(i & 1)) {  // even
      Serial.print("-");
      if (x < 1000)  Serial.print(" ") ;
      if (x < 100)   Serial.print(" ") ;
      Serial.print(x, DEC);
    } else {  // odd
      Serial.print("     ");
      Serial.print("+");
      if (x < 1000)  Serial.print(" ") ;
      if (x < 100)   Serial.print(" ") ;
      Serial.print(x, DEC);
      if (i < results->rawlen-1) Serial.print(", "); //',' not needed for last one
    }
    if (!(i % 8))  Serial.println("");
  }
  Serial.println("");                    // Newline
}
 
//+=============================================================================
// Dump out the decode_results structure.
//
void  dumpCode (decode_results *results)
{
  // Start declaration
  Serial.print("unsigned int  ");          // variable type
  Serial.print("rawData[");                // array name
  Serial.print(results->rawlen - 1, DEC);  // array size
  Serial.print("] = {");                   // Start declaration
 
  // Dump data
  for (int i = 1;  i < results->rawlen;  i++) {
    Serial.print(results->rawbuf[i] * USECPERTICK, DEC);
    if ( i < results->rawlen-1 ) Serial.print(","); // ',' not needed on last one
    if (!(i & 1))  Serial.print(" ");
  }
 
  // End declaration
  Serial.print("};");  // 
 
  // Comment
  Serial.print("  // ");
  encoding(results);
  Serial.print(" ");
  ircode(results);
 
  // Newline
  Serial.println("");
 
  // Now dump "known" codes
  if (results->decode_type != UNKNOWN) {
 
    // Some protocols have an address
    if (results->decode_type == PANASONIC) {
      Serial.print("unsigned int  addr = 0x");
      Serial.print(results->address, HEX);
      Serial.println(";");
    }
 
    // All protocols have data
    Serial.print("unsigned int  data = 0x");
    Serial.print(results->value, HEX);
    Serial.println(";");
  }
}
 
//+=============================================================================
// The repeating section of the code
//
void  loop ( )
{
  decode_results  results;        // Somewhere to store the results
 
  if (irrecv.decode(&results)) {  // Grab an IR code
    dumpInfo(&results);           // Output the results
    dumpRaw(&results);            // Output the results in RAW format
    dumpCode(&results);           // Output the results as source code
    Serial.println("");           // Blank line between entries
    irrecv.resume();              // Prepare for the next value
  }
}

3. IR 리모콘 관련 사이트

17. Analogue PH Tester

1) 스팩/사양

2) 외관/핀배열

i.imgur.com_vp85ytq.jpg
i.imgur.com_dvlxva9.jpg

3) 사용 라이브러리

4) Calibration