# Embedded
PWM으로 서보모터를 쉽게 제어해보자!
목차 듀티비 구하는 공식(이를 이용하여 각도 조절) 연결 회로도 서보모터 제어 코드(with python) 듀티비 공식 > Time On/Time On + Time Off * 100 으로 듀티비를 계산을 할 수 있다. 여기서 나오는 TimeOn과 TimeOff란? 이렇게 PWM주파수가 있다고 한다면 PWM신호가 1이 Time On, 신호가 0은 Time Off에 해당한다. 이 값들을 이용하여 듀티비를 구할 수 있다. >듀티비값에 따른 서보모터 각 3% = 0도 7.5% = 90도 12.5% = 180도 연결 회로도 
PWM으로 LED를 쉽게 제어해보자!
목차 PWM연결 회로도 및 핀 맵 LED밝기 조절 버튼 클릭 시 LED ON/OFF PWM연결 회로도 라즈베리파이의 핀 맵은 이러하다. 이렇게 회로도를 구성하면 된다. LED밝기 조절 코드 회로도를 구성하였으면 이제 Visual Studio Code에 ssh연결을 하여 코드를 작성해줄것이다. Duty Cycle을 이용하여 Led의 밝기를 서서히 켜지고 서서히 꺼지는 코드를 작성하였다. p = GPIO.PWM(20, 50)에서 두번째 인자는 Frequance를 뜻한다. 1초에 50번

Iot와 임베디드의 차이
이번시간에는 Iot와 임베디드이 차이를 간단하게 배워보도록하겠습니다. IoT(The Internet of Things, 사물인터넷) IoT는 인터넷에 연결되 여러 개체(사물)간의 통신과 상호작용을 가능하게 하는 기술과 개념입니다. 사물은 센서,컴퓨팅 장치 등의 기기로 이루어져 있으며, 네트워크를 통해 데이터를 교환하고 서로 통신하는 것을 말합니다. IoT는 일상적인 물건을 인터넷에 연결하여 서로 정보를 공유하고 제어할 수 있는 스마트 환경을 구축하는 것을 목표합니다. Embedded System(임베디드 시스템) 임베디드 시스템은 일반적으로 별도의 기능을 수행하기 위해 설계된 특수한 컴퓨터 시스템입니다. 임베디드 시스템은 제한된 자원(처리능력, 메모리 등)을 가지고 있으며, 주로 특정한 작업이나 제어를 위해 사용됩니다. 임베디드 시스템은 소형 컴퓨터, 마이크로컨트롤러 또는 전용 칩과 같은 하드웨어와 해당 하드웨어를 제어하기 위한 소프트웨어로 구성됩니다. 비교에

[embedded_project] 춤추는 인형
깃허브 주소 https://github.com/ghrltjdtprbs/embedded_project/tree/main +코드와 자세한 자료는 깃허브 참고 개발계획 사용센서 피에조부저 서보모터*2 리모컨, IR센서 LCD 회로도 사용방법 PLAY버튼을 누르면 아기상어 노래 실행 1번 버튼 누르면 사랑을했다 노래 실행 노래가 재생되면 인형이 박자에 맞춰 춤을 춥니다. 실행되면 해당노래 이름이 LCD에 표시됩니다. 실행영상 
3. 기본 데이터의 타입들
이전 포스트에 이어서 기본 데이터 타입에 관하여 설명을 하고자 한다. 기본 데이터 타입은 굳이 C언어 뿐만이 아니라, JAVA등과 같은 많은 언어들과도 공통되므로 잘 알아둬야 한다. 이에 대하여 이야기를 시작하도록 하겠다. 1) 표로 보는 기본 데이터 타입 기본 데이터 타입에 관하여 아래의 표와 같이 정리를 한다. 상세한 이야기는 다음 목차부터 설명을 하겠다. 이름 | type | size(bit) :---:|:---:|:---: char | 문자형, 정수형 | 8 bit short | 정수형 | 16 bit int | 가변 정수형 | unknown long | 정수형 | 32 bit long long | 정수형 | 64 bit float | 부동소수점 | 32 bit double | 부동소수점 | 32, 64 bit, depends on align 2) ch

CubeIDE
CubeIDE > 임베디드에서는 보드 초기세팅이 매우 어렵다 ex) Startup.s 코드작성, clock설정, 레지스터 설정 등등 > 원래는 경험 많은 팀장급 엔지니어가 초기세팅을 진행하지만 이를 CubeIDE를 통해 GUI로 설정하면 시작코드를 생성해줌! PC에서는 Trace가 당연하지만 임베디드에서는 CPU일시중지가 어렵기에 따로 디버깅장비를 사용함 누클레오 에서 ST-Link/v2를 사용해 편리하게 Trace 가능! System Clock MCU에 들어가는 Clock 내부/외부 Clock 내부 Clock : MCU 내부 Clock Ocillator를 사용함 외부 Clock : MCU 외부 Clock Ocillator를 사용함 High Speed/ Low

<TIL> 96. Springboot Server Properties - Embedded Tomcat
Spring Spring Boot의 기본 웹 서버는 Embeded Tomcat. Embedded Tomcat의 설정을 따로 할 수 있다. 설정항목(사용한 것) server.tomcat.max-connections - 서버가 유지할 수 있는 최대 Connection의 수 (Default: 8192) -> 이것 때문에 10000명의 요청을 보내도, 8192명에서 connection오류가 발생했다. server.tomcat.threads.max - 최대 실행 가능 Thread 수(Default: 200) 알게된 점 -> Springboot의 server가 tomcat이라는 것을 알게되었고, 자

라즈베리파이를 이용한 FDX-B Reader
서론 최근 4학년 캡스톤 디자인과 관련하여 반려 동물과 관련된 서비스를 제작하고 있습니다. 반드시 SW + HW를 동시에 사용하는 서비스를 제작하라는 교수님의 엄명에 Solution Challenge 결과물을 재활용하려던 계획은 수포로 돌아가게 되었습니다. 주제로 며칠을 고민하던 찰나, 하나의 유튜브 영상이 눈에 들어오게 됩니다. 애옹 반려동물등록제도에 흔히 사용되는 ISO 11784/11785 규격의 RFID 칩을 인식하여 지정된 동물에게만 사료 커버를 열어

[JPA] @Embeddable, @Embedded
@Embeddable / @Embedded @Embeddable 엔티티가 아닌 타입을 한 개 이상의 필드와 매핑할 때 사용합니다 엔티티의 한 속성으로 @Embeddable 적용 타입이 사용됩니다. DB 설계 시 여러 테이블에 관련된 값을 저장할 때가 있습니다. 이럴 경우 @Embeddable 어노테이션을 활용하여 조금 더 객체지향스럽게 개발이 가능합니다. 예를 들어, 회원 엔티티가 이름, 도시, 주소 번지, 주소 우편번호를 가집니다. 이때 도시, 주소 번지, 주소 우편변호는 회원의 주소를 알기 위해 가지는 칼럼입니다. 이때 상세 데이터 또한 하나의 객체로 묶게 되면 훨씬 객체 지향적으로 설계가 가능합니다. 주소 임베디드 타입을 생성하기 위해 @Embeddable 어노테이션을 주소 클래스에 생성해주고 Member 객체에서 임베디드 타입으로 된 주소 객체를 @Embedded 어노테이션을 이용해 사용합니다. 저장 이럴 경우

Linux? Ubuntu? 암튼, 니가 뭔데 날 괴롭혀?🫤 (feat. OS:Operating System, MBTI)
😒Linux? 그게 뭔데? > ## 'Unix'기반 OS (Unix based OS) Unix? 넌 또 뭐야?🤨라고 하실겁니다. Unix는 운영체제(OS) 중 하나입니다. Linux는 컴퓨터 분야에 관심이 조금 있다면 어느정도 들어는 봤을겁니다. 저도 정말 있다 정도만 들어봤을 정도니깐요. (써볼 생각은 못했음) 그런데 Unix? 조금 생소했습니다. 이 OS는 'C와 어셈블리어로 이루어진 교육 및 연구 기관에서 즐겨 사용되는 범용 다중 사용자 방식의 대화식, 시분할처리 시스템용 운영 체제' 라고 조금 검색해보시면 나옵니다. 쉽게 말해서, 거의 '서버(Server)' 에 특화된 OS입니다. 그럼 서버에만 자주 쓰일까? 그건 또 아닙니다. 개인PC에서

Spring Boot Embedded MongoDB Testing
Spring Boot에서 MongoDB와 연동한 테스트를 진행할 때 embedded MongoDB를 사용하면 별도로 MongoDB 설치를 하지 않고도 테스트가 가능하다. Embedded MongoDB를 사용하기 위해 dependency를 추가하고 테스트 코드를 돌려보면 다음과 같은 error로 실패하는 경우가 있다. test/resources/application.yaml에서 mongo db port를 기본 port인 27017이 아닌 다른 값으로 지정해주면 해결이 가능하다.

Converter, Embedded
Converter 스프링은 기본적으로 Object Mapper을 통해 스프링으로 들어온 객체를 변환해주지만, 사용자가 직접 이를 구현해주는 것 또한 가능하다. 다음은, Book status가 integer로 들어왔을때 이에 대하여 설명을 추가해주는 converter을 구현하는 예제이다. Book Entity 판매 상태를 보여주는 BookStatus 필드 입력한다. @Converter 어노테이션을 사용해 converter 클래스를 지정해준다. 어노테이션을 지정하지 않았을때 나타나는 에러는 RuntimeError 이다. BookStatus class 생성자로 status code가 들어와 생성할 때 description도 같이 초기화 해준다. BookStatusConverter AttributeConverter 을 impleme
Linux System Programming (2) - API와 ABI
API(Application Programming Interface) API란 소프트웨어의 소스 코드 레벨에서 서로 인터페이스(방식을 맞추는)하는 방식을 정의한다. 일반적으로 API의 표준 인터페이스는 함수 이며, 상위 레벨의 소프트웨어에서 더 하위 레벨의 소프트웨어를 호출할 수 있다. (C 언어는 하위 레벨의 시스템 콜을 이용해 메모리 주소 값을 불러올 수 이다.) 예를 들면, 화면에 글자를 출력하는 데 필요한 내용을 제공하는 함수의 집합을 API라고 할 수 있겠다. API는 그저 인터페이스를 정의하며 그 정의를 실제로 구현한 소프트웨어를 API 구현체라고 한다. API를 흔히 '계약' 이라고 부르는데, API는 쌍방 계약이 아니므로 법률적으로 본다면 정확한 비유는 아니다. 보통 상위 레벨의 소프트웨어인 API의 사용자는 API와 그 구현에 직접적인 영향을 끼치지 못한다. 그냥 API 그 자체를 사용하거나 사용하지 않거나 둘 중 하나이다. **API는 양쪽 소프트웨어

Rust (0) - Hello Rust!
Rust Rust는 모질라 리서치에서 개발한 범용 프로그래밍 언어이다. "안전하고, 병렬적이며, 실용적인" 언어로 디자인 되었으며, 순수 함수형 프로그래밍, 액터 기반 병렬 프로그래밍, 명령형 프로그래밍, 객체 지향형 프로그래밍 스타일을 폭넓게 지원한다. 2006년 개발자 그레이든 호아레의 개인 프로젝트로 시작되었으며, 2009년 호아레의 고용주인 모질라가 개발에 참여했다. 2010년 처음으로 일반에 공개되었으며, 같은 해 Objective Caml로 작성된 초기 컴파일러에서 Rust로 작성된 컴파일러로 전환되었다. rustc(러스트의 공식 컴파일러)는 2011년 처음으로 자기 자신을 컴파일하는데 성공했다. 2012년 1월에는 첫 번째 알파 버전인 0.1이 발표되었고, 현재 1.66 버전이 운용중이다.
Linux System Programming(1) - System Call
시스템 콜(System Call) 시스템 프로그래밍은 시스템 콜에서 시작해서 시스템 콜로 끝난다. 시스템 콜이란 운영체제에 리소스나 서비스를 요청하려고 사용자 영역(텍스트 편집기나 게임...)에서 시작해서 커널 내부로 들어가는 함수 호출이다. 시스템 콜에는 read(), write() 같은 익숙한 함수부터, getnarea(), settid_address() 같은 생소한 함수 까지 그 범위가 다양하다. 리눅스에서 구현된 시스템 콜은 다른 대부분의 운영체제 커널에서 제공하는 시스템 콜보다 더 적다. 예를 들어 x86-64 아키텍처의 리눅스 시스템 콜은 약 300여 개인데 비해 마이크로소프트 윈도우에는 수천여 개의 시스템 콜이 있다. 리눅스 커널에서는 표준 시스템 콜을 Alph, x86-64, PowerPC 같은 개별 아키텍처별로 확장하여 구현하고 있다. 그래서 아키텍처별로 사용할 수 있는 시스템 콜이 조금씩 다를 수 있지만, 시스템 콜의 90% 이상은 모든 아키텍처
C 언어(2) - 기본 자료형 및 문자열
자료형의 기본 크기 기계어는 2진수 이다. 0과 1로 표현해야 한다. 이 때, 0 또는 1의 크기를 bit(비트)라고 한다. 예를들어 다음과 같은 기계어가 있다고 치자. 01101001 위는 총 0 또는 1이 8개 이므로 8bit라고 표현한다. 또한 8bit를 우리는 1byte로 정의한다. 이 후 1024byte는 1KB(킬로 바이트), 1024KB는 1MB(메가 바이트), 1024MB는 1gb(기가 바이트), 1024GB는 1TB(테라바이트) 순으로 크기를 표현한다. 기본 자료형 C의 기본 자료형은 다음과 같다. | 자료형 | 크기 | 표현 범위 | |:----------|:----------|:-----------| | char | 1 byte | -128 ~ 127 | | short | 2 byte | -32,768 ~ 32,767 | | int | 4 byte | -2,147,483,648 ~ 2,147,483,647

C 언어(1) - C의 기본 아키텍쳐
프로그래밍(Programming) 프로그래밍이란 목적에 맞는 알고리즘으로부터 프로그래밍 언어를 사용하여 구체적인 프로그램을 작성하는 과정을 의미한다. 이렇게 작성된 프로그램은 먼저 실행 파일로 변환되어야 실행 할 수 있다. 윗 그림과 같은 순서로 실행까지 도달한다. 여기서, "선행처리기(PreProcessor)", "컴파일러(Compiler)" 이 핵심이 된다. 선행처리기(PreProcessor) 선행처리(PreProcess)란 소스 파일 내에서도 선행처리 문자(#) 시작하는 선행처리 지시문의 처리 작업을 의미한다. 이러한 선행처리 작업은 선행처리기(PreProcessor)가 수행한다. 선행처리기는 코드를 생성하는 것이 아닌, **일(Compile)하기 전 컴파일러가 작업하기
C 언어(0) - Introduction
C언어의 역사 C는 1972년 켄 톰슨과 데니스 리치가 벨 연구소에서 일할 당시 새로 개발된 유닉스 운영 체제에서 사용하기 위해 개발한 프로그래밍 언어이다. 켄 톰슨은 BCPL언어를 필요에 맞추어 개조해서 "B"언어(언어를 개발한 벨 연구소의 B를 따서..)라 명명했고, 데니스 리치가 이것을 개선하여 C 언어가 탄생했다. 유닉스 시스템의 바탕 프로그램은 모두 C로 작성되었고, 수많은 운영 체제의 커널 또한 C로 만들어졌다. 오늘날 많이 쓰이는 C++는 C의 객체 지향형 언어이다. C언어 이전에 유닉스 운영체제는 어셈블리어라는 저급 언어를 사용했다. 하지만 어셈블리어는 특정 하드웨어에 종속적인 언어라서, 이 언어로 작성된 프로그램은 다른 하드웨어로 이식할 수 없었다. 즉, 하나의 기능을 하는 프로그램을 CPU의 종류만큼 여러 번 작성해야만 했고, 이러한 단점을 극복하기위해 C가 개발되었다고 할 수 있다. C언어의 장점 C언어가 가지는 대표적 장점은 다음과 같다.

스프링부트 너 뭐 돼?🤷♀️(10) - 임베디드
피할 수 없다면 즐기자! 스프링부트 너.. 뭐 돼? 📚 임베디드 📌 임베디드 타입(복합 값 타입) 임베디드 타입은 '복합 값 타입' 이라는 내장 타입을 뜻해요. 새로운 값 타입을 직접 정의할 수 있어요. JPA는 임베디드 타입(emdedded type)이라고 해요. 주로 기본값 타입을 모아 만들어서 복합값 타입이라고도하고 int, String 과 같은 값 타입이에요. 📌 JPA에서 임베디드 타입 사용법 @Embeddable : 값 타입을 정의하는 곳에 표시 @Embedded : 값 타입을 사용하는 곳에 표시 기본 생성자 필수 📌 임베디드 타입의 장점 재사용 높은 응집