serin99
serin 개발 일기
serin99
전체 방문자
오늘
어제
  • 분류 전체보기 (76)
    • FE (25)
      • JavaScript (14)
      • React (6)
      • Web (5)
    • IT (22)
      • [FE] 위클리 페이퍼 (19)
      • CS (2)
    • Project (4)
    • Python (8)
    • DB (2)
    • IoT (14)
      • 라즈베리파이 (9)
      • 아두이노 (4)

태그

  • 프로그래밍
  • 부트캠프
  • 자바스크립트
  • Python
  • 라즈베리파이

인기 글

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
serin99

serin 개발 일기

IoT/라즈베리파이

라즈베리파이 LED, 초음파 센서 예제

2023. 2. 27. 18:46
728x90

 

라즈베리파이에 gpio pin을 이용하여 LED와 같이 간단한 조작을 테스트한다.

 

1. 라즈베리파이의 업데이트 및 업그레이드를 한다

-> $ sudo apt-get update

-> $ sudo apt-get upgrade

 

2. 오픈소스 https://github.com/WiringPi/WiringPi의 소스를 체크아웃하기 위해서

   소스관리툴 git를 다운로드한다.

-> $ sudo apt-get install git-core

 

3. wiringPI 프로젝트를 통째로 받아온다

git을 통해서 소스를 다운받습니다.

-> $ git clone https://github.com/WiringPi/WiringPi.git

 

4. 빌드 및 설치를 진행한다

-> $ cd wiringPi

-> $./build

 

5. 설치가 잘 되었는지 아래의 명령어로 확인해 본다. (gpio -v는 버전을 확인하는 명령어이다.)

-> $ gpio -v gpio readall


 

LED 예제

 

GPIO Output 테스트에 사용될 GPIO는 GPIO 23번, 24번이다.

이는 각각 P1 헤더핀의 16번, 18번 핀에 해당된다.

 

LED 2개, 저항 220~330옴을 아래와 같이 라즈베리파이 P1 헤더핀의 16번, 18번핀에 연결해 주도록 하자.

아래의 회로도는 gpio의 output값을 High로 설정해 주면 LED가 ON, Low로 설정해 주면 off가 되는 구성이다.

 

(위의 예제들은 220~330옴 저항을 사용하는 것을 권장하고 있다. 라즈베리파이 3의 권장전력은 5V 2.5A이다. gpio 핀 출력 신호의 최대 전압은 3.3V이며, 각 pin당 약 18mA로 제한한다.  이때 옴의 법칙을 생각하며 LED의 전압강하에 따른 전류값을 측정하고 알맞은 저항을 선택한다. )

 

참고로 LED는 그림과 같이 다리가 짧은 쪽이 Cathode -, 긴 쪽이 Anode +이다.

 

 

Code 작성

 

1. 디렉터리 생성

->  mkdir gpio-test

->  cd gpio-test

 

2. 소스코드 작성

->  vi gpio-test.c

 

#include <stdio.h>
#include <wiringPi.h>
#define LED1     4 // BCM_GPIO 23
#define LED2     5 // BCM_GPIO 24

int main (void)
{
  if (wiringPiSetup () == -1)  
      return 1 ;

  pinMode (LED1, OUTPUT) ;
  pinMode (LED2, OUTPUT) ;

for (;;)
  {
    digitalWrite (LED1, 1) ; // On
    digitalWrite (LED2, 1) ; // On
    delay (1000) ; // ms

    digitalWrite (LED1, 0) ; // Off
    digitalWrite (LED2, 0) ; // Off

    delay (1000) ;

  }

  return 0 ;

}

 

3. 컴파일하기

->  gcc -o gpio-test gpio-test.c -lwiringPi

 

4. 프로그램 실행

-> ./gpio-test

gpio 관련 프로그램 실행은 항상 루트 권한으로 실행해줘야 한다.

이를 실행해 주면 gpio 23, 24번에 연결된 LED가 모두 켜진 후, 1초 대기, 그리고 두 LED가 모두 꺼지는 작업을 반복 수행하게 된다. 프로그램 종료는 Ctrl + C로 종료하면 된다.

 


 

초음파 센서 예제

 

 

 

 

Trig 핀은 wiringPi 기준 2번핀 (BCM 13번핀)에 연결해줍니다.

Echo 핀은 wiringPi 기준 3번핀 (BCM 15번핀)에 연결해줍니다. 

 

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
    int trig = 2 ;
    int echo = 3 ;
    int start_time, end_time ;
    float distance ;
    if (wiringPiSetup() == -1) exit(1) ;
    pinMode(trig, OUTPUT) ;
    pinMode(echo , INPUT) ;
   while(1) {
      digitalWrite(trig, LOW) ;
      delay(500) ;
      digitalWrite(trig, HIGH) ;
      delayMicroseconds(10) ;
      digitalWrite(trig, LOW) ;
      while (digitalRead(echo) == 0) ;
      start_time = micros() ;
      while (digitalRead(echo) == 1) ;
      end_time = micros() ;
      distance = (end_time - start_time) / 29. / 2. ;
      printf("distance %.2f cm\n",  distance) ;
    }
    return 0 ;
}

 

이 때 음파의 속도 = 343 m/s (공기 온도 섭씨 25도)

343 x 100 cm/s -> 1 / 34300 = 2.9 x 10^-5 s/cm = 29 x 10^-6 s/cm  = "29 us/cm" 이다.

음파의 속도 =343 m/s (공기 온도 섭씨 25도)

343x100 cm /s -> 1/ 34300 =2.9x10-5 s/cm = 29x10-6s/cm

=29 us/cm

 

 

 

728x90

'IoT > 라즈베리파이' 카테고리의 다른 글

라즈베리파이 GPIO 다루기  (0) 2023.06.23
라즈베리파이 Wifi 통신과 데이터베이스 연동  (0) 2023.02.28
라즈베리파이 APM 설치  (0) 2023.02.24
라즈베리파이3 SSH 연결  (0) 2023.02.23
라즈베리파이3 시스템 설정  (0) 2023.02.23
    'IoT/라즈베리파이' 카테고리의 다른 글
    • 라즈베리파이 GPIO 다루기
    • 라즈베리파이 Wifi 통신과 데이터베이스 연동
    • 라즈베리파이 APM 설치
    • 라즈베리파이3 SSH 연결
    serin99
    serin99
    FE 개발자가 되기 위해 공부하는 사람

    티스토리툴바