아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

티스토리 뷰

   

초음파센서와 버튼스위치로 동작하는 서보모터 실습을 해보겠습니다. 버튼스위치, 초음파센서는 구성이 단순하고 사용법이 쉬워 흔히 쓰이는 입력장치입니다. 서보모터 역시 다양한 곳에 적용되는 출력장치 중 하나입니다. 주변에 동작되는 기계들을 보면 모터로 구성된 것들이 많습니다. 돌아가는 레이더머리, 자동으로 열리는 문 등은 회전하는 모터에 바로 연결해서 사용하는 경우입니다. 컨베이어벨트나 엘레베이터처럼 모터의 회전을 직선운동으로 바꿔서 사용하기도 합니다.

    그럼 이제 자동으로 동작하는 사물함을 설계한다고 상상해 봅시다. 버튼을 누르면 문이 열리고, 사물함에 물건을 넣으면 자동으로 문이 닫힙니다. 이 동작들을 단계별 아두이노 로직으로 짜보겠습니다.

1. 버튼을 누르면 문에 연결된 서보모터가 돌아간다.(문이 열린다.)

2. 사물함 내부 초음파센서가 물건을 감지하면 잠시 후 문이 닫힌다. (물건을 넣고 손을 뺄 수있게 5초 뒤에 닫히는 걸로 하겠습니다.)

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

<그림 1> 완성된 회로

#include<Servo.h>
#define TRIG 2 // 초음파센서 TRIG 2번핀 할당
#define ECHO 3 // 초음파센서 ECHO 3번핀 할당
int button = 5;  //버튼센서 입력 5번핀 할당

Servo servo;
boolean isNear = false;

void setup(){
  pinMode(TRIG,OUTPUT); // 아두이노 송신
  pinMode(ECHO,INPUT);  // 아두이노 수신
  pinMode(button,INPUT); // 아두이노 수신
  servo.attach(9);      // 서보모터 제어 9번핀 할당
  servo.write(180);     // 서보모터 초기각도 180도 셋팅
}
void loop()
{
  digitalWrite(TRIG,LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG,HIGH);
  delayMicroseconds(5);
  digitalWrite(TRIG,LOW);

  long distance = pulseIn(ECHO,HIGH)/58; // 초음파 간격   
  
  //만약 버튼이 눌러졌다면
  if (digitalRead(button)) { 
      servo.write(0); // 서보모터 0도로 회전
  }
 
  else if(distance < 10){ // 만약 10cm보다 가까우운 곳에 물체가 있으면 
  delay(5000); // 5초 뒤에
  servo.write(180); // 서보모터 180도로 회전
  }
}

목차

저항

PWM

LED 센서 실습

애노드 캐소드 실습

택트 스위치 실습

피에조 부조 실습

조도 센서 실습

적외선 센서 실습

LCD 센서 실습

,습도 센서 및 LCD 센서 실습

초음파 센서 실습

서보 모터 실습

스텝 모터 실습

DC 모터 실습

블루투스 모듈 실습

WIFI 모듈 실습 (STA 모드)

WIFI 모듈 실습 (AP 모드)

저항

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

저항을 사용할 때 띠의 색으로 저항의 크기를 표시한다. 색을 보고 알맞은 저항을 사용하면 된다. 저항이 크면 클수록 흐르는 전류의 양은 줄어든다.

Pwm 신호

Pwm 신호란 pulse width modulation 의 줄임말로, 디지털 신호로 아날로그 신호를 만드는 기법이다.

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

신호에서 일정 시간동안 01을 반복한다. 이중 1이였던 시간을 Duty Cycle 이라한다. Duty Cycle 이 크면 클수록 더 높은 출력값을 가지게 되고, Duty Cycle 값이 작으면 더 작은 출력 값을 가지게 된다. 이러한 방식으로 디지털 출력이지만 아날로그 신호처럼 쓰일 수 있다.

LED 센서 실습

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#define LED_PIN 2

#define HIGH_TIME 1000 //msec

#define LOW_TIME 1000 //msec

void setup()

{

pinMode(LED_PIN, OUTPUT);

}

void loop()

{

digitalWrite(LED_PIN, HIGH);

delay(HIGH_TIME);

digitalWrite(LED_PIN, LOW);

delay(LOW_TIME);

}

code

 

Output picture

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo
아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

330Ω light on

330Ω light off

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo
아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

10kΩ light on

10kΩ light off

LED 센서에 불을 켜고 끄는 것을 해보았다. LED 센서는 전류가 많이 흐를수록 더 강한 빛을 방출 한다. 같은 프로그램을 아두이노에서 사용 하였지만 저항의 값에 따라서 LED 센서의 불 세기가 달라졌다. 저항이 작으면 작을수록 전류가 커짐으로 인해 더 강한 빛이 나온다. 저항의 크기가 크면 흐르는 전류의 양이 작아지므로 빛의 세기가 약해진다. 이를 이용하여 특정한 상태일 때 불이 켜짐과 꺼짐을 통해 output 으로 활용이 가능하다.

애노드 캐소드 실습

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#define LED_R_PIN 11

#define LED_G_PIN 10

#define LED_B_PIN 9

#define TIME 500 //msec

void setup()

{

pinMode(LED_R_PIN, OUTPUT);

pinMode(LED_G_PIN, OUTPUT);

pinMode(LED_B_PIN, OUTPUT);

}

void loop()

{

digitalWrite(LED_R_PIN, LOW);

digitalWrite(LED_G_PIN, HIGH);

digitalWrite(LED_B_PIN, HIGH);

delay(TIME);

digitalWrite(LED_R_PIN, HIGH);

digitalWrite(LED_G_PIN, LOW);

digitalWrite(LED_B_PIN, HIGH);

delay(TIME);

digitalWrite(LED_R_PIN, HIGH);

digitalWrite(LED_G_PIN, HIGH);

digitalWrite(LED_B_PIN, LOW);

delay(TIME);

digitalWrite(LED_R_PIN, LOW);

digitalWrite(LED_G_PIN, LOW);

digitalWrite(LED_B_PIN, LOW);

delay(TIME);

digitalWrite(LED_R_PIN, HIGH);

digitalWrite(LED_G_PIN, HIGH);

digitalWrite(LED_B_PIN, HIGH);

delay(TIME);

}

code

Output picture

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Light off

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo
아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo
아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo
아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Red

Green

Blue

White

애노드 캐소드를 사용하여 기존의 LED 센서에 비해서 다양한 색을 낼 수가 있었다. 위의 실습에서는 10kΩ을 사용하여서 실습하였지만 만약 저항 값이 더 낮은 저항을 사용했다면 더 밝은 출력을 얻을 수 있었을 것이다. 기존의 LED 센서가 on/off 2가지 output을 낼 수 있었다면, 애노드 캐소드는 white/red/green/blue/off 5가지 output이 가능하다. 하나의 센서로 다양한 output 을 낼 수 있다는 장점이 있다.

택트 스위치 실습

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#define LED_PIN 2

#define BUTTON_PIN 3

void setup()

{

pinMode(LED_PIN, OUTPUT);

pinMode(BUTTON_PIN, INPUT);

}

void loop()

{

if(digitalRead(BUTTON_PIN) == HIGH)

digitalWrite(LED_PIN, HIGH);

else

digitalWrite(LED_PIN, LOW);

}

code

Output picture

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo
아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Switch on

Switch off

스위치를 사용하여 버튼을 누를 때와 버튼을 누르지 않을 때 두가지 input 에 따라서 LED 센서의 빛을 켜고 끄는 실습을 해 보았다. 또한 이것을 응용하여 누를때와 눌렀다가 누르지 않을 때 2가지 순간의 edge 를 인식하여 input 을 줄 수도 있다. 스위치의 input 을 사용하여 mode 변경등 다양한 곳에서 사용이 가능하다.

슬라이드 스위치 실습        

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#define LED_PIN 2

#define BUTTON_PIN 3

void setup()

{

pinMode(LED_PIN, OUTPUT);

pinMode(BUTTON_PIN, INPUT);

}

void loop()

{

int button_state = digitalRead(BUTTON_PIN);

if (button_state == HIGH) {

digitalWrite(LED_PIN, HIGH);

}

else {

digitalWrite(LED_PIN, LOW);

}

}

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

<Switch off>

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

<Switch on>

code

Switch on and off

스위치 사용에 따라서 LED 신호를 줄 수 있다. 이를 통해 스위치의 값을 input 으로 다양한 곳에서 활용이 가능하다. 어떤 특정한 장치 혹은 특정한 함수를 실행하는 input 으로 사용이 가능하다.

피에조 부조 실습

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#define BUZZER_PIN 11

void setup() {

pinMode(BUZZER_PIN, OUTPUT);

}

void loop() {

//옥타브 = 4

tone(BUZZER_PIN, 262); //

delay(500);

tone(BUZZER_PIN, 277); // #

delay(500);

tone(BUZZER_PIN, 294); //

delay(500);

tone(BUZZER_PIN, 311); //#

delay(500);

tone(BUZZER_PIN, 330); //

delay(500);

tone(BUZZER_PIN, 349); //

delay(500);

tone(BUZZER_PIN, 370); // #

delay(500);

tone(BUZZER_PIN, 392); //

delay(500);

tone(BUZZER_PIN, 415); // #

delay(500);

tone(BUZZER_PIN, 440); //

delay(500);

tone(BUZZER_PIN, 466); // #

delay(500);

tone(BUZZER_PIN, 494); //

delay(500);

tone(BUZZER_PIN, 523); //(옥타브5)

delay(500);

}

code

o

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Output picture

피에조 부저를 사용하여 원하는 음을 소리내 보았다. 부저 센서를 output 으로 사용하여, 특정한 상황에서 소리로 알려줄 수 있다. 음이나 리듬을 정하여 다양한 소리를 통해 현재 어떠한 상황인지 알려 주는 용도로 사용이 가능하다고 생각했다.

조도 센서 실습

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#define CDS_PIN A0

void setup() {

Serial.begin(9600);

pinMode(CDS_PIN, INPUT);

}

void loop() {

int value = analogRead(CDS_PIN);

Serial.println(value);

delay(100);

}

code

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

 Output plot

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Experimental setup

output plot에서 보다시피 어두우면 값이 커지고 밝으면 값이 작아진다. 가장 밝은 값이 0  어두운 값이 1024정도로 되어 있다. 조도 센서를 input 으로 사용하여 다양한 곳에서 활용이 가능하다. 이를 이용하여 밤과 낮에 다르게 작동하는 스위치 등에서 사용이 가능하다.

적외선 센서 실습

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#define IR_PIN A0

void setup() {

Serial.begin(9600);

pinMode(IR_PIN, INPUT);

}

void loop() {

int value = analogRead(IR_PIN);

Serial.println(value);

delay(100);

}

code

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Floating output

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Experimental setup

적외선 센서를 사용하여 output plot 해 보았다. 멀리 물체가 있으면 값이 커지고 가까이 있으면 값이 작아졌다. 센서에 초록불이 2가지 있다. 하나는 연결 시 들어오는 불이고 나머지 하나는 가까이 물체가 있으면 불이 들어온다. 코드로 값을 수치적으로 보여주는 것도 있지만 센서 자체에서 불빛이 알려줘서 직관적인 부분이 있었다. 하지만 생각보다 측정하는 거리가 짧고 단거리에서만 측정이 가능하기 때문에 단거리에서 미세한 변화를 측정하기에 적합한 센서라고 생각했다. 적외선 센서를 input 으로 사용하여 다양한 곳에서도 활용할 수가 있다.

LCD 센서 실습

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

void setup()

{

lcd.init();

lcd.backlight();

lcd.setCursor(0, 0);

lcd.print("Capstone Design");

lcd.setCursor(0, 1);

lcd.print("2020");

}

void loop()

{

}

Code

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Output on LCD

LCD 모듈을 사용하여 원하는 문구를 LCD 화면에 출력 되도록 실습 해보았다. LCD 모듈을 이용하여 특정한 상황일 때 output LCD 모듈을 이용한다면, 직관적으로 알아보기 쉽게 사용이 가능하다.

온습도 센서 및 LCD 센서 실습

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#include <DHT.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

#define DHTPIN 4

#define DHTTYPE DHT11 // DHT 11

DHT dht(DHTPIN, DHTTYPE);

void setup() {

  Serial.begin(9600);

  dht.begin();

  lcd.init();

  lcd.backlight();

}

void loop() {

  float h = dht.readHumidity();

  float t = dht.readTemperature();

  lcd.setCursor(0, 0);

  lcd.print("Humidity: ");

  lcd.print(h);

  lcd.print("%");

  lcd.setCursor(0, 1);

  lcd.print("Temperature:");

  lcd.print(t);

  lcd.println("°C ");

  delay(1000);

}

Code

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo
 

온습도 센서를 사용하여 값을 읽어 와서 LCD 화면에다가 출력을 해 보았다. 아마도 센서가 조금 부서져 있어서 값을 잘 읽어오지를 못하여 값이 nan 이라고 뜨는것으로 추정 된다. 비록 값을 잘 받아오지는 못하였지만 input 센서로 온습도 센서를 사용하고 output 으로 LCD 센서를 사용하여 값을 출력하는 과정을 통해 여러 센서를 통한 input output 을 경험해 보았다. 이를 이용하여 온습도가 아닌 다른센서로 input 을 받고 모터, LCD 와 같은 다른 센서에서 output 을 낼 수 있다.

초음파 센서 실습

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#define TRIG_PIN 7

#define ECHO_PIN 6

void setup() {

Serial.begin(9600);

pinMode(TRIG_PIN, OUTPUT);

pinMode(ECHO_PIN, INPUT);

}

void loop() {

digitalWrite(TRIG_PIN, LOW);

delayMicroseconds(4);

digitalWrite(TRIG_PIN, HIGH);

delayMicroseconds(20);

digitalWrite(TRIG_PIN, LOW);

long duration = pulseIn(ECHO_PIN, HIGH, 5000);

float distance = duration / 58.0;

Serial.println(distance);

delay(10);

}

code

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Ploting the output

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Experimental setup

Ploting 결과처럼 가까울 때부터 먼 거리까지 실습을 해보았다. 기존에 사용했던 적외선 보다 먼거리까지 측정이 된다는 장점이 있지만 갑자기 거리가 멀어지거나 가까워질 때나 정확한 거리 측정을 잘 하지 못하고 0.0 으로 거리가 출력되는 경우가 있었다. 이러한 문제점이 있어서 정밀한 측정을 할 때는 사용을 지양하는 것이 적합할 것 같다고 생각했다. 초음파 센서를 input 으로 사용한다면 멀리 있는 물체가 가까이 올 때 와 같은 상황에서 사용 할 수 있다.

서보 모터 실습

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#include <Servo.h>

Servo servo;

#define SERVO_PIN 9

void setup() {

Serial.begin(9600);

servo.attach(SERVO_PIN);

}

void loop() {

if (Serial.available() > 0) {

String packet;

packet = Serial.readStringUntil('\n');

if (packet != 0) {

int temp;

temp = packet.toInt();

servo.write(temp);

Serial.print("SERVO : ");

Serial.println(temp);

}

}

}

code

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Input value

Output on servo motor

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo
아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo
아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

When input = 0

When input = 90

When input = 180

Servo motor 를 사용하여 실습을 해 보았습니다. Servo motor 란 단순히 하나의 모터만으로 구성되어 있는게 아니라 모터를 사용하여 적절한 구동 시스템을 연계하고 위치, 속도를 명령으로 제어 및 추종시킨 경우를 서보 모터라고 한다.

이번 실습에서는 각도를 input 으로 하여 실제 output 에서 원하는 각도로 이동하는 것을 확인해 보았습니다.

서보 모터를 사용하여 원하는 각도로 회전할 수 있어서 정교한 control 을 할 때 유용하게 사용이 가능하다. 전원을 공급하면 한쪽 방향으로 지속적으로 회전하는게 아니라 일정각도 까지만 회전하는 특징을 다양한 곳에 적용할 수 있다.

스텝 모터 실습

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#include <Stepper.h>

#define IN1 11

#define IN2 10

#define IN3 9

#define IN4 8

const int steps = 2048;

Stepper myStepper(steps,IN4,IN2,IN3,IN1);

void setup() {

Serial.begin(9600);

myStepper.setSpeed(10);

}

void loop() {

if (Serial.available() > 0) {

String packet;

packet = Serial.readStringUntil('\n');

if (packet != 0) {

int temp;

temp = packet.toInt();

temp = (2048.0 / 360.0) * temp;

Serial.print("steeper : ");

Serial.println(temp);

myStepper.step(temp);

}

}

}

code

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo
아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Output picture

스텝 모터는 펄스 모양의 전압에 의해 일정 각도 회전하는 전동기이다. 회전 각도는 입력 펄스의 신호의 주파수에 비례한다. 일반적으로 쓰는 DC 모터와 달리, 전자석을 사용하여 극을 바꾸면서 자력의 인력과 척력을 이용하여 모터를 회전한다. 이러한 원리를 이용하여 스텝 모터를 돌려 보았다.

DC 모터와 비슷한점이 많았지만 마찰이 적다는 점이 가장큰 장점인 것 같다. 따라서 DC 모터에 비해서 지속적인 회전이 필요한 곳에서 사용하기에 적합하다는 생각을 하였다.

DC 모터 실습

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#define ENABLE_PIN 9

#define INPUT1_PIN 10

#define INPUT2_PIN 11

void setup() {

pinMode(ENABLE_PIN, OUTPUT);

pinMode(INPUT1_PIN, OUTPUT);

pinMode(INPUT2_PIN, OUTPUT);

Serial.begin(9600);

}

void loop() {

if (Serial.available() > 0) {

String packet;

packet = Serial.readStringUntil('\n');

if (packet != 0) {

int temp;

temp = packet.toInt();

Serial.print("state : ");

Serial.println(temp);

if(temp == 1){

analogWrite(ENABLE_PIN, 200);

digitalWrite(INPUT1_PIN, HIGH);

digitalWrite(INPUT2_PIN, LOW);

}

else if(temp == -1){

analogWrite(ENABLE_PIN, 200);

digitalWrite(INPUT1_PIN, LOW);

digitalWrite(INPUT2_PIN, HIGH);

}

else{

analogWrite(ENABLE_PIN, 0);

digitalWrite(INPUT1_PIN, LOW);

digitalWrite(INPUT2_PIN, LOW);

}

}

}

}

Code

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Experimental setup

DC 모터란, 조정자로 영구자석을 사용하고, 회전자로 코일을 사용하여 구성한 것이다. 전기자에 흐르는 전류의 방향을 전환함으로 써 자력의 반발, 흡인력으로 회전력을 생성시키는 모터인다. 일반적으로 많이 쓰이는 모터이고 제어가 쉽다는 장점이 있다. 하지만 brush와 정류자에 의한 접점으로 인해 마찰이 있으며 이로 인한 노이즈와 수명 단축이 있다.

DC 모터를 아두이노로 제어함을 통해서 서보 모터와는 달리 필요할 때 원하는 각도 까지 회전하는게 아니라 지속적으로 회전을 가능하게 하는 곳에서 사용하기에 적합하다는 생각을 하였다. 또한 토크 양을 조절할 수 있기 때문에 돌리는 힘도 조절이 가능하다. 하지만 과도한 회전을 하기에는 마찰로 인해 제한이 있다.

블루투스 센서 실습

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(3, 2);

void setup() {

Serial.begin(9600);

BTSerial.begin(9600);

}

void loop() {

if (BTSerial.available()) {

Serial.write(BTSerial.read());

}

if (Serial.available()){

BTSerial.write(Serial.read());

}

}

Code

Experimental setup

 

Connecting result

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Input at Arduino IDE

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Output at android

블루투스 모듈을 사용하여 핸드폰과 메시지를 주고 받았다. UTF-8 엔코딩 값으로 값을 주고 받으니 영어도 표시가 되었다. 블루투스 모듈의 실습은 핸드폰과 메시지를 주고 받는 것이 전부이며, 해당 어플을 설치를 해야한다는 것이 생각했던 것 보다는 제한적이였다. 블루투스 모듈을 사용하여 다른 기기들과의 통신을 통해 원격으로 프로그램을 실행하는 방법이 있었다면 이용해 보고 싶다.

Wifi 모듈 실습(STA 모드)

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

#include <SoftwareSerial.h>

#define WIFI_RX 2

#define WIFI_TX 3

SoftwareSerial WIFI (WIFI_RX, WIFI_TX);

void setup() {

Serial.begin(9600);

WIFI.begin(9600);

}

void loop() {

if (WIFI.available()) {

Serial.write(WIFI.read());

}

if (Serial.available()) {

WIFI.write(Serial.read());

}

}

code

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Experimental setup

Output at STA mode

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

와이파이 연결 목록 확인

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Wifi connection

Wifi 모듈을 사용하여 주변 wifi 를 검색하고 원하는 와이파이에 접속을 하였다. 이를 이용하여 wifi 를 사용할 수 있게 되었다.

Wifi 모듈 실습(AP 모드)

#include "WiFiEsp.h"

#include "SoftwareSerial.h"

SoftwareSerial WIFI(2,3); // RX, TX

char ssid[] = "MAKIST";

char pass[] = "12345678";

int status = WL_IDLE_STATUS;

int reqCount = 0;

WiFiEspServer server(80);

RingBuffer buf(8);

void setup()

{

Serial.begin(9600);

WIFI.begin(9600);

WiFi.init(&WIFI);

if (WiFi.status() == WL_NO_SHIELD) {

Serial.println("WiFi shield not present");

while (true);

}

if (WiFi.status() == WL_NO_SHIELD) {

Serial.println("WiFi shield not present");

while (true);

}

Serial.print("Attempting to start AP ");

Serial.println(ssid);

status = WiFi.beginAP(ssid, 10, pass, ENC_TYPE_WPA2_PSK);

Serial.println("Access point started");

printWifiStatus();

// start the web server on port 80

server.begin();

Serial.println("Server started");

}

void loop()

{

WiFiEspClient client = server.available();

if (client) {

Serial.println("New client");

buf.init();

while (client.connected()) {

if (client.available()) {

char c = client.read();

buf.push(c);

if (buf.endsWith("\r\n\r\n")) {

WiFiResponse(client);

break;

}

}

}

delay(10);

client.stop();

Serial.println("Client disconnected");

}

}

void WiFiResponse(WiFiEspClient client)

{

client.print(

"HTTP/1.1 200 OK\r\n"

"Content-Type: text/html\r\n"

"Connection: close\r\n"

"\r\n");

client.print("<!DOCTYPE HTML>\r\n");

client.print("<html>\r\n");

client.print("<h2>Hello World!</h2>\r\n");

client.print("</html>\r\n");

}

void printWifiStatus()

{

// print your WiFi shield's IP address

IPAddress ip = WiFi.localIP();

Serial.print("IP Address: ");

Serial.println(ip);

}

code

Output on AP mode

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Wifi AP 만들고 접속하기(AP mode) (Arduino IDE)

아두이노 초음파센서 스텝모터 - adu-ino cho-eumpasenseo seutebmoteo

Wifi AP 만들고 접속하기(AP mode) (computer)

Wifi 모듈을 사용하여 wifi 를 생성해 보았다. 이것을 컴퓨터에서 접속하여 와이파이에 접속이 되되는 것 확인하였다. 공유기 같은 wifi 가 아니라서 인터넷 접속은 안되었지만 이를 이용하여 wifi 통신이 가능하다고 생각했다.

Wifi 모듈은 STA 모드와 AP 모드 두가지를 사용하여 필요에따라 주변의 wifi 를 수신할 수 있고, wifi 를 생성하여 통신을 할 수 있게 한다는 장점이 있다.

비록 wifi 모듈을 사용하여 주변의 장치를 원격으로 조종하는 그러한 방식으로 실습 하지는 못했지만 그러한 기능들을 사용할 수 있다면 드론 같은 원격으로 이동하는 장치에서 와이파이를 사용하여 원격으로 프로그램 실행 명령 및 데이터 송,수신 등을 할 수 있다고 생각 하였다.

CopyRight MAKIST