본문 바로가기

전체 글876

SMD 타입 저항 읽는법 3 digit 혹은 4 digit 저항은 마지막 숫자가 10의 승수로 앞자리 숫자들과 곱하면 되고, 중간에 R/K/M이 오는 저항은 뒷부분이 소수점이하 자리로 생각하면 된다.    출처 :https://www.youtube.com/watch?v=tjISrZy5S9chttps://www.youtube.com/watch?v=ziJGxqbn45A 2024. 7. 28.
아두이노 ] VIN으로 외부전원을 공급하는 동시에 USB 케이블을 연결해도 될까? 아두이노는 USB 포트를 통해 PC로부터 5V 전원을 공급받을 수 있는데 VIN 또는 배럴잭을 통해 외부 전원을 공급하는 동시에 USB 케이블을 연결해도 괜찮을까? 결론만 말하면 괜찮다이다. 다음 아두이노 전원쪽 회로를 보면 VIN이 1/2 전압분배를 거쳐 비교기의 +단자로 들어가고 비교기 -단자에는 3.3V 전압이 인가되는데 비교기는 +입력이 -입력보다 높을때 출력이 높은상태가 되고, +입력이 -입력보다 낮은 상태일 때 출력이 낮은상태가 된다. 그 다음 비교기 출력 MOSFET Gate를 제어하는데 출력이 높은상태인 경우 P 채널 MOSFET이 꺼지게 되어 USBVCC 전원을 차단하게 된다. 즉, VIN과 USB가 모두 연결된 상태일 때 VIN이 6.6V를 초과하면 공급전원이 스위칭된다. 2024. 7. 26.
전원 어댑터 극성 구분하기 Positive polarity, Negative polarity 전원 어댑터 플러그의 극성은 센터 포지티브, 센터 네가티브 두 종류가 있다. 센터의 중앙 핀이 양극(+)이냐 음극(-)이냐를 가지고 구분하며 센터를 둘러싼 외부 금속 실린더(배럴)은 반대의 극성을 갖는다.    이를 식별하는 가장 쉬운 방법은 어댑터의 라벨을 확인하는 것이고 일반적으로 유통되는 대부분의 전원 어댑터가 센터 포지티브 플러그를 사용한다.   하지만 여전히 센터 네거티브 플러그를 사용하는 장치나 어댑터도 존재하며 극성을 잘못 연결한 경우 장치가 손상될 수 있으므로 주의가 필요하다. 2024. 7. 24.
Noctua 4-pin PWM fan 제어하기 with 아두이노 Datasheet      FAN Model & Specification NOCTUA NF-P14s redux-1200 PWM      Wiring   Blue 라인을 통해 PWM으로 속도제어를 할 수 있고, Green 라인을 통해 타코미터 신호를 받아 팬 속도를 알 수 있다.        PWM Speed Control 일단 PWM 신호 핀 없이 +12V랑 GND를 연결하면 팬이 최고속도로 도는데 아마도 PWM signal 입력을 받는쪽이 내부적으로 풀업이 되있나보다.  PWM 주파수는 25kHz이고 듀티를 0~100% 사이로 제어하면 된다.처음엔 digitalWrite랑 delayMicroseconds를 써서 PWM을 만들까 했는데 25kHz는 40us정도니까 delayMicroseconds로 듀티를.. 2024. 7. 22.
dB(데시벨) dB란?데시벨(dB)은 신호의 세기의 상대적인 차이를 표현하기 위해 사용되는 단위로 전자 공학 분야에서는 전력, 전압의 이득(gain)이나 감쇠(attenuation)을 표현할 때 많이 사용한다.   dB의 정의두 신호의 출력/입력 비율에 대한 밑이 10인 상용로그에 10 또는 20을 곱한 값이다. 전력 비율일 경우 10을 곱하고, 전압 또는 전류 비율일 경우 20을 곱한다. 전력은 10배인데 전압은 10배를 곱해주는 이유는 V=IR, P=VI 이므로 P=V^2/R 으로 전력(P)은 전압(V)의 제곱에 비례하기 때문이다. 이렇게 입력 신호 대비 출력 신호의 비율을 로그 스케일인 dB단위로 나타내면 큰 범위의 값을 간단히 표현할 수 있고 시스템에 여러 개의 증폭기나 감쇠기가 있을 때 각 이득(dB)을 덧셈.. 2024. 7. 6.
winmm API 사용하여 WAV 파일 재생하기 winmm 은 Windows Multimedia의 약자로 해당 라이브러리의 API를 사용해 WAV 형식의 오디오 파일을 재생할 수 있다.  #include #include // mmsystem.h 포함#include // winmm.lib 링크#pragma comment(lib, "winmm.lib")int main() { // wav 파일 경로 const char* filePath = "C:\\Users\\jo\\Downloads\\warning.wav"; // wav 파일 동기식 재생 MMRESULT result = PlaySound(filePath, NULL, SND_FILENAME); if (!result) { printf("PlaySound Error\n"); return 1; } print.. 2024. 7. 4.
TMS320F28388D ] Input Qualification TMS320F28388D DSP GPIO 모듈에 있는 Input Qualification 회로는 말 그대로 신호가 유효한가 Qualification 하는 회로이다.  Inpuq Qualification 기능을 사용하면 GPIO 포트로 입력되는 신호를 지정된 횟수만큼 샘플링해서 로직이 모두 일치하는 경우에만 신호 변화를 전달하고 그렇지 않은 경우는 노이즈로 취급해 무시하게 된다.  다음 블락도를 보자. 외부 GPIO 입력 핀에 신호가 전달되면 DSP SYSCLK와 동기되어 Qualification 회로에 전달되고, Qualification 회로는 순간적인 글리치를 필터링하고 내보내는 역할을 한다.   사용자는 샘플 수(GPxQSEL)와 샘플링 주기(GPxCTRL) 파라미터를 설정할 수 있고, 이를 통해 총.. 2024. 7. 2.
Amplitude와 Magnitude의 차이 Amplitude(진폭)는 어떤 주기적 신호가 중심 위치로부터 최대 얼마나 변위하는지 나타낸다.Magnitude(크기)는 어떤 주기적 신호의 절대적 크기를 의미한다. Amplitude는 방향을 고려한 vector이고 Time domain에서 주로 사용한다.Magnitude는 방향에 관계없는 scalar이고 Frequency domain에서 주로 사용한다. Amplitude의 예시 : 파도의 크기 측정Magnidue의 예시 : 지진의 규모 측정 Amplitude Magnitude   한편 Magnitude라는 용어는 복소수의 절대값을 의미하기도 한다. z = a + bi인 복소수가 있을 때 절대값은 다음과 같이 구할 수 있으며, 복소수 z가 복소평면에서 원점으로부터 얼마나 떨어져 있는지를 나타낸다. Mag.. 2024. 6. 28.
POSIX thread, mutex 사용법 Pthread는 모든 유닉스 계열 POSIX 시스템에서, 일반적으로 이용되는 라이브러리로 병렬적으로 작동하는 소프트웨어 작성을 위해 사용할 수 있다. 소스코드에선 #include 로 헤더를 포함하고 컴파일 시 -pthread 옵션을 붙여 컴파일 한다.   주요 thread 함수  pthread_create새로운 스레드를 생성하고 지정된 함수 start_routine을 실행한다.int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);pthread_t *thread: 생성된 스레드의 식별자를 저장할 포인터, 해당 식별자를 통해 이후 스레드를 제어할 수 있다.const .. 2024. 6. 26.
C] epoll 사용법 epoll이란?epoll은 리눅스 커널 2.5.44부터 도입된 Multiplexing IO 함수로 다수의 파일 디스크립터를 모니터링 할 때 효율적이다. epoll은 epoll_event 구조체와 다음의 세 가지 주요 함수로 구성된다.epoll_create : epoll 파일 디스크립터 저장소 생성epoll_ctl : 저장소에 파일 디스크립터 등록 및 삭제epoll_wait : 파일 디스크립터의 변화를 대기   select와의 차이점select의 경우 매번 호출할 때마다 파일 디스크립터 집합을 사용자 공간에서 커널 공간으로 복사해야 하지만 epoll는 한 번 설정한 파일 디스크립터 집합을 커널 공간에서 유지하여 불필요한 복사를 방지한다. 따라서 많은 수의 파일 디스크립터를 다룰 때 epoll이 더욱 효율적.. 2024. 6. 24.
Makefile 작성법 Makefile이란?Makefile은 프로젝트의 컴파일, 빌드 및 기타 작업을 자동화하는데 사용되는 파일로 make라는 유틸리티와 함께 사용된다. Makefile은 일련의 규칙과 지시를 포함하고 있어서 해당 규칙에 맞게 작성하면 소스코드를 컴파일하는 과정을 간소화할 수 있다.   왜 Makefile이 필요한가?자동화: Makefile을 사용하면 여러 파일을 컴파일하고 링크하는 과정을 자동화할 수 있다.효율성: 의존성 파일의 타임스탬프를 비교하여 변경된 파일만 다시 컴파일하므로 빌드 시간을 줄여준다.재사용성: 프로젝트마다 반복되는 빌드 작업을 쉽게 재사용할 수 있다.일관성: 모든 개발자가 동일한 빌드 과정을 따르도록 할 수 있다.  Makefile 작성법을 익히기 위한 예제 프로젝트  디렉토리 구성/pro.. 2024. 6. 22.
VSCode ] 리눅스 시스템에 SSH로 연결하여 원격 작업하기 먼저 해당 Linux 시스템에 SSH가 설치되고 enabled 상태여야 한다. $ sudo apt update$ sudo apt install openssh-server$ sudo systemctl status ssh  원격작업할 PC에서 VS Code 확장 프로그램 Remote Development를 설치한다.   설치 후 우측 Remote Development 아이콘을 누른다.   F1을 눌러 팔레트를 열고 Remote-SSH를 검색한 후 Add New SSH Host를 선택한다. "ssh userID@HostIP" 형식으로 입력한다. SSH configuration file 경로를 선택한다.  아래와 같이 config 파일이 생성된다. 다시 F1을 눌러 명령 팔레트를 열고 Remote-SSH를 검색.. 2024. 6. 20.
STM32 ] GY-61(ADXL335) 3축 가속도센서 보드 : STM32F429ZI STM32보드에서 GY-61(ADXL335) 3축 가속도센서 값을 측정해봤다.  GY-61(ADXL335) 보통 아두이노랑 많이 쓰이는 MPU6050 같은 모듈은 안에 ADC가 내장되어 있어서 디지털 인터페이스로 값을 읽는데 이 모듈 같은 경우 각 축의 가속도 값을 아날로그로 출력한다. 데이터시트를 확인해보면 작동 전압 3V~5V이고 아날로그 출력 전압의 센터 값은 1.65V이다. Full scale 센싱 범위가 +/-3g이고 Sensitivity는 300mv/g니까 아날로그 출력은 0.75V에서 2.55V 사이로 스윙할 것이다. Sensitivity of accuracy +/-10%이다.  핀 아웃은 다음과 같다.       ADC다음은 STM32 보드의 데이터시트와 매뉴.. 2024. 6. 18.
라즈베리 파이에서 ll 명령어 사용하기 라즈비안에선 디폴트로 ll이 alias 등록이 안되어 다음과 같이 에디터를 열어 수정한다.  $ cd ~$ vim .bashrc  파일 중간에 alias 추가alias ll='ls -alF' 변경사항을 즉시 적용하기 위해 다시 로드source ~/.bashrc    참고로 ls 명령어의 각 옵션이 뜻하는 건 다음과 같다.-a: 숨김 파일(파일 이름이 마침표 .로 시작하는 파일)을 포함해 모든 파일을 표시한다.-l: 파일에 대한 상세 정보를 길게(long format) 출력한다. 여기에는 파일의 권한, 소유자, 그룹, 크기, 마지막 수정 시간, 그리고 파일 이름이 포함된다.-F: 파일 이름 끝에 파일 타입을 나타내는 기호를 추가한다. 예를 들어, 디렉토리는 /, 실행 파일은 *, 심볼릭 링크는 @와 같이 .. 2024. 6. 17.
Jetson Xavier NX ] NoMachine으로 원격 제어하기 젯슨 리눅스에는 vino VNC 서버가 기본 내장되어 있어서 공식문서에도 VNC를 통한 원격제어 방법을 소개하고 있으나 속도가 너무 느리다는 단점이 있다. 그리고 xrdp를 설치하고 윈도우 PC에 기본 내장된 원격 데스크톱 연결을 사용하는 방법도 있으나 얘도 마찬가지로 속도가 너무 느리다.    여기서는 그나마 준수한 성능을 보이는 NoMachine을 통한 원격제어 방법을 소개한다. 아래 링크의 설명을 따라 진행하였다. 링크 : https://kb.nomachine.com/AR02R01074    1. 젯슨 보드에서 arm용 nomachine을 다운받고 설치한다.wget https://www.nomachine.com/free/arm/v8/deb -O nomachine.debsudo dpkg -i noma.. 2024. 6. 16.
윈도우11 ] 파일탐색기 우클릭시 추가옵션표시 없애기 '추가 옵션 표시' 없이 윈도우10처럼 모든 옵션을 표시하는 법        관리자 모드로 명령프롬프트 실행하여 다음 명령어 입력 후 재부팅하면 모든 옵션이 바로 표시된다.reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve     만약 다시 원래 윈도우11의 표시방식으로 돌아가고 싶다면 아래 명령을 입력하면 된다.reg delete "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" /f 2024. 6. 15.
접지(Ground)의 종류 접지란? 접지는 이론적으로 전압이 0인 지점에 연결하여 전기적 기준을 설정하는 것을 의미한다. 접지의 종류는 신호접지(Signal ground), 섀시접지(Chassis ground), 대지접지(Earth ground 또는 Earth)로 나눌 수 있으며 각 심볼과 정의는 다음과 같다.  1. 신호접지 (Signal Ground) 신호접지는 주로 전자기기 내부의 신호 처리 회로에서 사용되는 접지이다. 이 접지는 신호의 기준 전위(0V)로 사용되며, 신호 간섭을 최소화하고 신호 품질을 보장하기 위해 중요한 역할을 한다.      2. 섀시접지 (Chassis Ground) 섀시접지는 전자기기의 금속 케이스 또는 섀시에 연결되는 접지이다. 이 접지는 기기의 외부 금속 케이스와 연결되어 케이스에 의한 전자파의 .. 2024. 6. 14.
STM32CubeIDE 1.15.0에서 Build Analyzer가 동작하지 않을 때 원래 ${ProjName}.elf 파일과 같은 폴더 내에 ${ProjName}.map 파일이 있으면 Build Analyzer에 메모리 사용량이 나타나야 하는데 안나타는 경우 빌드 후 새로고침 버튼을 누르면 동작한다. 아마 STM32CubeIDE 1.15.0 버전부터 바뀐 것 같다.    자동으로 새로고침하게 하려면 아래의 Refresh 설정을 On request가 아니라 Auto로 해두면 된다. Window > Preferences > STM32Cube > Build Views settings > Build Views Resfres Mode : Auto 2024. 6. 13.
ccs 프로젝트 빌드 과정 CCS에서 프로젝트를 Build하거나 Rebuild 할 때 다음의 절차를 수행한다. 1. makefiles 자동생성 프로젝트의 활성 빌드 구성 폴더(디폴트로는 Debug 폴더)에 하나의 makefile과 여러 *.mk파일을 생성한다. makefile: 자동 생성된 *mk file들을 포함하는 메인 makefile 빌드에 참여하는 모든 소스파일은 아래 *.mk 파일에 정의되어 있다. objects.mk subdir.mk subdir_vars.mk 2. gmake를 사용하여 clean (optional) Rebuild Project 또는 Clean Project 선택시 gmake clean 명령을 사용하여 활성 빌드 구성 폴더의 .obj, .pp, .out 파일을 삭제하고, makefile 및 .map 파일.. 2024. 6. 12.
C++ ] 문자열 탐색 및 조작 함수, find() 외 문자열 탐색 함수 find : 문자열/문자의 처음 등장 위치 찾기rfind : 문자열/문자의 마지막 등장 위치 찾기find_first_of : 문자 집합 중 하나라도 처음으로 등장하는 위치 찾기find_last_of : 문자 집합 중 하나라도 마지막으로 등장하는 위치 찾기find_first_not_of : 주어진 문자 집합에 없는 첫번째 문자 위치 find_last_not_of : 주어진 문자 집합에 없는 마지막 문자 위치 찾기 ✔️ 위의 문자열 탐색함수는 문자열 내에서 특정 조건을 만족하는 요소를 찾지 못했을 경우 string::npos를 반환한다. string::npos는 상수값으로 size_t 타입의 최대값이다.✔️ find와 rfind 함수는 주어진 문자열에서 특정 문자열 뿐만 아니라 단일 문자를.. 2024. 6. 11.
Jetson Xavier NX 냉각 팬 프로파일 변경 Jetson 보드는 PWM 제어를 통해 직접 팬 속도를 조절할 수도 있지만, 기본적으로 온도에 따라 자동으로 팬 속도를 제어하는 데몬인 nvfancontrol이 탑재되어 있다. 그 중에서도 Jetson Xavier NX 보드는 nvfancontrol 데몬이 참조하는 quiet와 cool이라는 두가지 팬 프로파일이 존재하고 각 프로파일의 구성은 다음과 같다.   프로파일 구성에는 Trip temperature, Hysteresis, Fan PWM value라는 요소가 존재하는데 팬의 속도가 빈번하게 바뀌는 것을 방지하기 위해 히스테리시스 특성을 이용해 제어한다.예를 들어 quiet 모드인 경우 46도에 도달하면 팬을 켜고 46-8(히스테리시스 값)=38도 이하로 떨어지면 팬을 끄는 식이다.  팬 프로파일 .. 2024. 6. 10.
Tkinter ] Python GUI 프로그래밍 Tkinter는 파이썬 설치시 기본적으로 내장된 표준 라이브러리로 별도의 설치 없이 바로 GUI 개발을 시작할 수 있다는 장점이 있다.  Tkinter의 주요 구성 요소Tk 객체 : GUI 애플리케이션의 메인 윈도우를 생성하는 핵심 객체이다. Tk()를 통해 생성된다.위젯(Widgets) : 사용자 인터페이스를 통해 상호작용할 수 있도록 도와주는 각종 UI 요소이다.Label : 텍스트나 이미지를 표시한다.Button : 사용자가 누를 수 있는 버튼을 제공한다.Entry : 한 줄의 텍스트를 입력받는 입력 필드이다.Text : 여러 줄의 텍스트를 입력받는 필드이다.Frame : 다른 위젯들을 그룹핑하고 레이아웃을 관리하는 컨테이너이다.배치 관리자(Layout Managers) : 위젝을 윈도우 또는 프레.. 2024. 6. 9.
Pyside6 ] 개발 환경 설정 with VSCode pyside6 설치 pip install pyside6       VScode에서 Qt for Python 익스텐션 설치        test.py를 만들고 공식문서에서 제공한 코드를 복붙한 후 콘솔에서 python test.py로 실행한다. https://doc.qt.io/qtforpython-6/tutorials/basictutorial/widgets.htmlimport sysfrom PySide6.QtWidgets import QApplication, QLabelapp = QApplication(sys.argv)label = QLabel("Hello World!")label.show()app.exec()    한줄 씩 살펴보면 다음과 같다.# command line arguments에 접근하기 위해.. 2024. 6. 8.
RJ45 커넥터에서 LED의 의미 RJ45 커넥터는 이더넷 연결을 위한 표준 인터페이스로 네트워크 상태에 대한 정보를 제공하는 LED 지시등이 내장되어 있다. 일반적으로 이 LED는 초록색과 노란색 2개가 존재하며 각 LED가 나타내는 의미는 다음과 같다.         위 내용이 일반적인 구성이며 PHY칩에서 LED 모드 설정을 변경할 수 있기 때문에 다른 의미를 내포할 수도 있다. 2024. 6. 7.
VirtualBox 해상도 조절 장치 > 게스트 확장 CD 이미지 삽입 후 설치     보기 > 게스트 디스플레이 크기 자동 조정 선택      만약 이렇게 해서 안되면 시스템 종료 후 > 설정 > 디스플레이 > 그래픽 컨트롤러를 VMSVGA에서 VBoxVGA로 변경       보기 > 가상 화면 1 > 해상도 조정 2024. 6. 6.
Ubuntu ] 한영전환키 설정 설정 > 지역 및 언어 > 설치된 언어 관리를 눌러 language support가 완전히 설치되지 않았다는 안내 창이 뜨면 설치 후 재부팅한다. 입력 소스에서 한국어(101/104키 호환)은 삭제해준다.   만약 입력 소스에서 Hangul이 안보이면 다시 설치된 언어 관리를 눌러 키보드 입력기가 IBus로 선택되어 있는지 확인한다.   터미널에서 다음 명령어를 치고 입력기 > 추가를 눌러 Hangul을 추가한다.ibus-setup   다시 설정 > 지역 및 언어 > 입력 소스에서 Hangul의 톱니바퀴 버튼을 클릭하고 한영전환키 옆의 추가 버튼을 누른상태에서 한영 키를 누르고 확인을 누른다.  이후 한영전환키를 눌러 한글을 입력할 수 있다. 2024. 6. 5.
STM32 ] microseconds 딜레이 함수 만들기 사용보드 : STM32F429ZI  먼저 타이머를 사용할건데 16-bit 타이머 중에 고르면 충분하다. 65.535ms까지 제어가 되는데 그 이상의 지연이 필요하면 HAL_Delay() 함수를 쓰면 되니까 말이다.여기선 TIM1을 쓴다.          TIM1는 APB2에서 클락을 공급받는다.  APB2 timer clock은 180MHz로 설정되어있다.     Prescaler 값은 180-1로 해서 1MHz(주기 1us) 클락을 얻고 Counter Period는 최대값으로 설정한다.    다음과 같이 코드를 작성한다. /* USER CODE BEGIN 0 */void delay_us(uint16_t us){ htim1.Instance->CNT = 0; while(htim1.Instance->CNT .. 2024. 6. 4.
Python ] 코드 실행 시간 ms 단위로 측정하기 + datetime 모듈 사용법 1. time 모듈 사용하기 import timestart_time = time.time()for i in range(1, 10000000): passend_time = time.time()elapsed_time = (end_time - start_time) * 1000print(f"start_time : {start_time}")print(f"end_time : {end_time}")print(f"elapsed_time : {elapsed_time} ms")  time 모듈은 아래와 같이 import하여 사용할 수 있고 현재시간을 초단위로 반환하는 time() 함수와 시간 지연을 생성하는 sleep() 함수가 많이 쓰인다.import time time 모듈에서 시간은 UNIX time을 기준으로 .. 2024. 6. 3.
Python ] leetCode 1861 - Rotating the Box 리트코드 1861번 문제 You are given an m x n matrix of characters box representing a side-view of a box. Each cell of the box is one of the following: A stone '#'A stationary obstacle '*'Empty '.' The box is rotated 90 degrees clockwise, causing some of the stones to fall due to gravity. Each stone falls down until it lands on an obstacle, another stone, or the bottom of the box. Gravity does not affect.. 2024. 6. 2.
Python 기본 문법 파이썬의 특징  ✔️ 동적인 자료형 결정변수에 값이 할당되는 시점에 데이터 타입이 동적으로 결정됨a = 1b = 1.0c = 'hello'print(type(a))print(type(b))print(type(c))   ✔️ 자동 메모리 관리개발자가 직접 메모리를 관리할 필요 없고, 자료형의 범위 또한 필요에 따라 자동으로 확장되기 때문에 일반적으로 고려할 필요 없다.    ✔️ 체이닝체이닝은 특히 메서드나 연산자를 연속적으로 연결하는 것을 의미한다.# strip() 함수는 공백을 제거하거나 특정 문자 또는 문자열을 제거함result = " Hello, World! ".strip().lower().replace("hello", "hi").strip('!')print(result)# 논리 연산자 체이닝age.. 2024. 6. 1.