*직*
Bronze개인인증
팔로워5 팔로우
소개
등록된 소개글이 없습니다.
전문분야 등록된 전문분야가 없습니다.
판매자 정보
학교정보
입력된 정보가 없습니다.
직장정보
입력된 정보가 없습니다.
자격증
  • 입력된 정보가 없습니다.
판매지수
전체자료 46
검색어 입력폼
  • 사물인터넷(IoT) LED
    실험 결과보고서[ 사물인터넷(IoT) 그리고 클라이언트와 웹서버 ]이론요약) 사물인터넷(Internet of Things; IoT)이란 일반 가전제품부터 의료기기, 웨어러블 기기, 스마트 기기는 물론 스마트 시티까지 실제 오브젝트를 인터넷에 연결하는 프로세스를 말한다. 다시 말해, 무선 네트워크에서 데이터를 송수신하는 물리적 기기들로 이루어진 모든 시스템을 말하는 것이다. 즉, 인터넷을 통해 사물을 제어하고 사물에서 보내 온 정보를 인터넷을 통해 받아 보는 것이 IoT인 것이다. 따라서 모든 종류의 오브젝트에서 컴퓨팅 기기를 통합할 때 IoT가 실현될 수 있다. 예를 들어, 스마트(IoT) 온도 조절 장치는 퇴근길의 스마트 차량으로부터 위치 데이터를 받아 사용자가 집에 도착하기 전에 실내 온도를 조절할 수 있다. 이처럼 IoT 시스템은 피드백 루프의 데이터를 지속적으로 전송, 수신 및 분석하여 작동한다. IoT 기술의 종류에 따라 거의 실시간으로 인공지능 및 머신러닝을 통한 분석이 가능하다. IoT 기술은 웹(Web)을 통해 구현될 수 있으며, 이 웹은 클라이언트와 서버 구조로 구성되어 있다. 클라이언트와 서버의 이해는 다음의 예를 통해 쉽게 이해할 수 있다. 누군가가 웹브라우저를 통해 특정 사이트를 열려고 한다면, 해당 사이트를 열기 위해 특정 주소를 입력하는 행위, 즉 해당 주소의 홈페이지 소스를 서버에게 전달하는 것이 클라이언트가 서버에게 요청을 한 것이고 해당 사이트의 홈페이지 소스를 전달해 주는 것이 요청을 받은 서버의 응답이라 할 수 있겠다. 이러한 과정을 통해 클라이언트의 웹에서 해당 사이트를 볼 수 있는 것이다.실험목적 및 과정) 본 실험에서는 클라이언트와 서버의 개념을 활용해 IoT 기술을 구현해보고자 하며, 이를 위해 인터넷에서 동작하는 웹(Web)을 다뤄볼 것이다. IoT 기술의 구현은 PC에서 코딩키트의 LED를 켜고 끄는 실험을 통해 확인해보고 이 과정에서 IoT 기술의 동작원리를 이해해보도록 한다. 실험진행을 위해 코딩키트에서 미리 준비해둔 서버(http://www.ckiot.net)에 접속하여 로그인해야 한다. 이때 로그인은 보안을 위한 것으로 ID는 256개(ck0~ck255) 중 임의의 하나를 선택하면 되고, 암호는 라즈베리파이에서 “ckiot_get_pw.py“파일을 실행하여 알아내면 된다. 로그인 항목 중 ”Table Password“는 서버의 데이터베이스 상태를 저장해둔 표에 다른 사람이 쉽게 접근하지 못하도록 만들어 둔 것으로, 첫 로그인시 Table Password는 0으로 입력한다. 로그인이 성공하였다면 화면에 정식 Table Password가 출력되고 이를 이용해 다시 로그인한다. 이 과정까지 완료되면 비로써 코딩키트에서 제어할 수 있는 디바이스 목록들이 나타난다.실험결과 및 내용검토) < 인터넷을 통하여 LED 깜박이기 / e00_ckiot_led_loop.py >핵심 코드import time, cookielib, urllib2, urllib #웹서버 접속 및 웹서버에 데이터를 요청하는 라이브러리import RPi.GPIO as GPIO #LED에 해당하는 GPIO를 추가하고 DB 내용 중 LED 부분을 찾아 그 값에 맞게 LED에 해당하는 GPIO 컨트롤GPIO.setmode(GPIO.BCM)LED2 = 24 #라즈베리파이에는 LED2,LED3가 아두이노에는 LED0,LED1이 연결되어 있음GPIO.setup(LED2, GPIO.OUT)cj = cookielib.CookieJar()opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))urllib2.install_opener(opener) #웹서버에 접속할 준비user_id = "ck0"password = "16700"tbl_pw = “3551” #웹서버 로그인params = urllib.urlencode({"id":user_id, "pw":password, “tbl_pw”:tbl_pw }) #user_id, password, tbl_pw 변수를 urllib.urlencode() 함수로 팩킹req = urllib2.Request("http://www.ckiot.net/ckiot_login_device.php", params) #팩킹값 웹서버로 보낼 준비(웹서버 파일 주소 같이 기재)res = opener.open(req)read_msg = res.read() #opener.open() 함수를 통해 웹서버에 로그인 요청을 보내고 요청에 대한 응답은 res 변수에 저장print read_msglogin_ok = int(read_msg[0]) #read_msg 첫 번째 원소 int 형식으로 login_ok 변수에 저장count = 0if (login_ok == 0):print read_msg[1:]else:print "Login OK" #로그인 여부 확인req = urllib2.Request("http://www.ckiot.net/ckiot_table.php")while 1: #무한 반복을 통해 PC 클라이언트에서의 LED 제어가 즉각적으로 반영되도록 함res = opener.open(req)read_msg = res.read()read_msg = read_msg[1:] #로그인 성공 시 웹서버의 DB에서 코딩키트 디바이스 관련 표를 보내달라는 요청dev_list = read_msg.split('.') #read_msg.split(.) 함수를 이용해 점으로 구분하여 리스트에 저장for dev_name_val in dev_list: #리스트 항목을 개별적으로 나누고 각각의 항목에서 디바이스 이름과 값으로 구분dev_name_val_list = dev_name_val.split(':') #split() 함수를 이용해 콜론(:)으로 구분dev_name = dev_name_val_list[0] #dev_name_list 첫 번째 원소를 dev_name 변수에 저장dev_val = dev_name_val_list[1] #dev_name_list 두 번째 원소를 dev_val 변수에 저장print dev_name, " : ", dev_val #dev_name : dav_val 해당 값 출력if (dev_name == "led0"): #dev_name 변수가 led0인 것을 검색if (dev_val == '1'): #LED가 1이면 ON 그렇지 않으면 OFFGPIO.output(LED2, 1)else:GPIO.output(LED2, 0)count = count + 1 #count 변수를 증가하고 이 변수를 출력함으로써 반복을 얼마나 했는지 확인print counttime.sleep(1)새로운 함수라이브러리 : cookielib, urllib2, urlliburllib 라이브러리에는 웹 클라이언트를 작성하는 데 사용되는 모듈들이 있으며, 가장 빈번하게 사용하는 모듈 중 하나이다. 웹 클라이언트를 개발하는 경우 사용되는 urllib 라이브러리는 HTTP 서버 뿐만 아니라 FTP 서버 및 로컬 파일 등을 처리하는데, 클라이언트에서 공통적으로 필요한 함수와 클래스 등을 제공한다.LED ONLED OFF실험을 통해 새롭게 알게 된 점 / 느낀점본 실험에서 구현한 IoT의 구성은 하나의 서버에 두 개의 클라이언트를 연결한 형태이다. 참고로 클라이언트 중 하나는 PC이고 또 다른 하나는 라즈베리파이며, 라즈베리파이에는 사물(LED)이 연결되어 있다. 실험 결과를 살펴보기에 앞서 우리는 인터넷에 대한 개념을 이해할 필요가 있다. 인터넷은 모든 컴퓨터가 연결된 커다란 네트워크이므로 인터넷에 연결되어 있는 두 개의 클라이언트와 하나의 서버, 즉 PC와 라즈베리파이, 서버 모두 인터넷임을 알 수 있다. 본 실험으로부터 우리가 확인하고 싶은 내용은 PC에서 LED를 제어할 수 있는지에 대한 것이다. 결과부터 말하자면, 미리 준비된 서버에 접속한 후 로그인을 하면, 코딩키트의 디바이스들을 제어할 수 있는 화면이 출력되고, 디바이스 제어 화면(PC 웹브라우저 클라이언트)에서 LED를 켜고 끄니 코딩키트의 LED가 켜지고 꺼지는 것을 확인할 수 있었다. 즉, IoT 기술을 올바르게 구현했으며 정상적으로 디바이스 제어 동작을 시키고 있음을 확인한 것이다. 동작 결과를 확인하였으니 그 원리에 대해 살펴보도록 하겠다. 먼저 PC의 웹브라우저에서 서버에 접속한 후 LED의 상태를 켜짐으로 변경하는 요청을 서버에게 했다. 요청을 받은 서버는 LED의 상태를 켜짐으로 변경하고 저장한 다음 이 응답을 PC에게 보낸다. 라즈베리파이는 주기적으로 서버에게 LED의 상태를 보내줄 것을 요청한다. 서버는 이에 대한 응답으로 저장하고 있던 LED 상태를 보내준다. 이로써 우리는 사물과 먼 거리에 있다 할지라도 사물의 상태를 변경하고 싶다면 서버에 접속하여 사물의 상태를 변경할 수 있는 것이다.
    공학/기술| 2021.11.19| 2페이지| 3,000원| 조회(163)
    미리보기
  • 라즈베리파이 파이썬 SPI로 PWM 만들기
    실험 결과보고서[SPI 인터페이스로 PWM 신호 만들기]이론요약) 아두이노는 PWM 신호를 스스로 만들어낼 수 있기에 SPI 인터페이스를 필요로 하지 않는다. 반면에 라즈베리 파이는 PWM 신호를 스스로 만들어낼 수 없을 뿐더러 A/D Converter가 내장되어 있지 않아 외부의 A/D Converter로부터 아날로그 신호를 입력받아야 하는데, 이때 A/D Converter가 SPI로 연결되어 있다. 라즈베리 파이는 2 개의 SPI를 사용하며, 앞서 설명했듯이 하나는 A/D Converter에 연결되어 있고, 또 다른 하나는 PWM 신호를 재생하는데 사용된다. SPI의 Slave Select(SPI_SS)는 2 개의 신호(0 또는 1, 상승 에지 또는 하강 에지)를 갖으며, 이 두 신호를 동시에 사용할 수는 없지만 SPI_SS 2 개를 연결한 후 각각 시간을 나누어 사용할 수는 있다. 이때 SPI 통신은 주로 전력소모가 많은 주변장치(Slave)들과 이루어진다. 아래의 그림은 여러 개의 Slave를 사용하기 위해 SPI_SS 신호를 따로 컨트롤한 후 코딩 처리를 한 타이밍도이다. 이 타이밍도를 통해 다음의 내용을 해석할 수 있어야 한다. “SPI_SS 신호를 먼저 선언해주고 GPIO.output() 함수를 이용해 신호가 LOW되면, MOSI와 MISO가 스탠바이하고 있다가 클럭이 들어오게 되는구나.”실험과정) 본 실험에서는 spidev 라이브러리를 통해 SPI를 사용하는 방법을 익히고, SPI 커맨드를 활용해 PWM 신호를 만들어 부저에 소리를 내보고자 하는데, 5초 동안 부저에서 소리가 울리면 4개의 LED가 하나씩 꺼지도록 동작하는 코딩을 작성해보겠다. 마지막으로 모듈에 대한 개념을 이해하고 직접 모듈을 만들어 설치하는 실험까지 진행하겠다. 실험 진행을 위한 텍스트 에디터(Python IDLE), 코드 실행기(터미널 프로그램), 코딩 키트를 준비하고 코딩을 작성한 후 그 결과를 확인해보도록 하겠다.첫 번째 실험결과 및 내용검토) < 모듈을 만들고 설치하기는 라이브러리를 import하여 로드한다.ck_spi = spidev.SpiDev()ck_spi.open(0.1)spidev 라이브러리를 이용해 SPI 객체를 하나 만든다.SPI 사용을 위해 open() 함수를 사용하여 SPI 초기화를 진행한다. 이때 라즈베리 파이에서 SPI 신호 4 개를 모두 지원하는 포트는 1 개뿐이라 항상 첫 번째 인자로 0을 쓰고, 두 번째 인자에 SPI_SS 신호는 0번을 첫 번째 인자에서 사용하고 있으므로 1 번을 사용한다.def ck_spiWr(cmd, data) :print(hex(Cmd), hex(data))GPIO.output(SPI_SS, 0)ck_spi.xfer([cmd, data])GPIO.output(SPI_SS, 1)파이썬은 def 키워드를 통해 사용자가 직접 설정하는 ‘사용자 정의 함수’를 만들 수 있다. def와 콜론(:)을 이용하여 함수명과 매개변수를 지정해주고 하단에 수행할 문장을 들여쓰기 하여 def문내에 속하도록 하면, 동일한 작업이 반복되는 경우에 언제든지 호출해 사용할 수 있다.새로운 함수SPI CommandSPI 인터페이스 이용해 PWM 신호를 만들어 부저를 동작시키기 위해 필요한 Command이다.CommandCodeExplanationSPI_CMD_PWM_BUZ_EN0x20부저로 PWM 신호 출력. 다른 부저 관련 command 실행 후 본 command가 실행됨. 데이터 값이 1이면 활성화.SPI_CMD_PWM_BUZ_FR_H0x21부저 PWM 신호 주파수 중 상위 8 비트 설정SPI_CMD_PWM_BUZ_FR_L0x22부저 PWM 신호 주파수 중 하위 8 비트 설정SPI_CMD_PWM_BUZ_DUTY0x23부저 PWM 신호 듀티비 설정(범위 : 0 ~ 100)SPI_CMD_CLEAR0x00SPI 인터페이스로 연결된 주변장치 초기화xfer()아두이노의 SPI.transfer() 함수와 같이 라즈베리 파이에서 xfer() 함수는 SPI Slaver로 데이터를 전달하는 기능을 한다. xfer() 함 있다. 참고로 리스트 원소는 8 비트이다.실험을 통해 새롭게 알게 된 점 / 느낀점본 실험으로부터 spidev 라이브러리를 통한 SPI 인터페이스 코딩 사용방법과 SPI Command를 활용한 PWM 신호 발생 및 부저 동작까지 공부해보았다. 또한 파이썬 코드를 논리적으로 묶어서 관리하고 사용할 수 있도록 한 모듈을 직접 만들고 설치까지 해보며 Python의 새로운 기능을 익힐 수 있었다. 이를 통해 느낀 것은 ‘파이썬이 그렇게 어렵지는 않다’라는 것이었다. 물론 이제 막 시작한 단계에서 자만하는 것처럼 보일 수 있겠으나, 모듈에 대해 공부를 하고나니 “평소에 성실히 공부하고 공부한 코드들을 잘 정리해두면 나중에 프로그래밍 할 때 효율적으로 사용할 수 있겠는데?”라는 생각을 하게 되었다. 많은 사람들이 코딩 공부를 하면서 ‘내가 이걸 배워서 실제로 무엇인가를 만들어 낼 수 있을까?’라는 고민을 한다고 한다. 나 또한 그런 생각을 안 해본 것은 아니다. 그러나 모듈에 대한 개념을 공부하면서(파이썬의 모듈에 대한 내용은 3p 보고서에 자세히 정리해두었음) 나도 한 번 해볼 수 있겠다는 자신감이 생기게 되었고, 파이썬이라는 프로그래밍 언어가 조금씩 재미있어지기 시작했다.두 번째 실험결과 및 내용검토) < 부저에서 소리가 나는 동안 LED가 하나씩 꺼지기 / buz_led4_off.py >핵심 코드import timeimport CK_SPI as spiimport RPi.GPIO as GPIOGPIO.setmode(GPIO.BCM)LED_0=22LED_1=23LED_2=24LED_3=25spi.ck_spiWr(spi.SPI_CMD_CLEAR,0)spi.ck_spiWr(spi.SPI_CMD_PWM_BUZ_FR_H,0x01)spi.ck_spiWr(spi.SPI_CMD_PWM_BUZ_FR_L,0x2c)spi.ck_spiWr(spi.SPI_CMD_PWM_BUZ_DUTY,50)spi.ck_spiWr(spi.SPI_CMD_PWM_BUZ_EN,1)List_LED=[LED_0,LGPIO.output(LED, 1)time.sleep(1)GPIO.output(LED_3, 0)time.sleep(1)GPIO.output(LED_2, 0)time.sleep(1)GPIO.output(LED_1, 0)time.sleep(1)GPIO.output(LED_0, 0)time.sleep(1)spi.ck_spiWr(spi.SPI_CMD_PWM_BUZ_EN,0)왼쪽 코드는 처음 부저에 소리가 날 때 LED가 모두 켜지고, 시간이 1 초씩 흐를 때마다 LED가 하나씩 꺼지다가 LED가 모두 꺼지면 부저에서 나오던 소리도 멈추도록 한 것이다.먼저 CK_SPI 모듈을 import 해주고, CK_SPI를 spi로 간단히 정의한 다음, ck_spiWr() 함수를 사용하기 위해 spi.ck_spiWr() 라고 작성한다. 이는 ck_spiWr() 함수가 SPI 모듈 안에 정의되어 있기 때문이다. spi.ck_spiWr() 함수 안에는 PWM 신호를 만들어 부저를 동작시키기 위한 SPI Command를 작성한다.LED를 동작시키기 위해 추가한 “import RPi.GPIO as GPIO”를 만약 import 하지 않는다면, GPIO.setup()을 spi.GPIO.setup()으로 바꾸어 GPIO 위치가 SPI 모듈 안에 있음을 정의해 두어야 한다.실험에 사용할 4 개의 LED에 핀 번호를 각각 설정해주고 LED를 List로 만들어 for문을 작성함으로써 코드를 간단하게 만든다.켜져 있던 LED가 모두 꺼지면, 아래의 함수에 의해 부저에서 나오던 소리도 멈추게 한다.“spi.ck_spiWr(spi.SPI_CMD_PWM_BUZ_EN,0)”새로운 함수importimport 문은 C언어의 #include와 유사한 기능을 한다. 즉 python에서 배포되는 모듈을 사용하기 위한 것으로, import 모듈이름 as 사용이름으로 정의된다. ‘as’의 경우는 모듈 이름이 너무 길거나 할 때 간단하게 표현할 수 있도록 도와준다. import는 from 모듈이름 import 함수(또는.실험을 통해 새롭게 알게 된 점 / 느낀점본 실험은 지난 시간에 배웠던 List와 for 문을 활용하여 SPI 인터페이스로 만들어 낸 PWM 신호로 부저에서 소리가 나는 동안 LED가 하나씩 꺼지게끔 동작하는 코딩을 진행해보았다. 첫 번째 실험에서 모듈을 통해 얻은 자신감으로 두 번째 실험은 과감하게 연습문제에 도전하였는데, List와 for 문을 작성하고도 이 코드의 위치를 제대로 고려하지 않아 LED 불이 차례대로 꺼진 다음 부저에서 소리가 난다거나, 부저에서 소리가 난 후 LED에 불이 들어오는 등의 시행착오를 겪게 되었다. 몇 번의 코딩 수정을 반복하다 겨우 원하는 동작 결과를 얻어냈는데, 그 순간의 기분은 해냈다는 뿌듯함과 할 수 있다는 자신감으로 가득했다. 그 동안은 교재에 나와 있는 코딩을 따라 쓴다는 느낌이 강했었는데, 이번에는 List와 for문을 머릿속에서 끄집어내어 코딩을 짜고 SPI 모듈을 활용하여 최종 동작결과를 얻어내니 프로그램 엔지니어가 된 것 같은 기분이 들면서 동시에 코딩이 정말 재미있다고 느끼게 되었다.실험 결과 사진 자료 (동영상 자료는 별도 파일 첨부)SPI 인터페이스로 PWM 신호 만들기첫 번째 실험두 번째 실험[Python에서 모듈이란?]| 모듈이란 무엇인가?: Python에서 모듈(module)은 여러 변수와 함수 또는 클래스들을 가지고 있는 집합체로, 이 모듈이라는 기능을 활용해 코드를 분리하거나 공유할 수 있다. 좀 더 쉽게 말하자면, 어떤 함수를 만들고 만들어진 함수를 배포(Distribute)하기 위해 만든 것이라 생각하면 되겠다. 지금부터 이 모듈을 ‘통치 모듈’이라 부르겠다. 이 통치 모듈은 크게 표준 모듈과 외부 모듈로 나눌 수 있으며, Python에서 기본적으로 내장되어 제공하는 모듈을 ‘표준 모듈’이라 하고 다른 사용자가 만들어 공개한 모듈을 ‘외부 모듈’이라 한다. 이러한 모듈의 기능을 만들어 낸 이유는 Python의 코드 실행을 위해 동작시킨 인터프리터 프로그램을 종료하면 작성한 내용이 모두 사라져
    공학/기술| 2021.11.04| 3페이지| 3,000원| 조회(272)
    미리보기
  • 라즈베리파이-파이썬-DC 모터 및 RPM 측정
    실험 결과보고서[ DC 모터 ]이론요약) DC 모터란 서보 모터와 달리 360도 연속 회전이 가능하고 속도 및 회전 방향을 제어할 수 있는 모터를 말한다. 참고로 서보모터는 180도까지 회전이 가능하다. DC 모터의 회전방향을 제어하는 방법은 전류 흐름의 방향을 바꾸는 것이고, DC 모터의 속도를 제어하는 방법은 PWM 신호의 듀티비를 제어함으로써 전압의 크기를 가변시키는 것이다. DC 모터를 컨트롤하기 위해서 Enable / 정방향 Enable / 역방향 Enable 신호가 사용된다.실험과정) 본 실험은 스위치를 이용해 DC 모터의 회전 방향을 바꾸어보려 한다. 즉 스위치 값이 0이면 정방향으로 회전하고 스위치 값이 1이면 역방향으로 회전하도록 코드를 정의해 볼 것이다.실험결과 및 내용검토) < 스위치를 이용하여 DC 모터 방향 바꾸기 / dcmot_speed_dir.py >핵심 코드GPIO.setmode(GPIO.BCM)DCMOT_EN = 17GPIO.setup(DCMOT_EN, GPIO.OUT)GPIO.output(DCMOT_EN, 1)SWITCH_0 = 26GPIO.setup(SWITCH_0, GPIO.IN)DCMOT_DIR_SW_FWD = 0DCMOT_DIR_SW_BWD = 1spi_dev.ck_spiWr(spi_dev.SPI_CMD_CLEAR, 0)DC 모터의 핀 번호(17)를 설정한 다음, DC 모터의 EN 값에 1을 주어 Enable 시킨다.이어서 DC 모터의 방향을 제어할 0번 스위치 핀 번호(26)를 설정한 다음 스위치가 내려가 있을 때(0일 때) 정방향으로 회전하고 스위치가 올라가 있을 때(1일 때) 역방향으로 회전하게끔 동작시키는 코드를 작성한다. 마지막으로 SPI로 동작하는 모든 장치들을 초기화시킨다.def ck_map(x, in_min, in_max, out_min, out_max)out_val = (((x - in_min) * (out_max - out_min)) / (in_max - in_min)) + out_minreturn ourange(30)speed = spi_adc.ck_adcRd(spi_adc.ADC_CH_VR1)speed = ck_map(speed, 0, 1023, 0, 100)if (GPIO.input(SWITCH_0)==DCMOT_DIR_SW_FWD)spi_dev.ck_pwmDCMot_fwd(1000, speed)spi_dev.ck_pwmDCMot_bwd(1000, 0)print i, ": SPEED : ", speed, "DIR : Forward"elsespi_dev.ck_pwmDCMot_fwd(1000, 0)spi_dev.ck_pwmDCMot_bwd(1000, speed)print i, ": SPEED : ", speed, "DIR : Backward"가변저항 값은 0~1023까지 그리고 듀티비는 0~100까지 변한다. 이 두 값의 범위가 다를 때에는 ck_map를 사용하여 가변저항의 입력 값 범위를 0~100으로 변환시켜야 한다.마지막으로 if-else 문을 활용하여 스위치가 0일 때 DC 모터가 정방향으로 회전하게끔 하고, 반대로 스위치가 1일 때 모터가 역방향으로 회전하게 코드를 작성한다.새로운 함수key = raw_input('Quit?? (y/n) : ' ) # 문자를 입력받는 함수if (key=='y') :break;raw_input() 함수는 화면에 어떤 문구를 출력하고 값을 입력 받을 수 있는 프롬프트를 보여준다. 왼쪽의 코드에서는 'Quit?? (y/n) : ' 문구를 출력시킨 다음 만약 ‘y’ 값을 입력받는다면 break 문을 통해 루프를 빠져나오게 된다.def ck_map(x, in_min, in_max, out_min, out_max) :out_val = (((x - in_min) * (out_max - out_min)) / (in_max - in_min)) + out_minreturn out_valspeed = spi_adc.ck_adcRd(spi_adc.ADC_CH_VR1)speed = ck_map(speed, 0, 1023, 0, 100)입일하게 변환시켜주는 함수가 ck_map()이다. 이어서 가변저항으로부터 입력받은 0~1023까지의 값은 speed에 저장하고 이를 ck_map() 함수를 사용하여 0~100까지인 듀티비 값의 범위로 변환시켜 speed에 저장시킨다.실험을 통해 새롭게 알게 된 점 / 느낀점스위치를 내려놓은 상태에서 파일을 실행시키면 DC 모터가 정방향으로 회전하기 시작한다. 이와 동시에 프롬프트 화면에는 0~100 범위내로 속도가 출력되며 정방향(Foward) 문구가 출력되어 화면에 나온다. 이어서 스위치를 올리니 회전방향은 역방향으로 바뀌어 회전하기 시작했고 프롬프트 화면에도 Backward라는 문구가 출력되기 시작했다. 마지막으로 동작 횟수가 20번째가 되니 모터의 회전은 멈추고 raw_input() 함수에 의해 ‘y’ 또는 ‘n’ 문자를 입력받는 문구가 출력됐다. 이에 n을 입력해보니 모터는 다시 회전하기 시작했고, y를 입력했을 때는 동작이 멈추는 것을 확인하였다. 본 실험을 마무리하며 ck_map() 함수의 중요성에 대해 다시 한 번 생각해보게 되었다. ‘DC 모터의 속도가 PWM 신호의 듀티비에 의해 제어된다.’라는 기초지식이 없었다면, DC 모터 속도제어 코드를 작성함에 있어 분명 ck_map() 함수를 이용해 값의 범위를 맞춰줘야 하는 부분을 놓쳤을 것이다. 이에 다시 한 번 파이썬 문법의 기초를 튼튼히 쌓아야 할 필요성과 중요성을 깨달을 수 있었다. 또한 raw_input() 함수는 오직 문자만을 반환하기에 1을 입력해도 숫자 1이 아닌 문자 ‘1’이 출력된다는 사실을 처음 알게 되었다.[ RPM 측정 ]이론요약) 라즈베리파이 코딩 키트에 있는 DC 모터에는 인코더(Encoder)가 붙어있다. 이 인코더를 사용하는 이유 중 하나는 DC 모터가 얼마나 회전하는지 즉, 속도의 측정을 위해서일 것이다. 회전 속도를 측정하고 제어한다는 것은 크게 생각해봤을 때 로봇의 이동 방향이나 행동 등을 정확하게 하기 위함이라고 생각하면 이해가 쉬울 것이다. DC 모터에 붙어있는 센서 위를 지난다. 또한 포토 인터럽트는 수광부와 발광부가 서로 마주 보고 있기 때문에 그 사이에 물체(장애물)가 있어 빛이 수신측에 전달되지 않는다면 0의 값을 갖고 반대로 전달이 된다면 1의 값을 갖게 된다. 또한 인코더가 갖고 있는 10개의 날개 때문에 1에서 0으로 하강 엣지가 10번 발생하게 되면 DC 모터가 1바퀴 회전하였다고 알 수 있게 된다. 참고로 RPM이란 Revolution Per Minute으로 1분 동안 회전한 수를 의미한다.실험과정) 본 실험은 CK_SPI_DEV 모듈을 이용해 인코더 날개(휠)가 한 바퀴 회전하는데 몇 시간이 걸리는지를 측정하고자 한다. 이를 위해 ck_getDCMotEncTime() 함수를 이용할 것이며, 이 함수를 사용해 얻은 측정 시간은 초의 단위를 갖고 있으므로 이를 분으로 바꿔 그 결과를 확인해볼 것이다. 뿐만 아니라 “ZeroDivisionError”라는 에러가 발생한다면, 이 에러가 발생하게 된 원인에 대해 생각해보고자 한다.실험결과 및 내용검토) < DC 모터 인코더 휠의 한 바퀴 도는 시간 측정 / dcmotenc.py >핵심 코드DCMOT_EN = 17 # DC 모터의 핀 번호 설정GPIO.setup(DCMOT_EN, GPIO.OUT)GPIO.output(DCMOT_EN, 1) # DCMOT_EN값 EnableDCMOTENC_LED_ON = 20GPIO.setup(DCMOTENC_LED_ON, GPIO.OUT)GPIO.output(DCMOTENC_LED_ON, 1)spi_dev.ck_spiWr(spi_dev.SPI_CMD_DCMOTENC_EN, 1) # 인코더 Enabledef ck_map(x, in_min, in_max, out_min, out_max) : # 입출력 범위값 mapping 함수out_val = (((x - in_min) * (out_max - out_min)) / (in_max - in_min)) + out_minreturn out_valtry :while(1) : # 가변저항 값의speed = spi_adc.ck_adcRd(spi_adc.ADC_CH_VR1)speed = ck_map(speed, 0, 1023, 0, 100)spi_dev.ck_pwmDCMot_fwd(1000, speed)encData_sec = spi_dev.ck_getDCMotEncTime()try :print (60/encData_sec), "RPM"except ZeroDivisionError :print "Encoder Time is Zero."time.sleep(1)except KeyboardInterrupt : # 키보드 인터럽트 발생 시 처리 구문 (중단 및 초기화)spi_dev.ck_spiWr(spi_dev.SPI_CMD_CLEAR, 0)GPIO.cleanup()※ 본 실험은 DC 모터의 회전방향을 제어하는 실험에서 부착되어 있는 인코더를 활성화한 코드이다. 따라서 앞에서 언급한 핵심 코드에 대한 설명은 코드 옆에 간략히 기재하겠다.인코더는 발광부가 있기 때문에 LED를 ON 시키기 위해 핀 번호(20)를 설정해주어야 한다.CK_SPI_DEV 모듈을 이용해 인코터가 한 바퀴 회전하는데 걸리는 시간을 얻고자 하며, ck_getDCMotEncTime() 함수를 이용하여 DC모터가 한 바퀴 회전할 때 걸리는 시간을 구하고 이를 encData_sec에 저장한다. 이때 구한 데이터 값의 단위는 초이므로 이를 분으로 바꾸기 위해 다음의 코드 과정을 거쳐야 한다. 60/encData_sec그런데 여기에서 예기치 못한 한 가지 문제가 발생할 수 있다. 일반 수학에서는 분모에 0이 올 수 없으며 이를 부정이라 한다. 마찬가지로 파이썬에서도 0으로 나누어지는 코드에 대해서 “ZeroDivisionError”라는 에러가 발생하게 되는데 이를 해결하기 위해 다음의 예외 처리 코드를 추가해주어야 한다. 참고로 본 실험에서 파일을 실행시켰을 때 모터가 바로 회전하는 것이 아니기 때문에 encData_sec 값이 0이 되며, 이때 ZeroDivisionError가 발생하게 된다. e:
    공학/기술| 2021.11.04| 2페이지| 3,000원| 조회(389)
    미리보기
  • 순차논리회로설계 결과레포트
    전자공학실험3 Chap4 순차논리회로 설계[Section 01]간단한 상태도의 구현[학습목표]· 순차논리 회로를 설계하기 위해 FSM도(상태도)를 작성하고, Verilog, VHDL로 설계하는 과정을 공부한다.· 설계된 순차논리 회로를 시뮬레이션으로 설계를 검증하고 실습키트에 동작을 확인한다.[이론내용]▣ 순차논리회로와 상태도▷ 상태도 (FSM : Finite State Machine)- 조합논리회로만으로 디지털 논리회로를 설계하는 것이 쉽지 않다.여기서 조합논리회로란, 임의의 시간에서의 출력이 전의 입력에는 관계없이현재의 입력조합(0 or 1)으로부터 직접 결정되는 논리회로를 말한다.이에 반해, 순차논리회로는 조합논리회로와 다르게 피드백 부분이 있어외부로부터의 입력과 현재 상태에 따라 출력이 결정된다.- FSM은 순차논리회로를 설계하는 하나의 방법이다.▷ 순차논리회로의 구성요소? 기억소자 : 플립플롭을 포함하며 순차논리회로의 상태를 기억한다.? 조합논리회로 : 외부 입력과 상태 정보 등 두 입력 신호와 다음 상태 정보와외부 출력 신호 등 두 출력 신호가 있음? 클럭 : FSM의 상태가 변하는 동기 클럭이 필요하다.▷ 무어 머신(Moore Machine), 무어 모델(Moore Model)- 상태 머신(State Machine)이 현재 상태에만 영향을 받는다.- 초기 상태에서 클럭의 에지에서 i가 ‘0’이면 S0상태를 유지하고,i가 ‘1’이면 S1 상태로 천이한다.- 출력 y는 S0에서 항상 입력 m을 출력하고, S1에서 항상 입력 n을출력한다.▷ 밀리 머신(Mealy Machine), 밀리 모델(Mealy Model)- 상태 머신(State Machine)이 현재 상태와 입력에 영향을 받음- 초기 상태어서 클럭의 에지에서 i가 ‘0’이면 S0상태를 유지하고, I가 ‘1’이면 S1 상태로 천이한다.- 출력 y는 S0에서 S1으로 천이될 때 입력 n을 출력하고 S1에서 S0로 천이될 때 입력 m을 출력한다.[실험결과]▣ Verilog를 이용한 간단한 상태로 설계동작 확인? 상태 S0에서 출력 y는 입력 m 값을 출력하는가?⇒ 위의 사진은 초기 상태에서 i가 ‘0’일 때 상황이며, 이때는 S0 상태를 유지하고 있기 때문에 출력 y는 항상 입력 m을 출력해야한다. 따라서 S0 상태에서 입력 m을 0으로 주었을 때 출력 y도 0을 출력하고 있음을 확인할 수 있었다.⇒ 마찬가지로 위의 사진은 초기 상태에서 i가 ‘0’일 때 상황이며, S0 상태를 유지하고 있을 때 입력 m을 1로 주었다. 결과적으로항상 출력 y는 입력 m의 값을 출력해야하기 때문에 출력 y가 1의 값을 출력하며 빛을 내고 있음을 확인할 수 있었다.이를 통해 무어 모델의 상태가 S0일 때는 출력 y의 값이 항상 입력 m의 값을 출력한다는 사실을 확인할 수 있었고,이는 상태 머신이 현재 상태에만 영향을 받고 있음을 이해할 수 있었다.? 상태 S1에서 출력 y는 입력 n 값을 출력하는가?⇒ 위의 사진은 앞선 S0 상태에서 i에 ‘1’을 가해주어 S1 상태로 천이시킨 다음, 입력 n에 따른 출력 y의 결과를 확인해본 것이다.여기서 잠깐, 위의 사진을 보면 i의 스위치가 0으로 되어 있는데 이는 i에 1을 가하여 상태 천이를 발생시킨 후 그 상태를유지시키고자 스위치를 0으로 내린 것이다. 따라서 현 상황은 S1 상태를 유지한 채, 입력 n과 출력 y를 확인해보고 있는 것임을알린다.무어 모델은 i가 ‘1’이면 S1 상태로 천이하여 출력 y가 항상 입력 n을 출력하게 한다. 위의 경우도 i에 1을 가해 S1 상태로천이시킨 후 입력 n에 0을 인가했더니 출력 y의 값도 0임을 확인할 수 있었다.⇒ 마지막으로 위의 사진은 i에 1을 인가해줌으로써 무어 모델의 상태를 S0에서 S1으로 천이시킨 다음, 입력 n에 1의 값을준 것이다. 마찬가지로 i의 스위치가 내려가 있는 것은 상태 천이를 시킨 후 그 상태를 유지시키고자 스위치를 off 시킨 것임을 알린다.다시 한 번 설명하자면, 무어 모델은 i가 ‘1’이면 S1 상태로 천이하여 출력 y가 항상 입력 n을 출력하게 하므로 위의표]· 순차논리 회로를 설계하기 위해 FSM도(상태도)를 작성하고, Verilog, VHDL로 설계하는 과정을 공부한다.· 설계된 순차논리 회로를 시뮬레이션으로 설계를 검증하고 실습키트에 동작을 확인한다.[이론내용]▣ 레지스터▷ 레지스터- 모든 순차논리회로는 하나 이상의 레지스터를 포함한다.- 레지스터는 클럭에 의해 값이 변하므로 순차논리회로의 하나이다.- 비동기 로드(load)레지스터 : load 신호가 클럭에 영향을 받지 않는다.- 비동기 클리어, 프리셋 레지스터 : 클리어, 프리셋 신호가 클럭에 영향을 받지않는다.- Verilog, VHDL의 인퍼런스(Inference; 추론, 추정)에 의해 동작을 표현한다.▷ 레지스터 동작 확인 순서- 레지스터는 동기식과 비동기식으로 동작하기 때문에 약간 복잡하다.- 첫 번째, 레지스터의 동기/비동기 load 입력 테스트√ 동기 load 입력 테스트- 우선 load에 ‘1’을 입력하고, d에 ‘0’과 ‘1’을 입력했을 때, q1에 같은 값이 출력되는지 확인한다.이때, 두 번째 레지스터의 pre와 clr에 ‘0’이 입력된 상태라면 (pre,clr 모두 disable 상태) q2도 같은 값이출력되는지 확인한다.√ 비동기 load 입력 테스트- 우선, load에 ‘1’을 입력, data 스위치에 ‘0’과 ‘1’을 입력했을 때, q1에 같은 출력이 되는지 확인한다.이 동작은 새로운 값을 레지스터에 저장하는 동작이다.- 두 번째, pre 신호와 clr 신호 테스트√ pre 동작 테스트 : d에 ‘0’을 입력하고, pre 입력 스위치를 누르면, 비동기 프리셋이므로 q2에 ‘1’출력된다.√ clear 동작 테스트 : 입력d에 ‘1’을 입력, clr 입력 스위치를 누르면, 비동기 클리어이므로 q2에 ‘0’이 출력된다.[실험결과]▣ 레지스터 동작 실험실제 Verilog를 이용한 레지스터 설계▷ 레지스터의 Verilog 표현▷ 레지스터의 Verilog 설계 컴파일 과정▷ 레지스터의 동작 확인? 레지스터의 동기 load 입력 테스트⇒ 위의d에 ‘1’을 입력하고 d에 ‘0’ 또는 ‘1’을 입력할 시 q1도 값은 값을 출력해야 한다. 이를 바탕으로위의 실험 결과를 진행해본 결과, load에 ‘1’을 가하고 d에 ‘0’을 입력하니 q1 또한 ‘0’의 값을 출력함을 확인할 수 있었다.이때, 두 번째 레지스터는 pre와 clr에 ‘0’이 입력되어 있는 상태였기 때문에 q2도 같은 ‘0’의 값을 출력하고 있음을 확인 할 수 있었다.⇒ 이어서 위의 사진은 레지스터의 동기 load 입력을 테스트해보기 위해 load에 ‘1’을 입력하고, d에 ‘1’을 입력하여 결과를확인해 본 것이다. 앞선 경우와 마찬가지로 load에 ‘1’을 입력하고 d에 ‘0’ 또는 ‘1’을 입력하면, q1도 값은 값을 출력해야하며, load에 ‘1’을 가하고 d에 ‘1’을 입력하니 q1 또한 ‘1’의 값을 출력함을 확인할 수 있었다.또한, 두 번째 레지스터의 pre와 clr에 ‘0’이 입력되어 있었기 때문에 q2도 같은 ‘1’의 값을 출력하고 있음을 확인 할 수 있었다.? 레지스터의 비동기 load 입력 테스트⇒ 위의 사진은 레지스터의 비동기 load 입력을 테스트해본 것이다. 우선 load에 ‘1’을 입력하고, data 스위치에 ‘0’을 입력해보았다.이론에 의하면, load에 ‘1’을 입력하고 data에 ‘0’ 또는 ‘1’을 입력할 시 q1도 값은 값을 출력해야 한다. 이를 바탕으로위의 실험 결과를 진행해본 결과, load에 ‘1’을 가하고 data에 ‘0’을 입력하니 q1 또한 ‘0’의 값을 출력함을 확인할 수 있었다.⇒ 마찬가지로 위의 사진은 레지스터의 비동기 load 입력을 테스트해본 것이며, load에 ‘1’을 입력하고 data에 ‘1’을 입력했을때 q1에 값은 값이 출력되는지를 확인해본 것이다. 결과적으로 load에 ‘1’을 가하고 data에 ‘1’을 입력하니 q1 또한 ‘1’의값을 출력하여 빛을 내고 있음을 확인할 수 있었다. 위의 비동기 load 입력 테스트 실험을 통해 새로운 값을 레지스터에저장하는 동작에 대한 이해를 할를 눌렀을 때 q2의 출력을확인해보았다. preset의 경우 클럭에 영향을 받지 않는 비동기 프리셋이기 때문에 d에 ‘0’을 입력하고 pre 입력 스위치를누르면 q2에 ‘1’의 값이 출력되어 빛을 내게 되며, 이를 위의 실험과 같이 확인할 수 있었다.? clr 신호 테스트⇒ 마지막으로 위의 사진은 clear의 동작을 테스트 해보기 위한 실험으로, d에 ‘1’을 입력하고, clr 입력 스위치를 눌렀을 때q2의 출력을 확인해 본 것이다. clear의 경우 클럭에 영향을 받지 않는 비동기 클리어이므로 d에 ‘1’을 입력하고 clr 입력스위치를 누르면 q2에 ‘0’의 값이 출력되어 빛이 나지 않음을 확인할 수 있었다.[결론 및 토의][Section 01] 간단한 상태도의 구현대부분의 디지털 논리회로는 조합논리회로와 순차논리회로를 함께 설계해야하는 경우가 많다. 보통 순차논리회로를 설계하려면 상태도와 상태표를 작성한 후 사용할 플립플롭에 맞게 입력하고, 현재 상태 및 다음 상태를 반영해 플립플롭의 입력 식을 세운 다음 회로를 설계해야 한다. 그러나 Verilog를 통해 상태도만 정확하게 작성한다면 순차논리회로를 설계할 수 있다. 이는 순차논리회로 설계를 진행함에 있어 실수를 줄여주고 설계 시간을 줄여줌으로써 효율적으로 설계를 진행할 수 있다는 장점이 있는 것이다.순차논리회로의 아랫부분은 플립플롭을 포함한 기억소자로, 윗부분은 조합논리 부분을 포함하고 있다. 이때 상태 머신이 현재 상태 및 입력에 영향을 받으면 밀리 머신이라고 하고, 현재 상태에만 영향을 받으면 무어 머신이라고 하는데 이는 곧 무어 머신의 설계에서 조금만 수정을 거치면 밀리 머신으로 설계할 수 있다는 것이다. 즉, 상태 천이를 표현하기에 앞서 다음과 같이 parameter를 사용하여 2개의 상태를 정의한다.그 다음 무어 모델의 경우, 상태 천이 표현을 case~endcase 문을 사용하여 다음과 같이 설계할 수 있다.위의 코드를 해석해보면 다음과 같다.S0 상태에서 i가 1이면 다음 상태(S1)로 천이하다.
    공학/기술| 2021.06.10| 10페이지| 3,000원| 조회(264)
    미리보기
  • 오실로스코프 결과레포트
    실험 17 결과보고서이름 : 신직수학과 : 전자공학과 / 학번 : 201533933【 오실로스코프 】◆ 실험개요본 실험에서는 오실로스코프를 구성하는 네 가지 주요 제어부에 대해 이해하고 설명하며, 직류전원공급기(DC power supply)에서 나오는 직류전압을 스코프로 측정해본다.◆ 실험데이터표 17-2전원공급기설정값스코프VOLTS/DIV 값화면에서움직이는 칸 수스코프측정값1.0 V0.2 V/div5.0 div1.0 V2.5 V1.0 V/div2.5 div2.57 V4.5 V1.0 V/div4.5 div4.61 V8.3 V5.0 V/div1.7 div8.44 V◆ 결과분석 및 결론본 실험은 오실로스코프를 구성하는 네 가지 주요 제어부(표시제어부, 수직축 제어부, 수평축 제어부, 트리거 제어부)를 이해하고 설명하며, 오실로스코프의 기본적인 사용법을 익혀 직류전원공급기에서 나오는 직류전압을 스코프로 측정해보고자 한다. 실험 진행을 위해 오실로스코프와 프로브, 직류전원공급기를 준비한다.실험을 진행하기에 앞서 스코프의 앞쪽 판에 달려있는 여러 조정손잡이와 스위치의 기능을 다시 한 번 살펴보며, 오실로스코프의 주요 제어부들이 하는 역할과 기능을 이해하는 시간을 가졌다.· 표시 제어부(display control section) : 전압신호를 측정할 때 나타는 선(이 선을 트레이스 또는 휘선 이라고 함)의 밝기, 초점 등을 잘 맞추어 스코프 화면에 잘 표시되도록 조정하는 제어부· 수직축 제어부(vertical control section) : 측정전압신호의 수직축(y축) 성분인 전압 크기를 조정하는 제어부· 수평축 제어부(horizontal control section) : 측정전압신호의 수평축(x축) 성분인 시간 폭을 조정하는 제어부· 트리거 제어부(trigger control section) : 화면에 측정되는 신호파형을 잘 관찰하기 위해 측정신호가 좌우로 흔들리지 않고 멈춰있도록 하는 제어부이제 스코프를 켜고 채널을 CH 1으로 선택한 후, SEC/DIV를 0.1 ms/div로 트리거 MODE를 AUTO로 맞추었다. 그러자 스코프 화면에 밝은 수평선(휘선)이 나타남을 확인할 수 있었다.본격적으로 실험을 진행하고자 직류전원공급기를 켜 출력전압이 1.0 V가 되도록 맞추었다. 그리고 수직축 제어부의 입력결합방식 선택스위치인 COUPLING을 GND로 맞추어 채널 입력이 끊어져 스코프 안으로 들어가지 못하게 하였다. 수직축 POSITION 손잡이를 돌려 휘선이 스코프화면 아래쪽 줄에 놓이도록 맞추었는데 이는 전압측정의 기준이 되는 기준접지(0 V)가 되기 때문이다.CH 1의 VOLTS/DIV을 0.2 V/div로 맞추고, 전원공급기의 (+)단자에 프로브의 팁 단자를, (-)단자에 프로브의 접지 단자를 연결하였다. 이때 화면의 휘선이 몇 칸 올라가는지를 확인하였다. 0.2 V/div에 의해 1.0 V가 측정되기 위해서는 5 div(칸)이 올라가야하는 이론을 바탕으로 실험을 확인한 결과 화면의 휘선은 기준점으로부터 5칸 위로 올라간 것을 확인할 수 있었다. 전원공급기의 출력전압을 2.5 V, 4.5 V, 8.3 V씩 차례대로 바꿔주며 그에 맞는 스코프 VOLTS/DIV 값을 설정해 휘선이 얼마만큼 움직였는지 그 칸수를 확인해보았다. 본 실험 데이터의 값은 위의 표를 참고하길 바란다. 여기서 중요한 점은 측정값을 더욱 정확하게 읽으려면 휘선이 될 수 있는 대로 많이 움직여 기준접지위치에서 멀리 벗어날 수 있도록 VOLTS/DIV 값을 맞추어 주어야 한다는 것이다. 실험을 반복하며 발견한 사실은 ‘스코프 VOLTS/DIV × 화면에서 움직인 칸수 DIV = 전원공급기의 출려전압 V’가 성립하다는 것이다.전원공급기설정값스코프측정값오차율백분율`오차`=` {R _{측정} -R _{표시}} over {R _{표시}} TIMES 100`[%]1.0 V1.0 V0 %2.5 V2.57 V2.8 %4.5 V4.61 V2.44 %8.3 V8.44 V1.67 %스코프로 전원공급기의 출력전압을 측정하면 스코프 화면에 나타나는 휘선 뿐만 아니라 스코프가 측정한 값도 알 수 있는데, 이때 스코프로 측정한 값은 계측기로 측정한 값보다 3% 이상의 오차가 발생하면 안 된다.위의 표를 통해서 알 수 있듯이, 실제 전원공급기의 출력전압과 스코프로 측정한 전압값 사이에 존재하는 오차는 3%가 넘지 않음을 알 수 있었고, 이는 실험이 원만하게 진행되었음을 증명하기도 한다.
    공학/기술| 2021.05.12| 3페이지| 3,000원| 조회(348)
    미리보기
전체보기
받은후기 21
21개 리뷰 평점
  • A+최고예요
    17
  • A좋아요
    2
  • B괜찮아요
    1
  • C아쉬워요
    0
  • D별로예요
    1
전체보기
해캠 AI 챗봇과 대화하기
챗봇으로 간편하게 상담해보세요.
2026년 04월 28일 화요일
AI 챗봇
안녕하세요. 해피캠퍼스 AI 챗봇입니다. 무엇이 궁금하신가요?
11:03 오전
문서 초안을 생성해주는 EasyAI
안녕하세요 해피캠퍼스의 20년의 운영 노하우를 이용하여 당신만의 초안을 만들어주는 EasyAI 입니다.
저는 아래와 같이 작업을 도와드립니다.
- 주제만 입력하면 AI가 방대한 정보를 재가공하여, 최적의 목차와 내용을 자동으로 만들어 드립니다.
- 장문의 콘텐츠를 쉽고 빠르게 작성해 드립니다.
- 스토어에서 무료 이용권를 계정별로 1회 발급 받을 수 있습니다. 지금 바로 체험해 보세요!
이런 주제들을 입력해 보세요.
- 유아에게 적합한 문학작품의 기준과 특성
- 한국인의 가치관 중에서 정신적 가치관을 이루는 것들을 문화적 문법으로 정리하고, 현대한국사회에서 일어나는 사건과 사고를 비교하여 자신의 의견으로 기술하세요
- 작별인사 독후감