2017년 3월 31일 금요일

23. 모형 출입문 개폐기


Step 0.개요.

 실생활에서 RFID는 많이 사용됩니다. 교통카드, 신용카드, 사무실,아파트 건물 출입카드등에 사용됩니다. 아두이노를 이용하여 RFID를 활용해보겠습니다. 권한이 부여된 카드를 RFID에 접근하면 초록색LED가 불이켜면서 부저가 울립니다. 그러면 서보모터가 180도 움직입니
다. 5초후에 다시 원위치로 갑니다. 만약 권한이 없는 카드를 RFID에 접근시키면 빨간 LED가 켜지면서 부저만 움직입니다. 여기서 카드는 일종에 우리가 사용하는 카드,서보모터는 현관출입문,부저는 적당한 안내멘트소리라고 생각할 수 있습니다.


Step1.

준비물은 Bread Board 2개, Aduino UNO, Servo Motor, RFID-RC522, GREEN LED, RED LED, BUZZER, Jumper Line 입니다.
서보모터

부저


점페케이블


캡션 추가






RFID-RC522
아두이노(UNO)



























Step 2. 

연결은 다음 회로도와 같이 연결합니다.

 먼저 서보 모터를 점퍼선을 이용하여 연결합니다. 서보모터(오른쪽 위 검은색)의 노란색, 빨간색, 갈색선은 아두이노의 Pin 3,  5V, GND 차례로 연결합니다.

  다음 RFID-RC522기판(위 회로도 오른 쪽 빨간색기판)의 가장 자리에 있는 각각의 핀은  아두이노에 아래 표와 같이 연결합니다.

















연두색 LED는 +극, 빨간색 LED +극은 아두이노의 digital 5 Pin, digital 4 Pin에 각각 연결하고 -극들은 빵판의 -표시된 곳에 연결합니다.(끝에서 바로 안쪽)

끝으로 부저는 +극은 아두이노 digital Pin 2에 -극은 빵판(Bread Board)의 -극에 연결합니다.

Step3.

source code는 다음과 같습니다.


#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>

#define SS_PIN 10
#define RST_PIN 9
#define LED_G 5   //define green LED pin
#define LED_R 4   //define red LED pin
#define BUZZER 2  // define buzzer pin
MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance.
Servo myServo;
void setup() {
  Serial.begin(9600); // Initialize serial communications with the PC
  SPI.begin();     // Init SPI bus
  mfrc522.PCD_Init();  // Init MFRC522 card
  myServo.attach(3);   //servo
  myServo.write(0);
  pinMode(LED_G,OUTPUT);
  pinMode(LED_R, OUTPUT);
  pinMode(BUZZER,OUTPUT);
  noTone(BUZZER);
  Serial.println("Put your card to the reader...");
  Serial.println();
}

void loop() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
         // digitalWrite(ledPin,LOW);  
    return;
  }

  // Select one of the cards
  if (!mfrc522.PICC_ReadCardSerial())
  {
      return;
  }

  // Dump debug info about the card. PICC_HaltA() is automatically called.
 // mfrc522.PICC_DumpToSerial(&(mfrc522.uid));


// Show UID on serial moniter
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte  i = 0; i < mfrc522.uid.size; i++)
{
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i],HEX);
    content.concat(String(mfrc522.uid.uidByte[i]  < 0x10 ? " 0" : " "));
    content.concat(String(mfrc522.uid.uidByte[i],HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if (content.substring(1) =="16 82 6A 85") //change here the UID of the car/cars that you want to give access
{
    Serial.println("Authorized access");
    Serial.println();
    delay(500);
    digitalWrite(LED_G, HIGH);
    tone(BUZZER, 500);
    delay(3000);
    noTone(BUZZER);
    myServo.write(180);
    delay(5000);
    myServo.write(0);
    digitalWrite(LED_G, LOW);
 }

else   {
    Serial.println(" Access denied");
    digitalWrite(LED_R,HIGH);
    tone(BUZZER, 300);
    delay(1000);
    digitalWrite(LED_R,LOW);
    noTone(BUZZER);
    delay(3000);
  }
}

참고로 위 코드에서 빨간색(16 82 6A 85)코드는 카드마다 고유코드가 다릅니다. 이 코드는 다음 코드를 입력하여 알아낼 수 있습니다.
#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance.

void setup() {
  Serial.begin(9600); // Initialize serial communications with the PC
  SPI.begin();      // Init SPI bus
  mfrc522.PCD_Init(); // Init MFRC522 card
   Serial.println("Scan PICC to see UID and type...");
}

void loop() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
     
    return;
  }

  // Select one of the cards
  if (!mfrc522.PICC_ReadCardSerial())
  {
     return;
  }
  // Dump debug info about the card. PICC_HaltA() is automatically called.
  mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}
위소스를 upload하여  켜고 카드를 RFID에 갖다대면 위 화면처럼 Serial Moniter에 보여집니다. 위에서 2째줄에 보면 Card UID: 16 82 6A 85라는 것을 알 수 있습니다. 이 UID를 처음 코드에 삽입하면 됩니다.











라벨:

2017년 3월 22일 수요일

22. 서보모터를 이용한 간단한 장난감

개요: 서보모터를 이용하여 간단한 로봇팔 장난감을 만들어 보겠습니다.

자세한 내용 보기 »

라벨:

2017년 3월 20일 월요일

21. 서보모터를 이용한 간단한 로봇팔 실험

개요: 서보모터를 이용하여 기초적인 로봇팔을 만들어 활용해보겠습니다.

자세한 내용 보기 »

라벨:

2017년 3월 18일 토요일

20. 수시로 색깔이 변하는 LED

Step 0.개요:

 3색 LED등을 초음파센서로 제어해보겠습니다.  초음파 센서가 감지하여  LED등이 10가지 색으로 거리에 따라 10가지 임의의 색으로 빛을 냅니다.



Step 1. 

부품은 다음과 같이 준비합니다.
3색 LED, 초음파 센서, 아두이노



초음파센서(HC-SR04)
3색 LED(HJX)



Step2.
 회로도는 다음과 같습니다.















Step 3.

핀 연결은 다음과 같습니다.















Step 4.

코드는 다음과 같습니다.참고로 코딩작업은 온라인 프로그램 codebenser로 작업을 하였습니다. 아두이노로 코딩하면 해당 라이브러리를 정확하게 삽입하고 코딩해야됩니다.

#define TRIG 2
#define ECHO 3
#define COLOR_COUNT 10
#define GAP 10
#define RED 11
#define GREEN 10
#define BLUE 9

int color[COLOR_COUNT][3]=
{
{255,0,0}, //red
{255,255,0},//yellow
{128,255,0}, //Light green(연두))
{0,255,0},  // green
{0,255,128}, // 연두?
{0,255,255}, //Aqua
{0,128,255}, // blue?
{0,0,255},  // blue?
{127,0,255}, // purple(보라))
{255,0,255}  //Magenta
};
void setup()
{
pinMode(TRIG,OUTPUT); //Pin 2 is OUTPUT
pinMode(ECHO,INPUT);  // Pin 3 is INPUT
}

void loop()
{

digitalWrite(TRIG,LOW) ;
delayMicroseconds(2);
digitalWrite(TRIG,HIGH);
delayMicroseconds(5);
digitalWrite(TRIG,LOW);

long distance =  pulseIn(ECHO,HIGH,5800)/58;
if(0<distance && distance<=COLOR_COUNT*GAP){
for(int i=0;i<COLOR_COUNT;i++)
   if(i*GAP<distance && distance<=(i+1)*GAP){
    analogWrite(RED,color[i][0]);
    analogWrite(GREEN,color[i][1]);
    analogWrite(BLUE,color[i][2]);
    break;
   }
}
else{
analogWrite(RED,0);
analogWrite(GREEN,0);
analogWrite(BLUE,0);
}
}

Step 5.

시현 동영상은 다음과 같습니다.















라벨:

2017년 3월 13일 월요일

19. 라즈베리파이 사운드 설정

Step 0.개요.


라즈베리파이에서 옆면을 보면 스피커단자가 있습니다. 실제로 스피커를 설치하지 않아도 기본적으로 HDMI케이블을 통하여 모니터에 있는 스피커로 영상과 사운드가 동시에 실행됩니다. 그런데 라즈베리파이 옆면에 있는 특정 스피커 단자에 스피커를 설치하면 실행되지 않습니다. 인터넷을 검색해보니 다음과 같은 절차를 거쳐야 정상적으로 스피커에 소리를 낼 수 있습니다.


Step 1.

먼저 다음을 실행해 봅니다.

$ lsmod |grep snd_bcm2835

그러면 아래처럼 snd_bcm2835 파일이 보입니다.


Step 2.

만약 없다면  etc디렉토리로 이동합니다.
$ cd /etic

다음을 입력하여 추가합니다.

$ sudo nano modules

편집모드가 나오면 기존에 있는 것을 삭제하고 맨아래줄에 다음과 같이 입력합니다.

snd-bcm2835


기본적으로 출력은 기본 오디오 인터페이스 (HDMI가 사용 가능한 경우 HDMI)를 자동으로 선택하도록 설정됩니다. 다음을 사용하여 특정 인터페이스를 사용하도록 할 수 있습니다.

amixer cset numid=3 n

여기서 n은 다음과 같은 인터페이스가 요구됩니다. 0=auto, 1=alalog, 2=hdmi
따라서 다음과 같이 설정합니다.

amixer cset numid=3 1

Step 3. 


Wav 파일을 테스트해 봅니다.
아래 사이트에서 파일을 다운받아놓습니다.
wget http://www.freespecialeffects.co.uk/soundfx/sirens/police_s.wav


다운 받은 파일을 실행하기 위해 다음과 같이 입력합니다.
aplay police_s.wav
정상적이라면 소리가 날 것입니다.

<참고사이트> http://www.raspberrypi-spy.co.uk/2013/06/raspberry-pi-command-line-audio/

라벨:

2017년 3월 8일 수요일

18.아두이노를 이용한 서보모터 속도 제어하기

Step 1. 

개요: 서보모터는 일정한 각도로 반복하는 모터인데 가변저항기를 설치하면  임의로 조작하여 움직이게 할 수 있습니다. 이 것을 발전시키면 로봇팔 제작의 기초가 됩니다.

자세한 내용 보기 »

라벨:

2017년 3월 2일 목요일

17. 라즈베리파이에서 서보모터 제어하기

개요:

라즈베리파이와 서보모터를 연결하여 모터가 작동되게 한다.
자세한 내용 보기 »

라벨: