'프로그래밍/임베디드SW' 카테고리의 글 목록 :: 잡다한 프로그래밍
반응형

1. 사운드 센서란?

  • 센서 주변의 소리의 크기를 감지하는 센서
  • 소리의 크기 값을 디지털과 아날로그로 출력함
  • 디지털 출력: 보통 상태일 때는 Low 출력, 소리가 감지되면 High 출력됨
  • 아날로그 출력: 소리의 크기를 숫자로 출력
  • 가변저항으로 민감도 조절함

사운드 센서


2. 사운드 센서 실습하기

사운드 센서를 통해 소리 값을 아날로그로 출력한다. 사전 준비물은 다음과 같다.

준비를 완료하였다면 A0에 사운드 세서 아날로그 핀을, 13번에 디지 털핀을 연결하고 다음과 같이 코드를 작성한다

주석 부분을 해제할 경우 아두이노 기본 LED핀이 소리가 날 때마다 켜지고 꺼지는 것을 확인할 수 있고, 소리가 날 경우 시리얼을 통해 소리의 정도를 숫자로 확인할 수 있다.

int sensorPin = A0; 
int ledPin = 13;
int sensorValue = 0;
void setup() {
	pinMode(ledPin, OUTPUT);
	Serial.begin(9600);
}
void loop() {
	sensorValue = analogRead(sensorPin);
/*
digitalWrite(ledPin, HIGH);
delay(sensorValue);
digitalWrite(ledPin, LOW);
delay(sensorValue); */
	Serial.println(sensorValue, DEC);
}
반응형
반응형

1. 수위측정센서란?

수위 측정 센서란 다음 그림처럼 도체와 절연체로 이루어진 센서로 물이 어느정도 찼는지를 측정하는 센서이다.

  • 접촉식 수위센서는 니켈 같은 도체로 구성된 금속판이 절연체에 띄엄띄엄 떨어져 있고, 개방된 회로라고 하고, 전 류가 흐르지 않음.
  • 반면에, 액체가 접촉하게 되면 띄어져 있는 도체가 연결되기 때문에 저항값이 무한대인 개방된 회로보다 저항값이 줄어들고 전류가 흐를 수 있게 됨.
  • 이를 통해 물에 접촉하는 표면적이 많을수록 출력 저항값이 적어지는 것을 알 수 있고, 센서를 세워서 연결했을 때,센서의 저항값은 액체 높이에 반비례함.
  • 접촉식 수위센서 뿐만 아니라, 수분센서, 강우량 센서 등 액체의 직접적인 접촉에 의한 대부분의 센서들은 이와 같은 저항값에 따른 수분량을 파악함.

수위측정센서 설명


2. 수위측정센서 실습하기

수위 측정 센서를 통해 물이 얼마나 찼는지 측정한다. 사전준비물은 다음과 같다

준비물

준비가 완료되었다면 다음과 같이 회로를 구성합니다.

회로도

회로 구성을 완료하였다면 다음과 같이 코드를 작성합니다.

int water_sensor = 0;

void setup(){
	Serial.begin(9600);
}

void loop(){
	water_sensor = analogRead(A0);
    Serial.println(water_sensor);
}

코드 작성을 완료하였다면 수위를 측정할 수 있습니다.

반응형
반응형

1. 온습도 센서란?

  • 온도와 습도를 동시에 측정이 가능한 센서
  • Arduino Plaground에서 라이브러리 제공
  • 온도와 습도를 동시에 측정하는 것은 아니고 서로 배타적으로 측정값을 읽어옴

온습도 센서


2. 온습도 센서 실습하기

온습도 센서를 통해 온습도를 읽어오는 실습을 진행한다. 사전 준비물은 다음과 같다.

사전 준비물

 

준비를 마쳤다면 DHT11 온습도 라이브러리를 다운로드한다

http://playground.arduino.cc/main/DHT11Lib 링크를 통해 라이브러리를 다운로드한다

다운로드 1
다운로드2
다운로드3

다운을 완료하였다면 다음과 같이 라이브러리를 추가한다

1. C:/Program Files (x86)/Arduino/libraries/DHT11 폴더를 생성
2. 다운로드한 dht11.h, dht11.cpp 파일 새로 생성한 폴더로 복사
3. 아두이노 개발환경에서 새로 설치한 라이브러리를 인식시키기 위해서는 아두이노 개발환경
   프로그램을 종료하고 다시 시작함

라이브러리 추가

 

추가를 완료하였다면 다음과 같이 코드를 작성한다.

#include <dht11.h>
#define DHT11PIN 2
dht11 DHT11;
void setup()
{
	Serial.begin(9600);
}
void loop()
{
	Serial.println("\n");
	int chk = DHT11.read(DHT11PIN);
	Serial.print("Read sensor: ");
	switch (chk)
	{
		case DHTLIB_OK: Serial.println(“OK”);
			break;
		case DHTLIB_ERROR_CHECKSUM:
			Serial.println(“Checksum error”);
			break;
		case DHTLIB_ERROR_TIMEOUT:
			Serial.println(“Time out error”);
			break;
		default: Serial.println("Unknown error");
			break;
	}
	
    Serial.print("Humidity (%): ");
	Serial.println((float)DHT11.humidity, 2);
	Serial.print("Temperature (°C): ");
	Serial.println((float)DHT11.temperature, 2);
	delay(2000);
}

 

코드 작성을 완료하였다면 다음과 같은 결과를 확인할 수 있다.

결과

반응형
반응형

1. 릴레이란?

  • ON/OFF 기능을 할 수 있는 일종의 스위치
  • 낮은 전류로 높은 전류를 제어 가능
  • 아두이노에서는 5V를 사용하지만 5V 이상의 전류를 제공해야 할 때 릴레이를 사용
  • 평상시는 NC와 COM단자가 연결되어 있고, SIG핀으로 전류가 흐를 시 NO와 COM단자가 연결된다.

릴레이


2. 릴레이 사용법

고 전압을 사용할 시 전원을 모두 제거하고 사용해야 하고 되도록 사용방법만 익히고 실제로 해보지 않는 걸 추천합니다.

 

만약 다음 그림과 같이 연결되어있다면 평상시에는 NC와 COM이 연결되어있기 때문에 현재 NO, COM이 연결된 아래 그림은 전구에 불이 켜지지 않을 것이다 하지만 7번 핀에 전류가 흐를 경우 NO와 COM이 연결되므로 전구에 불이 켜질 것이다. 이처럼 낮은 전류로 높은 전류를 컨트롤하기 위해 릴레이를 사용한다

릴레이 연결

반응형
반응형

1. 조도센서란?

  • 빛 감지센서
  • 저렴한 가격과 활용도를 가지고 많이 사용함
  • CDS 센서는 광에 쏘여지면 저항 값이 감소하는 광도전효과를 이용한 센서
  • CDS라고 불리는 이유는 CDS를 만드는 주 재료가 카드뮴, 황의 화합물인 황화 카드뮴이기 때문
  • 주위가 밝으면 저항이 줄어들고 주위가 어두우면 저항이 커지는 특징
  • 주위가 밝으면 CDS 저항이 줄어들어 Analog Input 핀에 높은 전압
  • 주위가 어두워 지면 CDS 저항이 커져 Analog Input 핀에 낮은 전압

조도센서 설명


2. 조도센서 실습하기

조도센서를 통한 LED ON/OFF실습에 필요한 사전준비물은 다음과 같다

사전 준비물

준비가 완료 되었다면 다음과 같이 회로를 구성한다. 조도센서는 극성이 없으므로 +, - 를 구분할 필요가 없다.

회로 구성

회로 구성이 완료 되었다면 다음과 같이 코드를 작성한다. A0으로 Analog Input을 이용하여 조도센서 값을 읽어오고, 읽어온 값이 100이상일경우 LED를 OFF하고 100보다 작을경우 LED를 ON하는 코드이다

int lightPin = A0;
int ledPin=11;
void setup()
{
	Serial.begin(9600);
	pinMode( ledPin, OUTPUT );
}
void loop()
{
	Serial.println(analogRead(lightPin)/4);
	if ( analogRead(lightPin)/4 >= 100 )
		digitalWrite(ledPin, LOW);
	else
		digitalWrite(ledPin, HIGH);
	delay(10);
}
반응형
반응형

1. 터치센서란?

터치센서는 아래 사진과 같으며 정전 용량형 터치 스위치 모듈이다. 보통 상태일 때는 Low 출력, 터치가 되었을 때는 High를 출력한다. VCC = +5V, GND = GND, SIG = 디지털 핀에 연결하여 사용하면 된다

터치센서


2. 터치센서 실습하기

터치센서와 LED를 사용하여 실습을 진행한다. 실습에 필요한 사전 준비물은 다음과 같다

사전 준비물

준비가 완료 되었다면 다음과 같이 회로를 구성한다

회로구성

회로 구성이 끝났다면 다음과 같이 코드를 작성한다. 터치센서에서 읽어 들인 touch값이 Low일 때 led를 끄고 High일 때 LED를 키는 코드이다

int touch = 3; // D3
int led = 9; // D9
void setup()
{
	pinMode(touch, INPUT);
	pinMode(led, OUTPUT);
}
void loop() {
	if( digitalRead(touch) == LOW )
		digitalWrite(led, LOW);
	else
		digitalWrite(led, HIGH);
}
반응형
반응형

1. ADC란?

Analog Digital Converter로서 연속적인 신호인 아날로그 신호를 부호화된 디지털 신호로 변환하는 장치를 의미한다. A\DC는 온도, 압력, 음성, 영상신호, 전압 등을 실생활에서 연속적인 아날로그 신호를 측정하여 그 신호를 컴퓨터로 입력하고 디지털로 변환하는 것을 의미한다. 여기서 우리가 사용할 가변저항이 ADC역할을 한다.

ADC그림


2. 가변저항 실습하기

가변저항과 LED를 사용하여 Analog Input / Output 실습을 진항한다. 실습에 필요한 사전 준비물은 다음과 같다.

  • 가변저항이란 : 저항의 값이 고정되어있지 않고 회전 스위치를 이용하여 임의의 저항값으로 변경이 가능한 저항

실습 준비물

가변저항은 다음과 같이 GND, A0, 5V로 구성되어있다

가변저항 설명

준비가 끝났다면 다음과 같이 회로를 구성한다 5V GND를 가변저항과, LED에 가변저항 A0은 아두이노 A0부분에, LED의 + 부분은 9번핀에 연결한다

회로구성

회로를 구성하였다면 다음과 같이 코드를 작성한다. 이때 sensorValue를 보면 sensorPin/4를 하는데 4로 나눠주는 이유는 0~1024 까지나 오는 결과 값을 analogRead에 맞게 0~255로 바꾸기 위해 4로 나눠주는 것이다

int sensorPin = A0;
int led = 9;
void setup()
{
	pinMode(led, OUTPUT);
	Serial.begin(9600);
}
	void loop()
{
	int sensorValue = 0;
	sensorValue = analogRead(sensorPin)/4;
	analogWrite(led, sensorValue);
	Serial.println(sensorValue);
	delay(10);
}
반응형
반응형

1. PWM이란?

Pulse Width Modulation으로서 펄스폭을 조절해서 전류를 조정하는것 ex) 무드등 제어, 부저 음계 제어 등

아두이노 우노 보드에서는 다음 그림과 같이 3, 5, 6, 9, 10, 11번 핀이 PWM 출력 기능을 제공함

아두이노 PWM 핀 번호

만약 사용자가 전류를 흘리고 싶다면 analogWrite() 함수에 숫자를 넣으면 사용할 수 있고 이는 0~255 범위를 가진다. 다음 그림처럼 사용자가 0, 64, 127, 191, 255를 입력했을때 다음과 같은 펄스폭을 가지게 된다

펄스폭 예


2. PWM을 이용한 LED밝기 조절 예제

PWM이 무엇인지 알았다면 LED를 이용하여 실제 예제를 학습해보자. 다음 그림과 같이 브레드보드 1개, 아두이노 우노, LED 1개, 1K저항 1개를 사용하였다.

실험 준비

준비한 준비물의 회로를 다음과 같이 구성한다. LED와 1K저항을 연결하고 빨간선은 +를 의미 검은선은 GRN을 의미한다

회로구성

다음과 같이 회로를 구성하였다면 다음과 같이 코드를 작성한다. 다음 코드는 analogWrite를 사용해서 9번핀에 brightness만큼 전류를 흘려주고 돌때마다 brightness가 5씩 증가하고 최대인 255에 도달하였다면 - 해주는 방식으로 진행되는 코드이다

int led = 9; //9번핀을 사용한다
int brightness = 0; // 처음 LED밝기
int fadeAmount = 5; // 5씩 밝아지게 함
void setup()
{
	pinMode(led, OUTPUT);
}
void loop()
{
	analogWrite(led, brightness);
	brightness = brightness + fadeAmount;
	if (brightness == 0 || brightness == 255) {
		fadeAmount = ‐fadeAmount ;
	}
	delay(30);
}

 

반응형

+ Recent posts