AIoT

AIoT 정규 58일차

맥기짱짱 2024. 4. 2. 16:43

아두이노(Arduino)

아두이노는 마이크로컨트롤러를 사용하여 만들어진 개발 보드입니다. 이 보드를 활용하면 단순한 로봇, 온도계, 습도계, 조명 제어, 모터 제어, 스마트 홈 등 다양한 제어 장치를 쉽고 간단하게 개발할 수 있는 환경을 제공합니다. 아두이노는 회로가 오픈소스로 공개되어 있어 누구나 보드를 만들 수 있습니다.

이제 아두이노의 기초를 자세히 알아보겠습니다:

  1. 아두이노 보드: 아두이노 프로젝트를 시작하기 위해서는 아두이노 보드가 필요합니다. 가장 기본적인 보드는 아두이노 우노(Uno)입니다. 이 보드에는 중요한 부품인 ATmega328p 마이크로컨트롤러가 내장되어 있습니다. 이 마이크로컨트롤러는 작고 네모난 아이로, 컴퓨터의 CPU와 비슷한 역할을 합니다. 마이크로컨트롤러는 컴퓨터의 CPU보다 한정된 기능을 수행하며, 하나의 IC로 집적된 반도체 소자입니다.
  2. 데이터 핀: 아두이노 보드에는 여러 개의 데이터 핀이 있습니다. 이 핀들은 마이크로컨트롤러의 다리에 연결되어 있으며, 외부 장치를 연결하여 동작시킬 수 있습니다. 예를 들어 LED, 스피커, 센서 등을 이 핀에 연결하여 프로젝트를 구현할 수 있습니다.
  3. 리셋 스위치: 아두이노 보드에는 리셋 스위치가 있습니다. 이 스위치를 누르면 보드를 리셋하여 처음부터 동작하게 할 수 있습니다.
  4. USB 커넥터: 아두이노 보드를 컴퓨터에 연결하기 위해 USB 커넥터를 사용합니다. 이 커넥터를 통해 아두이노가 동작하게 됩니다. 주의할 점은 일반적인 USB 커넥터와는 다른 종류의 커넥터를 사용한다는 점입니다. 만약 없다면 프린터의 USB 선을 잠시 빌려도 괜찮습니다.

- 아두이노 프로젝트 시작하기

  1. 아두이노 보드 선택:
    • 가장 기본적인 보드로는 아두이노 우노(Uno)를 추천합니다. 이 보드는 초보자에게 적합하며, 다양한 프로젝트를 구현할 수 있습니다.
  2. 아두이노 IDE 설치:
    • 아두이노 IDE (통합 개발 환경)를 다운로드하고 설치하세요. 이 IDE를 사용하여 아두이노 코드를 작성하고 업로드할 수 있습니다. 다운로드 링크
  3. USB 케이블 연결:
    • 아두이노 보드를 컴퓨터에 연결하세요. USB 케이블을 사용하여 아두이노와 컴퓨터를 연결합니다.
  4. 간단한 예제 실행:
    • 아두이노 IDE를 실행하고, 예제 코드 중 하나를 열어보세요. 예를 들어 “Blink” 예제는 LED를 깜빡이게 하는 간단한 프로그램입니다.
    • 보드와 포트를 설정한 후, 코드를 업로드하세요. LED가 깜빡이는 것을 확인할 수 있을 것입니다.
  5. 센서와 모듈 연결:
    • 다양한 센서와 모듈을 아두이노 보드에 연결하여 실험해보세요. 예를 들어 온도 센서, 조도 센서, 초음파 센서 등을 활용할 수 있습니다.
  6. 자신만의 프로젝트 시작:
    • 아두이노를 활용하여 자신만의 프로젝트를 시작해보세요. 불이 깜빡이는 LED 조명, 온도 및 습도 측정 장치, 로봇 등 다양한 프로젝트를 만들 수 있습니다.
  7. 자료와 커뮤니티 활용:
    • 아두이노 프로젝트에 관한 자료와 튜토리얼을 찾아보세요. 아두이노 커뮤니티는 도움이 될 수 있는 곳입니다. 아두이노 공식 포럼(https://forum.arduino.cc/)

 

 

Arduino Forum

Topics about Arduino boards, shields and kits

forum.arduino.cc

 

- 간단한 프로젝트 

  1. LED 깜빡이기 (Blink):
    • 가장 기본적인 예제로, LED를 깜빡이게 하는 프로그램을 작성해보세요. 이것은 아두이노의 기능을 확인하는 좋은 시작점입니다.
  2. 온도 및 습도 측정:
    • DHT11 또는 DHT22 센서를 사용하여 주변 환경의 온도와 습도를 측정하는 프로젝트를 만들어보세요.
  3. 거리 측정:
    • 초음파 센서를 활용하여 물체와의 거리를 측정하는 프로젝트를 시도해보세요. 이것은 로봇, 자동 문 개폐 시스템 등에 유용합니다.
  4. 무선 통신:
    • 블루투스 모듈을 사용하여 스마트폰과 아두이노 간에 데이터를 주고받는 프로젝트를 만들어보세요. 예를 들어 스마트폰 앱을 통해 LED를 제어하는 것이 가능합니다.
  5. 자동 Beware of Dog 표시:
    • 초음파 센서를 사용하여 사람이 다가올 때 LED로 “Beware of Dog” 표시를 하는 프로젝트를 시도해보세요.
  6. 스마트 화분:
    • 토양 습도 센서를 사용하여 식물의 습도를 측정하고, 스마트폰 앱을 통해 알림을 받는 화분을 만들어보세요.
  7. 아두이노와 웹 연동:
    • 아두이노를 웹 서버로 사용하여 웹 페이지에서 LED를 제어하는 프로젝트를 시도해보세요.

 

* Blink 예시

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(1000);                      // wait for a second
}

 

- 버튼으로 불 끄고 키기! (https://projecthub.arduino.cc/SBR/working-with-an-led-and-a-push-button-d34b17)

 

Working with an LED and a Push Button

This project demonstrates the use of a push button to operate an LED.

projecthub.arduino.cc

* 버튼을 눌렀을 때 LED가 켜짐

const int BUTTON = 2;
const int LED = 3;
int BUTTONstate = 0;

void  setup()
{
  pinMode(BUTTON, INPUT);
  pinMode(LED, OUTPUT);
}

void  loop()
{
  BUTTONstate = digitalRead(BUTTON);
  if (BUTTONstate == HIGH)
  {
    digitalWrite(LED, HIGH);
  } 
  else{
    digitalWrite(LED,  LOW);
  }
}

 

 

* 버튼을 누르면 LED가 꺼짐 (반대)

const int BUTTON = 2;
const int LED = 3;
int BUTTONstate = 0;

void  setup()
{
  pinMode(BUTTON, INPUT);
  pinMode(LED, OUTPUT);
}

void  loop()
{
  BUTTONstate = digitalRead(BUTTON);
  if (BUTTONstate == HIGH)
  {
    digitalWrite(LED, LOW);
  } 
  else{
    digitalWrite(LED, HIGH);
  }
}

 

- 선풍기 (출처: https://make.e4ds.com/make/learn_project_view.asp?idx=88)

 

e4ds make

 

make.e4ds.com

출처:  https://make.e4ds.com/make/learn_project_view.asp?idx=88
int motorPin = 9;
int prevEnd = 127;

void setup(void)
{
   pinMode(motorPin, OUTPUT);
   randomSeed(analogRead(0));
   Serial.begin(9600);
}

void loop(void)
{ 
   //motorOnThenOff();
   //motorOnThenOffWithSpeed();
   //motorAcceleration();
   prevEnd = naturalWind(prevEnd);
}

void motorOnThenOff()
{
   digitalWrite(motorPin, HIGH);
   delay(3000);
   digitalWrite(motorPin, LOW);
   delay(3000);
}

void motorOnThenOffWithSpeed()
{
   analogWrite(motorPin, 200);
   delay(3000);
   analogWrite(motorPin, 50);
   delay(3000);
}

void motorAcceleration()
{
   for(int i = 0; i <= 255; i++)
   {
      analogWrite(motorPin, i);
      delay(25);
   }
   for(int i = 255; i >= 0; i--)
   {
      analogWrite(motorPin, i);
      delay(25);
   }
   delay(5000);
}

int naturalWind(int prevEnd)
{
   int newSpeed = random(0,256);

   Serial.print("Start: ");
   Serial.println(prevEnd);
   Serial.print("End: ");
   Serial.println(newSpeed);

   if( newSpeed > prevEnd )
   {
      for(int i = prevEnd; i <= newSpeed; i++)
      {
         analogWrite(motorPin, i);
         delay(25);
      }
   }else{
      for(int i = prevEnd; i >= newSpeed; i--)
      {
         analogWrite(motorPin, i);
         delay(25);
      }
   }
   return newSpeed;
}
  1. setup() 함수:
    • motorPin을 출력으로 설정합니다.
    • randomSeed(analogRead(0));는 무작위 숫자를 생성하기 위해 아날로그 핀 값을 사용합니다.
    • 시리얼 통신을 초기화합니다.
  2. loop() 함수:
    • naturalWind(prevEnd); 함수를 호출합니다.
  3. motorOnThenOff() 함수:
    • 모터를 켜고 3초 동안 유지한 다음 끕니다.
  4. motorOnThenOffWithSpeed() 함수:
    • 모터를 200의 속도로 켜고 3초 동안 유지한 다음 50의 속도로 끕니다.
  5. motorAcceleration() 함수:
    • 모터 속도를 0에서 255까지 빠르게 증가시키고 다시 감소시킵니다.
  6. naturalWind(int prevEnd) 함수:
    • 이전 속도(prevEnd)와 새로운 속도(newSpeed)를 비교하여 모터 속도를 부드럽게 조절합니다.
    • 새로운 속도가 이전 속도보다 크면 증가시키고, 작으면 감소시킵니다.
    • 새로운 속도를 반환합니다.

 

 

- 초음파 센서로 거리계산 (출처: https://projecthub.arduino.cc/Isaac100/getting-started-with-the-hc-sr04-ultrasonic-sensor-7cabe1 )

 

Getting Started with the HC-SR04 Ultrasonic sensor

A basic introduction to the low cost and accurate HC-SR04!

projecthub.arduino.cc

 

const int trigPin = 9;

const int echoPin = 10;

float duration, distance;

void setup() {  
	pinMode(trigPin, OUTPUT);  
	pinMode(echoPin, INPUT);  
	Serial.begin(9600);  
}  

void loop() {  
	digitalWrite(trigPin, LOW);  
	delayMicroseconds(2);  
	digitalWrite(trigPin, HIGH);  
	delayMicroseconds(10);  
	digitalWrite(trigPin, LOW); 

  duration = pulseIn(echoPin, HIGH);

  distance = (duration*.0343)/2;  

	Serial.print("Distance: ");  
	Serial.println(distance);  
	delay(100);  
}

 

 
 

ACTIVE BUZZER WITH ARDUINO UNO R3

ACTIVE BUZZER WITH ARDUINO UNO R3: You can use a buzzer whenever you want to make some noise.

www.instructables.com

 

 

출처:&nbsp; https://www.instructables.com/ACTIVE-BUZZER-WITH-ARDUINO-UNO-R3/

 

int buzzer = 12;//the pin of the active buzzer

void setup()

{

pinMode(buzzer,OUTPUT);//initialize the buzzer pin as an output

}

void loop()

{

unsigned char i;

while(1)

{

//output an frequency

for(i=0;i<80;i++)

{

digitalWrite(buzzer,HIGH);

delay(1);//wait for 1ms

digitalWrite(buzzer,LOW);

delay(1);//wait for 1ms

}

//output another frequency

for(i=0;i<100;i++)

{

digitalWrite(buzzer,HIGH);

delay(2);//wait for 2ms

digitalWrite(buzzer,LOW);

delay(2);//wait for 2ms

}

}

}
 
 
 
 - 초음파 센서로 거리를 계산해서 가까우면 (거리가 5 이하로 떨어지면) Buzzer 울리기 (출처: https://www.instructables.com/Arduino-Ultrasonic-Sensor-HC-SR04-With-Buzzer/)
 

Arduino - Ultrasonic Sensor HC-SR04 With Buzzer

Arduino - Ultrasonic Sensor HC-SR04 With Buzzer: Description: In this Arduino Tutorial we will learn how the HC-SR04 Ultrasonic Sensor works and how to use it with Buzzer and LED.

www.instructables.com

 
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
const int buzzer = 11;
const int ledPin = 13;

// defines variables
long duration;
int distance;
int safetyDistance;


void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
pinMode(buzzer, OUTPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // Starts the serial communication
}


void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);

// Calculating the distance
distance= duration*0.034/2;

safetyDistance = distance;
if (safetyDistance <= 5){
  digitalWrite(buzzer, HIGH);
  digitalWrite(ledPin, HIGH);
}
else{
  digitalWrite(buzzer, LOW);
  digitalWrite(ledPin, LOW);
}

// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
}
 
 
 
 
 - 빛 감지 가로등 만들기 (출처 https://wikidocs.net/30790)
 

06-2 조도센서(Photoresistor) 사용하기

## **조도센서 소개** 조도센서(Photoresistor)는 빛의 세기에 따라 저항 값이 변하는 전자부품입니다. 빛이 많이 들어오면 저항이 작아지고 적게 들어오면 저항이 커…

wikidocs.net

 
void setup()
{
  pinMode(13, OUTPUT); // 디지털 13번핀을 출력모드로 설정
  Serial.begin(9500);
}

void loop()
{
  int readValue = analogRead(A0);
  Serial.println(readValue);

  if(readValue > 1000) // 실행 환경에 따라 조정
    digitalWrite(13, HIGH); // 빛이 어두우면 LED를 킨다.
  else
    digitalWrite(13, LOW); // 빛이 밝으면 LED를 끈다.
}​
냥냥 펀치
 
 

* 기기가 없다면 시뮬레이터를 이용할 수 도 있다.(해당 교재: https://wikidocs.net/book/2655 )

 

아두이노 시뮬레이터

이 책은 아두이노를 처음 접해보는 독자들과 프로그래밍을 한 번도 해 본적이 없는 사람들을 대상으로 합니다. 아두이노를 알아가는데 필요한 전문적인 용어들을 알기 쉽게 풀어서 쓰려고…

wikidocs.net

 

'AIoT' 카테고리의 다른 글

AIoT 정규 60일차 - Git  (0) 2024.04.04
AIoT 정규 59일차  (1) 2024.04.03
AIoT 정규 57일차  (0) 2024.04.02
AIoT 정규 56일차  (0) 2024.03.29
AIoT 정규 55일차  (0) 2024.03.28