[라즈베리파이] 서보 모터(PCA9685) + 버튼 제어
·
라즈베리파이/프로젝트
목표 차량용 보안모듈을 만들기 위해 하드웨어를 만드는 것이 목표이다.사이드 미러를 위한 2중 축을 모터로 구현할 것이며 4개의 버튼을 통해 움직임을 할 것이다.         구현하드웨어 구성  1. 라즈베리파이는 I2C를 통해 PWM컨트롤러PCA9685와 통신2. 버튼 4개는 GPIO를 통해 라즈베리파이 INPUT으로 신호를 입력3. 두개의 모터는 PWM컨트롤러PCA9685 채널 0, 1로 조정됨     핀 맵 1. PCA9685 : SCL과 라즈베리파이 5번(SCL) 연결 SDA과 라즈베리파이 3번(SDA) 연결 VCC는 3.3V V+는 5V에 연결전원은 공급 모듈을 사용했음 (되게 편하다. 추천!! 전원만 주면 3.3, 5V를 브레드 보드에 공급가능)    2. GPIO INPUT BCM기준으로 코..
[DB] 라즈베리파이 와 PC의 DB 구축과 전송
·
데이터 베이스
개요 PC는 서버 측을 맡을 것이고, 라즈베리파이가 단말측을 맡을 것이다. 프로젝트의 일부분으로 사용할 것인데... 결국 두쪽 모두 데이터 베이스가 필요할 것이기에 설계하고, 양쪽에서 데이터를 PUSH하는 과정을 정리한다.   1. PC측 데이터 베이스mysql로 데이터 베이스를 설계할 것이고, 내가 사용해본 hediSQL을 사용해서 만들어보았다. mysql 설치후, 라즈베리파이 사용자 계정을 만들어주었다. 선택한 user에서 add entry를 통해 권한을 줄 db를 선택하여 아래 보이는 권한들을 줄 수 있다. db랑 권한을 주는 건 위를 통해서하고, HeidiSQL을 써서 관리해봤다. 나는 사용해본 툴인 HeidiSQL을 사용했다. 위처럼 127.0.0.1로 하면 로컬에 있는 root db로 접속할 ..
[디바이스 드라이버] 5.GPIO 디바이스 드라이버
·
리눅스/디바이스 드라이버
목표gpio 디바이스 드라이버를 이용해 어플리케이션 레벨에서 장치파일을 통해 LED를 키고 끈다.    디바이스 드라이버 모듈 라즈베리파이 4B의 핀맵은 위와 같으며 나는 단순히 LED를 이용해 GPIO를 제어할 것이므로, 14번 GND와 16번 GPIO23을 이용해 제어해볼 것이다. 그리고 18번 핀을 이용해 INPUT으로 해당값을 읽어보기도 해보자.16번 : GPIO 23 OUTPUT18번 : GPIO 24 INPUT 그리고 GPIO 번호를 확인해야되는데 sudo cat /sys/kernel/debug/gpio 해당 명령어를 통해 핀에 해당되는 번호를 확인할 수 있다. 원래 이전엔 핀번호나 해당 번호나 똑같았는데 라즈베리파이 상위버전으로 가면서 확인해야된다더라... 이것때메 많이 헤멨었다. 체크하면 ..
[백준] 15686번 치킨배달 C++
·
알고리즘 문제 풀이/백준
문제https://www.acmicpc.net/problem/15686브루트 포스 문제...시간복잡도 때메 가져왔다. 풀이1. 백트래킹으로 모든 치킨집 경우의 수를 조합으로 구하기2. 구한 조합과 집 사이 거리를 모두계산해서 최소값 구하기  시간복잡도 : 최대 경우의수 : 17C7 = 1716 대충 2000최대 집수 : 100비교수 : 100 * 7 = 700700 * 2000 = 1400000통과는하지만 그렇게 빠르진 않다. #include using namespace std;#define X first#define Y second#define INF 1e9;int N,M;int answer = INF;vector > chicken;vector > chicken_temp;vector > house;vo..
[STM32] PWM으로 모터 제어 하기
·
STM32
이전에 비슷한 프로젝트를 했는데, 당시에는 LED를 사용해서 했는데 이번엔 모터로 바꿔서 해봤다.해본 이유는 Timer에 대해 더알아보기위해...?이전 포스트를 같이보면 좋을 듯함https://oragg.tistory.com/45 [STM32] Touch GFX 실습 - 2 : 터치스크린으로 PWM 제어로봇은 이미 분해했기에 이 터치스크린으로 간단하게 뭘해볼 수 있을까 하던중, 눌러진 숫자를 PWM 신호로 바꿔서, LED의 밝기를 조정하는 간단한 실습을 진행해보았다. PWM은 프로젝트의 모터제oragg.tistory.com Timer지난번에도 설명했었지만 다시한번 자세히 해볼려고한다. STM32 IDE에서 Clock Configuaration 메뉴를 통해 위처럼 timer별 clock(주파수)을 설정할 ..
[백준] 1로 만들기 C++ 두가지 풀이 BFS, DP
·
알고리즘 문제 풀이/백준
문제https://www.acmicpc.net/problem/1463이전 포스트인 동전1,2를 풀며 비슷했던? 문제를 가져왔다.이것도 특정 값이 되는 최소의 경로를 찾는 문제이다.동전과 다른점은 배수가 된다는 점? 이다.  풀이1 DP이전 포스트 였던 동전2에서는 DP배열에 동전을 하나 하나 해봤다.그이유는 어떤 경로이든 상관없기때문, 하지만 이번엔 배수와 덧셈으로 전진하므로 그렇겐안된다.예를들어1 에서 (+1) (*2)1 에서 (*2) (+1) 은 그 결과값이 다르기때문이다. 경로가 달라지면 값도 바뀐다.따라서 한번의 값마다 3가지 방법을 통해 최단 경로를 갱신해준다.for(int i = 2 ; i   소스코드1 DP#include int n;int dp[1000005];using namespace s..
[백준] DP 2294번 동전2 C++풀이
·
알고리즘 문제 풀이/백준
문제https://www.acmicpc.net/problem/2294 이전 포스트의 동전1과 같은 DP 문제, 이번엔 주어진 목표 금액과, 주어진 동전의 개수를 최소로했을때 몇갠지 세는 것이다.   풀이동전1과 달리 0원일때는 DP[0] = 0으로 초기화, 그리고 각 동전마다 DP배열에 1씩 추가하는 형태로 나아간다. 이때 DP배열이 추가하는 것보다 작으면 냅둬서 최소 개수를 구해나간다.이때 DP배열은 미리 최댓값INF을 대입해놔서, 만들어질 수 없는 값임을 초기화 시킨다.  #include using namespace std;const int INF = 10001;int n, k;vector coin;int dp[10001];int main(){ cin >> n >> k; int num; ..
[백준] DP 2293번 동전1 C++ 풀이
·
알고리즘 문제 풀이/백준
문제https://www.acmicpc.net/problem/2293 동전1, 2로 두개 문제가 있는데 오랜만에 다시볼라니까 좀 헷갈려서 정리한다.참고로 9084번 동전 문제도 똑같은 문제이다. 풀이동전1의 경우 주어진 금액에 맞게 주어진 동전들을 이용해 만들 수 있는 경우의 수를 세는 것이다. 여기서 생각해봐야할 점은 문제에도 나와있듯사용한 동전의 구성이 같은데, 순서만 다른 것은 같은 경우에는 동일한 경우의 수이다.4원을 만들때, 1,3원짜리 화폐가 있으면 1+3이나 3+1이나 동일하다는 것이다.이 두 경우를 다르게 본다면 DFS나 BFS를 이용할 수 있을 것이다. 여기선 동일한 경우로 따지기때문에, 1이 먼저오는 경우를 미리 판단한다고 생각한다. 그렇게한다면 DP배열의 1로가는 경우의 수를 먼저 대..
[디바이스 드라이버] 4. 장치파일과 디바이스 드라이버 연결하기
·
리눅스/디바이스 드라이버
목표이번엔 장치파일과 디바이스 드라이버를 만들어서 연결해볼 것이다.그렇게해서 애플리케이션(User Level)에서는 디바이스 드라이버로(Kernel Level)에 장치파일을 이용해 접근해본다. 디바이스 드라이버 모듈#include #include #include MODULE_LICENSE("GPL");MODULE_AUTHOR("IH02");MODULE_DESCRIPTION("user_to_driver");static int driver_open(struct inode *device_file, struct file *instance){ printk("open was called!\n"); return 0;}static int driver_close(struct inode *device_file, stru..
[디바이스 드라이버] 3. 디바이스 드라이버, 장치 파일의 종류
·
리눅스/디바이스 드라이버
맨첫 포스트에서 말했듯이, 애플리케이션(User Level)에서는 디바이스 드라이버로(Kernel Level)에 직접 접근할 수 없기 때문에 이둘을 연결해주는 역할인 장치파일이 필요하다.  mknod로 만들 수 있으며, 장치 파일과 디바이스 드라이버는 장치번호로 연결된다. mknod [옵션] 파일이름 종류 주번호 보조번호 사용방법은 위와같으며, 하나하나 알아보자....먼저 종류에는 c를주어 문자 장치 파일 혹은 b는 블록 장치 파일로 만들 수 있다.이건 뭘까?그리고 주번호 보조번호는 뭘까?   디바이스 드라이버의 종류1.문자 디바이스 (Char Device)앞서 보았듯 /dev파일에서 맨앞에 c가 있으면 char device 파일이다.블록디바이스와 비교하면서 보는게 좀 더나은데 몇가지 특징을 정리하면 아..
다락공방
오라즈