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 |
소스코드의 길이가 길어 다른 페이지의 링크로 대신한다.
LCD 테스트 소스 코드 바로가기
항목 | 내용 |
---|---|
모델명 | GY-89 |
자이로 센서 칩 | 10DOF |
가속도 센서 칩 | L3GD20 |
고도계 센서 칩 | BMP-180 |
지자계 센서 칩 | LSM303D |
자이로 센서 모듈 | 아두이노(Uno/Pro Mini) | 비고 |
---|---|---|
SCL | A5 | |
SDA | A4 | |
GND | GND | |
VIN | 5V |
소스코드의 길이가 길어 다른 페이지의 링크로 대신한다.
자이로 센서 모듈 테스트 코드 바로가기
항목 | 내용 |
---|---|
모델명 | HC-SR04 |
동작 전압 | 5V |
소비 전류 | 15mA |
동작 주파수 | 40KHz |
측정 거리 | 2 cm ~ 4 m |
측정 각도 | 15도 (degree) |
트리거 입력 신호 | 10㎲ TTL Pulse |
응답 출력 신호 | 거리에 비례하는 TTL Pulse |
크기 | 45 * 20 * 15 mm |
라인 구성 | Vcc, Trig, Echo, GND |
HC-SR04 초음파 센서 | 아두이노(Uno/Pro Mini) | 비고 |
---|---|---|
VCC | 5V | |
TRIG | 디지털 7번핀 | |
ECHO | 디지털 6번핀 | |
GND | GND |
#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); }
항목 | 내용 |
---|---|
모델명 | KY-015 |
센서 칩 모델 | DHT11 |
HC-SR04 초음파 센서 | 아두이노(Uno/Pro Mini) | 비고 |
---|---|---|
VCC | 5V | |
DATA | 디지털 2번핀 | |
GND | GND |
소스코드의 길이가 길어 다른 페이지의 링크로 대신한다.
DHT11 온습도 센서 테스트용 소스 코드
항목 | 내용 |
---|---|
모델명 | GY-NEO6MV2 |
센서 칩 | NEO-6M |
크기 | 36mm X 24mm |
NEO-6M GPS 센서 | 아두이노(Uno/Pro Mini) | 비고 |
---|---|---|
VCC | 5V | |
GND | GND | |
RX | 디지털 2 | |
TX | 디지털 3 |
소스코드의 길이가 길어 다른 페이지의 링크로 대신한다.
GPS 센서 테스트용 소스 코드
항목 | 내용 |
---|---|
모델명 | ULN2003 |
제조사 | 중국 |
ULN2003 칩 | 아두이노(Uno/Pro Mini) | 모터 연결 | 비고 |
---|---|---|---|
IN 1 | 11 | ||
GND | GND | ||
COM | 5V | ||
OUT1 | - | ||
+ | (외부 전원 사용 추천) |
int motor = 11; void setup() { pinMode(motor, OUTPUT); } void loop() { digitalWrite(motor, HIGH); delay(1000); digitalWrite(motor, LOW); delay(1000); }
I2C LCD | ESP8266 12E | 비고 |
---|---|---|
GND | GND | |
VCC | VIN | |
SDA | D2 (GPIO 4) | |
SCL | D1 (GPIO 5) |
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); }
이제 “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(); }
가변 저항기를 ESP8266과 연결하는 방법은 그냥 연결하면 된다.
Micro Servo Motor | ESP8266 12E |
---|---|
갈색 | GND |
빨간색 | VCC (3.3VDC) |
주황색 | GPIO14 (PWM) |
핀 이름 | 설명 |
---|---|
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. |
본 Sensor를 사용하기 위해 APDS9930 Class Library (Davide Depau) 를 이용한다.
여기를 클릭 후 Github 홈페이지에서 파일을 다운받는다.
예제도 제공되니 예제를 참고하도록 한다.
APDS-9930 모듈을 사용해 본 결과, 그대로 사용할 경우 정상 동작하지 않았다.
대신 PS, PU 를 납땜한 후 정상 동작이 되었다.
사용한 라이브러리는 Dayide Depau의 APDS9930 Lirary를 이용하였다.
아두이노 | APDS-9930 Board |
---|---|
3.3V | VCC |
GND | GND |
A4 | SDA |
A5 | SCL |
GPIO2 | INT |
ESP8266 | APDS-9930 Board |
---|---|
3.3V | 3.3VDC |
GND | GND |
D2 (GPIO 4) | SDA |
D1 (GPIO 5) | SCL |
INT | X |
CDS 조도 측정기는 아날로그 센서이다.
RCWL-0516 칩을 사용합니다.
마이크로 웨이브를 이용해 센싱을 합니다.
동작 전압 3.3v
CDS밝기센서 장착가능
뒷면의 점퍼를 통해 출력시간 및 감도 조정가능
측정 거리 5m
얇은 물체는 어느정도 통과가 가능합니다.
감지 방향은 위와 같습니다.
아두이노 | RCWL-0516 | 비고 |
---|---|---|
디지털 핀 | OUT | HIGH(감지), LOW(보통상태) |
5V | VIN | 5V 전원 사용 시 |
3.3V | 3.3V | 3.3V 전원 사용 시 |
GND | GND |
아두이노 | 부저 | 비고 |
---|---|---|
PWM 출력 핀 | + | TONE 출력 |
GND | - |
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 }
//------------------------------------------------------------------------------ // 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 } }