리눅에서는 일반 윈도우와달리 파일을 가리키는 용어가 명확히 구분되어있다. 윈도우에서는 내pc를 폴더, 파일 등 어떻게 불러도 상관없지만 리눅스에서는 이를 디렉토리라고 부르며 .txt같은 문서를 파일이라고 한다. 따라서 우리는 명령어를 통해 디렉토리라는 방을 들어가고 나가게 된다. 이제부터 본격적으로 리눅스 명령어를 알아보자. 디렉토리 확인, 이동, 만들기 1. pwd : 현재 작업위치 기본 터미널창에서 pwd라고 치게되면 현재 내 디렉토리의 위치를 알려준다. 위의 뜻은 현재 내 위치는 home안에 pi라는 방(디렉토리)에 있다 2. 1) ls : 현재 디렉토리에 있는 모든 디렉토리 및 파일을 보여줘라 2) ls -a : 현재 디렉토리에 있는 모든 디렉토리 및 파일과 숨겨진파일까지 모두 보여줘라 3) ls..
매트랩에서 이미지프로세싱하는법을 간단히 배웠었다. 영상처리에 관해 교수님께서 다양한 말씀을 해 주셔서 라즈베리파이와 카메라로 영상처리를 해보고 싶었다. 국내 자료로 찾기 힘들어서 유튜브에 영어로 검색해보니 많은 자료를 찾을 수 있었다. 이번 포스팅에서는 사물인식하는 과정만 다루고 차선검출은 다음 포스팅에서 다뤄보자. 'Tensor Flow'란 무엇인가? Tensor Flow는 구글에서 개발한 오픈소스 소프트웨어 기계학습 라이브러리이다. 해당 라이브러리로 인공지능, 머신러닝 등 다양한 작업을 할 수 있다. 이번 포스팅에서는 'Tensor Flow Lite'를 사용하는데 기존 텐서플로우에서 임베디드장치에 사용 할 수 있도록 경량화시킨 버전이다. 'Open CV'란 무엇인가? Open CV는 인텔에서 개발한 ..
우리집에 7년정도 된 오래된 프린터(ML-2160)가 있다. 해당 모델은 PC에 USB연결을 해야 되고 연결된 PC에서밖에 프린트를 하지 못한다. 그래서 가족중 한명이 프린트를 하기 위해서는 해당 PC로 파일을 옮겨야하는 번거로운 과정을 거친다. 이런 불편함을 해결하기 위해 라즈베리파이랑 프린터를 연결해서 공용네트워크로 어디서든 프린트를 할 수 있도록 만들어 보자. 준비물 라즈베리파이 USB프린터 네트워크 ex) 공유기(와이파이), 이더넷(유선) 파이설정(터미널) 1. 라즈베리파이 버전 최신화 최신버전으로 update & upgrade 진행 sudo apt update sudo apt full-upgrade 2. CUPS 설치 CUPS란 Common Unix Print System의 약자로 컴퓨터(라즈베..
FTDI란 데이터의 형태를 변환 후 전송하는 모듈이다. 서로다른 데이터 형태끼리 통신할때 사용되며 이번 포스팅은 회로설계를 다룰것이므로 자세한 동작 원리는 마이크로프로세서 포스팅에서 다루자. 해당 모듈이 사용되는 대표적인 경우는 바로 '아두이노 프로미니'에 데이터를 주입할 때 이다. 아두이노 프로 미니는 다음과 같이 생겼으며 눈씻고 찾아봐도 USB연결하는 단자를 찾아볼 수 없다. 이에 데이터 주입을 하기 위해서 점퍼선을 UART모듈과 연결해서 데이터를 주입해야 한다. 처음 PcB설계를 하기 때문에 시중에 나와있는 FTDI의 데이터시트를 자세히 보면서 따라 만들어보자. FTDI의 데이터시트를 보면 FT232R로 만들 수 있는 다양한 회로가 나오지만 그 중 두가지 기능을 합친 회로를 만들어 보자. 첫번째로 ..
하계방학 마지막 비교과 수업PcB를 배워보자. PC, 스마트폰, 선풍기, 에어컨 등 우리주변의 전자기기중 PcB가 없는제품은 없다. 사실상 전자제품의 마지막은 PcB라고 해도 과언이 아니다. 반도체 칩의 설계를 기가막히게 하고 회로구성을 완벽히 구성했다고 해도 PcB가 없으면 제품으로 양산 할 수 없기 때문이다. 그렇다면 PcB란 어떻게 생겨먹은 놈일까? 위와같이 흔히 전자기기를 뜯어보면 초록색기판으로 된 판을 PcB라고 한다. 얼마전 데스크탑 조립할때도 메인보드, 램, SSD전부 PcB로 이루어져 있었다. 심지어 PcB가 초록색이라 국민램 삼성전자의 DDR4의 별명도 시금치이다. PcB의 역할은 기판 위에 많은 칩들이 서로 조화를 이루어 최적의 성능을 발휘 할 수 있도록 하는 교통로 역할이다. 또, P..
얼마전 라즈베리파이를 무작정 주문했다. 그동안 아두이노만 해오고 라즈베리파이는 어려워보여서 나중에 하려고 했지만 아두이노가 질려버렸다.... 그래서 새로운 무언가를 하고싶어서 계획도 없이 충동구매ㅋㅋㅋㅋ 막상 라즈베리파이로 무엇을 해야할지 몰라서 3일동안 구글링만 했다. 라즈베리파이 활용, 프로젝트 등 많은 정보를 찾아봤지만 진입장벽이 생각보다 높았다.... (리눅스, 파이썬 안배움....) 그중 카메라를 이용해서 이미지프로세싱하는것이 눈에 띄어서 해보기로 했다. 처음 주문할때 같이 주문한 5MP짜리 카메라를 연결하려고 꺼낸 순간 책상에서 손이 미끄러졌다. 그 짧은 순간에 카메라가 책상에서 바닥으로 떨어지는 장면이 생생하다...... '털거더걱' 쎄한 느낌이 들었다. 카메라 우측상단 초록색 파편이 튀었다..
어느날 아버지께서 부르셨다. "동현아~ 컴퓨터 조립좀 해주라~" 명색이 공대생이지만 데스크탑을 맞춰본적은 한번도 없어서 첫 조립에 설레면서도 두려웠다. 그러나 졸업할때까지도 컴퓨터 조립할줄도 모르는 공대생이라고 불리기에는 쪽팔려서 직접 부품도 알아보고 조립하기로 했다. 아버지께서 게임, 영상작업 등 무거운 프로그램을 돌리는 것이 아니라 간단한 사무용PC 정도로 맞출 생각이였다. 예산은 40~50이라고 하셔서 그에 맞게 견적을 맞춰보았다. 견적 CPU : AMD 라이젠3200G 메인보드 : ASUS EX A320M-GAMING 메모리 : 삼성전자 DDR4-3200(4GB) SSD : 마이크론 MX500 파워 : 마이크로닉스 Classic II 500W 케이스 : 앱코 NCORE ---------------..
레지스터 구조 앞서 AVR의 범용레지스터는 R0 ~ R31 총 32개라고 얘기했다. 레지스터 하나당 8비트의 공간이 있으며 각각의 비트에 값을 저장 할 수 있도록 플립플롭(기억회로)으로 구성되어 있다. 따라서 하나의 레지스터에 8개의 플립플롭이 구성되어 있고 AVR 범용레지스터에만 256개가 내장되어있다. MCU구조 우리가 컴퓨터로 게임, 영상시청, 문서작업 등 다양한 작업을 할 때 CPU가 매우 대단한 연산을 하는 것 같지만 사실 0과 1로 더하기, 빼기 연산밖에 하지 않는다. (0과 1만 더하고 빼는데 이런 작업을 할 수 있다는게 대단하긴 하지...) 이런 기본적인 연산이 어떻게 이루어지는지 MCU의 내부구조를 확인해보자. 우선 "ADD Rd, Rr" 이라는 명령을 내리면 레지스터 두개가 사용되며 더..
앞에서 변수를 선언하고 연산을 했다면 내부적으로 어떻게 연산이 이루어지는지 알아보자. AVR은 분명 8비트 운영체제인데 변수를 char로 선언하면 8비트에 딱 맞게 저장 할 수 있지만 이보다 큰 자료형은 저장공간을 어떻게 할당하며 내부 연산이 이루어질까? 예를들어 short a;라는 변수를 만들었다고 가정하자. short는 16비트라 하나의 레지스터(8비트) 안에 들어가지 못한다. 이를 해결하기 위해서는 다음 레지스터 공간을 같이 할당해주면 된다. 이와같이 short자료형은 R0, R1을 동시에 할당해 주면 된다. 덧셈 연산은 각각의 MSB부와 LSB부를 맞춰서 연산을 한다. 내부적으로 위와 같은 연산이 이루어짐을 결과를 통해 확인 할 수 있다. 그러나 위의 코드만 작성을 하면 문제점이 발생한다. 예를들..
우리가 C언어에서 변수를 선언 할 때 어떤 메모리 공간에 변수를 넣을지 모른 상태로 그냥 선언을 한다. 그러나 메모리단위로 제어를 하는 MCU에서는 특정 공간을 지정 후 변수선언을 하든지 연산을 해야한다. 기본적인 어셈블리명령어와 문법을 알아보자. 1. LDI Rd, K : 상수 K를 Rd에 대입(Load Immediate, Rd
컴퓨터, 전자, 전기, 기계 가릴것 없이 공학도라면 피할 수 없는 마이크로프로세서(마이크로컨트롤러)를 배워보자. Q. 마이크로프로세서란 무엇인가? A. 마이크로프로세서란 초소형 연산처리장치이다. 우리가 흔히 사용하는 PC, 스마트폰 안에 들어있는 연산처리장치 즉 CPU가 마이크로프로세서이다. 그러나 이런 CPU는 단독적으로 사용이 불가능하다. 칩이 특정기능을 사용 수 있도록 명령을 내려야 하고 결과를 확인 할 수 있어야 한다. 마이크로프로세서에 입력과 출력 인터페이스를 결합한 칩을 마이크로컨트롤러(MCU)라고 한다. 따라서 엄밀히 말하자면 우리는 칩셋에 입출력을 전부 수행하는 마이크로컨트롤러를 배운다고 하는것이 맞는 표현이다. 처음 프로그래밍을 배울 때 보통 C, 파이썬 등을 배웠을 것이다. (필자는 C..
매트랩 비교과 마지막 수업날 교수님께서 이미지 프로세싱에 관해 짧게 말씀 해주셨다. 요즘 핫한 자율주행에서 이용되는 이미지 처리 방식도 매트랩에서 간단하게 구현할 수 있다. 예를들어 자동차 범퍼쪽에 카메라를 달고 도로사진을 찍는다고 가정해 보자. 카메라로 찍힌 화면에는 차선, 앞차, 가로등, 사람 등 수많은 요소들이 보일 것이다. 그중 차선만 골라내도록 이미지프로세싱을 할 수 있다는 얘기를 하셔서 심심하니까 한번 해보자. 문제해결방법 1. 우선 인터넷에서 도로사진을 다운받은 후 매트랩에서 호출한다. %% 이미지 불러오기 I=imread('road.jpg'); imshow(I); 이 사진은 r, g, b가 전부 혼합되어 있어서 곧바로 도로만 구분하기란 불가능 하다. 2. 따라서 해당 이미지에서 r, g, ..
2021년 7월 11일 너무너무너무 더운 여름이다. 선풍기가 없으면 잠이 들수 없는 지경이다. 에어컨만큼은 아니지만 어느정도 더위를 날려주는 선풍기의 발명은 정말 고맙다. 그러나 우리가 위치를 이동하거나 다른곳에 볼일이 있으면 선풍기를 옮겨야 하거나 공간에 제약이 있다. 이런 불편함을 해소하기 위해 자동으로 방향을 틀어주는 선풍기를 아두이노로 통해 만들어봐야겠다는 생각을 했다. 이것을 만들기 위한 정보를 찾던 도중 유튜브에서 마침 적당한 영상을 찾았다. 간단히 초음파센서와 서보모터를 이용해서 구현을 하는 것이였고 더 많은 정보를 얻기 위해 댓글을 확인 한 순간 어이가 없었다. 그 이유는 바로 소스코드를 무려 5만원주고 팔고있었으며 수많은 사람들이 그럼에도 불구하고 기꺼이 구매하려는 것이였다. 별로 어려워..
지금까지 우리는 신호를 시간축에 따른 결과값 즉 time domain관점에서 해석했다. 시간에 대한 해석은 그저 파형이 어떻게 생겼는지 관측만 가능 할 뿐 해당 신호의 물리량 및 에너지를 확인 할 수 없다. 이런 신호를 가공하고 처리하기 위해서는 다양한 방법이 있지만 이번 시간에는 여러 방법중 하나인 푸리에 변환(Fourier Transform)에 관해 이야기 하겠다. 푸리에 변환(Fourier Transform)이란? 특정 신호를 시간에 대한 해석이 아닌 주파수에 대한 해석을 하기 위한 변환과정이다. 즉 시간에 대한 그래프는 x축 : 시간(time), y축 : 크기(magnitude)로 표현하는 반면 주파수에 대한 그래프는 x축 : 주파수(frequenct), y축 : 크기 로 나타낸다. 이런 변환을 ..
지난번엔 시각적으로 이미지 처리&분석을 했다면 이번에는 청각으로 넘어가 보자. 우리가 듣는 모든 소리는 파형과 진동수를 갖고 있으며 사인, 코사인과 진동수의 조합으로 모든 소리를 재현할 수 있다. 우리가 흔히 접할 수 있는 계이름(도 레 미 파 솔 라 시)도 각각의 주파수(=진동수)를 갖고있다. 도 262 Hz 레 294 Hz 미 330 Hz 파 349 Hz 솔 392 Hz 라 440 Hz 시 494 Hz (높은)도 523 Hz (소수점 생략) 가장 기본적인 사인함수인 sin(2*pi*freq*t)형태로 소리를 출력할 수 있다. 또한 같은 사인함수지만 주파수만 다르게 한 후 합하면 화음을 연출 할 수도 있다. ex) sin(2*pi*262*t) + sin(2*pi*330*t) + sin(2*pi*392*..
우리가 화면상에서 보는 이미지색상은 전부 R, G, B의 조합으로 이루어져 있다. 조합이 0 ~ 255까지 총 256개로 모든 색을 표현할 수 있다. 이러한 색상요소 하나하나를 픽셀이라고 하는데 모든 이미지는 픽셀로 이루어진 디지털 신호이다. 이미지 픽셀은 마치 행렬처럼 이루어져 있고 이를 화면상에 숫자로 표현할 수 있다. 이번 글에서는 이미지를 갖고 픽셀이 어떻게 이루어져 있는지, 무슨색깔이 가장 많이 이루어져있는지 간단히 해석하는법을 포스팅하겠다. 이미지 분석할 대상은 바로 우리집 최강 귀염댕이 몰티즈 힝둥이다. 우선 매트랩 프로그램에서 이미지를 불러와야 하는데 이때 사용하는 함수가 imread(' ')이다 I=imread('dog.jpg'); 해당 이미지를 불러오니까 정보가 1440x1080x3이라..
그래프를 단순히 화면에 띄운다고 일이 끝난것이 아니다. 이 그래프가 어떤 모델을 그래프화 한건지, x, y축은 무엇을 나타내는지, 필요에 따라 그래프의 색상도 바꿔야 하는 경우도 있다. 이때 각각의 옵션을 변경할 수 있는 명령어를 알아보자. 1. 그래프 제목 설정 1) title(' '); ' '안에 문자를 입력하면 그래프의 제목을 설정할 수 있다. 2) xlabel(' ') x축 제목 설정 3) ylabel(' ') y축 제목 설정 2. 그래프 표현 방법 1) plot(x, y) 2D 그래프 그리기 2) mesh(x, y, z) 3D 그래프 그리기 3) surf(x, y, z) 3D 그래프 그려서 색 채우기 4) contour(x, y, z) z값을 등고선 그래프로 그리기 5) plotc(), mesh..
3D그래프 그리는 방법은 2차원 평면 그래프 그리는 방법과 별반 차이가 없다. 그저 z축 하나만 추가된 형태라 변수와 for문을 하나씩 추가해주고 3차원 그래프로 출력하기 위해 plot()함수 대신 surf()함수를 작성해 준다. 2차원 평면을 생각해보면 x는 input 이고 y는 x에 의한 output이다. 따라서 input x만 변화해주면 output y는 자동적으로 변하게 되었지만 이를 3차원 으로 확장하면 x, y 둘다 input으로 설정하고 두 input x, y에 관한 output변수를 따로 생성해 주면 된다. 이번 프로그램에서는 output변수를 Gr(=Graph)로 설정해 주었다. len_x=100; len_y=100; x=linspace(-1,1,len_x); y=linspace(-1,1..
앞서 2차원 그래프를 그릴 때 하나의 창에 하나의 그래프만 띄웠지만 여러 그래프를 띄우고 싶을 때는 어떻게 할까? plot()으로 그래프를 띄우기 전에 subplot()함수로 지정된 공간에 특정 그래프를 띄울 수 있다. 예를 들어 subplot(3, 3, 2)라고 선언을 했다고 가정하자. 이는 창에 3x3형태의 공간을 할당한 상태이며 (1, 2)의 자리에 그래프를 띄운다는 뜻이다. 또 다른 예로 subplot(3, 3, 7)라고 선언을 하면 (3, 1)의 자리에 그래프를 띄운다. 이렇게 스크립트에서 식을 여러개 만들고 for문을 통해 연산을 계속 해주면 하나의 창에 여러 그래프를 띄울 수 있다. t=linspace(-1,1,100); y1=zeros(1,100); y2=zeros(1,100); y3=ze..
지금까지 vector만들기를 한 방식은 명령창에서 값을 바로 만들었다. 그러나 실제로 이렇게 바로 값을 대입하는것은 의미가 없기 때문에 식을 이용해서 계산을 할 수 있도록 스크립트 창에서 직접 프로그래밍을 해보자. 매트랩에서 기본적으로 function이라는 내장함수를 갖고 있기 때문에 쉽게 식을 작성 할 수 있다. function[c, d, e, f]=oper_f(a,b) 라는 함수를 선언을 했다고 가정하자. 이때, oper_f는 함수명이며 (a, b)는 변수이다. function명령을 내린 순간부터 프로그램은 자동으로 함수임을 인식한다. 대괄호 안에있는 c, d, e, f는 각각 하나의 식이며 서로 다른 식으로 정의할 수 있다. 예를들어 c=a+b, d=a-b, e=a*b, f=a/b와 같이 서로 다른..