라벨이 Atmega인 게시물 표시

YOLO(영상처리)와 6DoF 로봇 팔(window)

이미지
➢ 전에 사용한 tensorflow가 아닌 YOLO( You Only Look Once)를 사용하여 영상을 촬영하고 미리 학습시켜둔 이미지와 매칭하여 물체를 찾는 방법을 사용했다. 공식 홈페이지 :  https://pjreddie.com/darknet/yolo/ ➢ 기존 다른 Object Detection보다 처리 속도가 빠르다. ➢ YOLO 설치는  https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects  를 참고하여 설치를 진행하였다. ➢ 각자 원하는 환경과 구성된 환경이 다르기에 설치 시 설정를 정확히 해야한다. 나는 opencv와 cuda가 깔려 있는 상황에서 설치를 시작하였다. 확인후 설치를 시작한다. ✫gpu를 사용한다면 cuda 설치를 해주어야 하며 이때가 가장 중요하다. cuda는 각 gpu가 지원하는 드라이버가 다른데 nvidia 홈페이지에서 자신에게 맞는 드라이버를 선택하고 설치를 하여야 한다. (지금은 환경은 window지만 ubuntu 환경에서 설치시에 고생을 많이 했다.) https://www.nvidia.com/Download/Find.aspx?lang=en-us 에서 자신에게 맞는 드라이버를 선택하여 설치를 하여주면 된다. ➢ 다운로드 후 컴파일은  https://github.com/AlexeyAB/darknet#how-to-compile-on-windows-legacy-way  방법을 사용했다. ➢컴파일도 완료하였으면 이제 training을 실시하여야 한다. training에 필요한 사진은 많으면 많을 수록 좋으며, 다양한 환경(다른 색의 배경 및 바닥, 다른 밝기의 조명)에서 찍은 사진이 많을 수록 좋은 것으로 보인다. 수는 최소 200장 정도 하면 적당한 것으로 생각된다. 필요한 사진들을 수집 완료 했으면 각 사진에 자신이 원하는 이미지를...

PLC(GMWIN)_LABVIEW_Arduino 연결하여 제어하기

이미지
➢ 전에 만들어 둔 PLC 보드를 사용하였다. ➢ 1번 버튼을 3초간 누르면 버튼 동작에 의하여 전등이 켜지고 꺼지며, 3번 버튼을 3초간 누르면 LabView의 패널 조작으로 아두이노를 통하여 릴레이를 조작하여 전등을 키고 끈다. ➢ LabView 패널과 블럭다이어 그램 ➢ 동작 영상

LabView HMI 및 PLC 통신

이미지
➢ 기본 화면과 블록다이어그램 ➢ 동작 동영상

53, 54회 문제

이미지
⧫53회 ➤ 동작 설명 1) PB3 스위치 PB3를 2번 누르면(PB3 카운터값 RESET),2초 지연 후 PL1이 동작되며, 3초 후 PL2가 동작되며, 4초 후 PL3가 동작 되며, 5초 후 PL4가 (on(1초)-off(1초)의 동작을 반복한다. 2) PB4 스위치 PB4를 2번 누르혐(PB4카운터 값 RESET), PL4 동작이 정지되며, 1초 후 PL3 동작이 정지되며, 2초 후 PL2 동작이 정지되며, 3초 후 PL1 동작이 정지 된다. ➤회로도 ⧫54회 ➤ 동작 설명 1) PB3 스위치를 2번째 누르면 PL1~ PL4는 다음과 같이 반복 동작한다. -PL1 : ON(11) - OFF(1) -PL2 : OFF(1)-ON(1)-OFF(1)-ON(5)-OFF(1)-ON(1)-OFF(1) -PL3 : OFF(1)-ON(1)-OFF(2)-ON(3)-OFF(1)-ON(1)-OFF(3) -PL4 : PL2와 PL3가 동시에 점등 될 때만 동작한다. 2) PB3 스위치를 6번째 눌렀다 떼면 동작 중인 PL1~PL4는 즉시 소등되며 PB3 스위치의 카운터 값은 RESET 된다. 3) PB4 스위치를 누르면 2)항 동작과 같다. 4) YL 동작 조건 - EOCR에 의해서 RY3가 여자되면 YL은 ON(2)-OFF(1)-ON(1)-OFF(2)를 반복 동작하고, RY3가 소자되면 YL은 동작을 멈춘다. ➤ 회로도

I2C 이용하여 LCD 사용 및 LED 제어

이미지
➤ 아두이노에서 작업, LCD 하나 그리고 LED와 button 각 3개씩 이용 ➤ 코드 ➤ 실행 결과

EOCR과 Power Relay 이용한 회로 구성 및 동작

이미지
➤회로도 및 장치 회로도 ➤동작 영상

적외선 센서를 이용한 7segment 동작 구현

이미지
적외선 센서를 통해 입력이 감지되면 led는 이진수로 표현하여 불을 밝혀 나타내고 옆에는 7segment를 연결하여 10진수로 표현하였다. Atmega는 이미 업로드 되어 있는걸 사용하였다.

PLC와 아두이노 그리고 온도 센서를 이용하여 램프 점등

이미지
우선은 전에 만들어둔 ArduinoUno(Atmega328P), LM35(온도센서)를 이용해 LCD에 Text 나타내기 와 PCB 실습_220V를 5V로 전압 감하 를 이용하여 만들었다. 2가지 방식으로 작동하도록 만들었다. 1) 자동 : 온도 센서의 일정한 값에 따라 Lamp의 불이 들어오게 만들었다. 2) 수동 : 수동 모드로 전환하는 스위치를 눌러 자동 동작은 정지하고 수동으로 스위치 조작하며 one button 방식으로 설정하였다. 글로파에 올릴 프로그램은 GMWIN에서 작성하였다. 작성 후 접속+쓰기+모드전환+모니터시작 으로 연결과 업로드를 동시에 실행하였다. 아두이노의 전원 공급은 5V로 전압 감하된 전원을 사용한다. ➢Atmel7.0을 이용하여 아두이노에 업로드한 코드 /*  * Atmega328p_PLC_1213.c  *  * Created: 2018-12-13 오후 2:22:24  * Author : USER  */ #define F_CPU 16000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <stdio.h> #include    <util/delay.h> #include "lcd.h" // LCD.h 시작 // LCD.h 끝 #define MAX_LCD_STRING 0x40 #define SINGLE_MODE 0 #define FREE_MODE 1 #define PRESSED 0 #define RELEASED 1 volatile int  adc_rq=0, adc_result=0; volatile unsigned  int  mode = SINGLE_MODE; //volatile float V=0; ISR(ADC...

Atmega8을 이용하여 led를 통한 2진수 표현과 7segment를 이용한 숫자 표현

이미지
Atmega8을 이용하여 적외선 센서를 통해 인터럽트가 들어 올때 마다 led에는 2진수를 표현하고 7Segment에는 숫자를 표현하는 방식을 구현하려 한다. 필요 물품)Atmega8(코딩되어 있는 상태), 7Segment, led 4개, 점프선, 디코더(IC7477), 저항 220옴 4개, 저항 10 옴 한개 회로도)   왼쪽은 Photo 센서와 Atmega8 그리고 led를 연결한 회로도, 오른쪽은 디코더와 7Segment를 연결한 회로도 이다. led와 Atmega8까지만 연결한 뒷 모습) 왼쪽과 오른쪽 회로도를 모두 연결한 모습) 아래는 전원을 인가하여 정상 작동하는 모습)

ArduinoUno(Atmega328P), LM35(온도센서)를 이용해 LCD에 Text 나타내기

이미지
조건) 1. 온도 센서를 이용하여 값을 읽어온다. 2. 읽어온 값을 ADC(Analog to Digital Converter)를 사용해 준다. 3. 변환된 값을 이용하여 온도와 변환된 값을 LCD에 출력해 준다. ➤ 실제 제품에 올리기 전 시뮬레이션으로 점검하기 실제 Atmega328P에 올리기 전 AVR studio 4 와 Proteus에서 먼저 실행하여 이상이 없는지 확인을 했다. ADCSRA |= 1<<ADEN | 1<<ADIE | 1<<ADATE | 6; →ADCSRA에서 설정해 주며 ADC를 사용하는데 세부 설정을 해준다. ADEN(ADC Enable), ADSC(ADC Start Conversion)(뒤에 main 부분에 따로 설정해 두었다.), ADATE(ADC Auto Trigger Enable), 6(ADPSn 과 연관되어 있으며 6(0b110) 으로 설정해 64분주로 설정했다.) ADMUX |= 1<<REFS0; →ADMUX에서 8번째와 7번째 비트인 REFS1, REFS0을 [01]로 설정하여 Vcc를 사용하고 Vref에는 캐패시터를 연결하여 기준 전압을 설정해 주었다. 또한, 나머지 비트는 0으로 셋팅되어 있기에 따로 설정할 필요 없이 ADC0를 사용하면 된다. (main 부분 코딩) spirintf() : LCD에 올릴 문자를 작성해 주었다. LCD_str_write() : LCD에 문자열을 작성하는 부분이며 첫 번째는 몇 번째 행인지 두 번째는 몇 번째 열인지 마지막은 어떤 문자열을 올릴지 나타낸다. (컴파일 하여 시뮬레이션 결과 문제 없이 작동하는 모습) ➤ 실제 Atmega328P에 업로드 실제 Atmega 328P에 업로딩시에는 Atmel Studio 7.0을 사용하였다. AVR studio에서 작성한 코드를 그대로 가져왔기에 달라진 부분은 없다. AVR studio에서 작성 시 LCD에 실수...

2개의 Matrix를 이용한 숫자 슬라이드(ATmega128)

이미지
전의 포스트에서 숫자를 슬라이드 하여 오른쪽에서 왼쪽으로 흘러가는 동작을 구현하도록 만들었다 이번의 코드는 하나의 도트 매트릭스가 아닌 2개의 매트릭스를 연결하여 이동하도록 구현하였다. 1) 회로도 2) 코드 #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> int num[10][8][2]={ {{0x18,0xfe},{0x24,0xfd},{0x24,0xfb},{0x24,0xf7},{0x24,0xef},{0x24,0xdf},{0x24,0xbf},{0x18,0x7f}}, {{0x10,0xfe},{0x18,0xfd},{0x14,0xfb},{0x10,0xf7},{0x10,0xef},{0x10,0xdf},{0x10,0xbf},{0x3c,0x7f}}, {{0x00,0xfe},{0x18,0xfd},{0x24,0xfb},{0x20,0xf7},{0x10,0xef},{0x08,0xdf},{0x04,0xbf},{0x3c,0x7f}}, {{0x1c,0xfe},{0x22,0xfd},{0x20,0xfb},{0x10,0xf7},{0x10,0xef},{0x20,0xdf},{0x22,0xbf},{0x1c,0x7f}}, {{0x20,0xfe},{0x30,0xfd},{0x28,0xfb},{0x24,0xf7},{0x22,0xef},{0xfe,0xdf},{0x20,0xbf},{0x20,0x7f}}, {{0x3e,0xfe},{0x02,0xfd},{0x02,0xfb},{0x1e,0xf7},{0x20,0xef},{0x20,0xdf},{0x22,0xbf},{0x1c,0x7f}}, {{0x18,0xfe},{0x24,0xfd},{0x04,0xfb},{0x04,0xf7},{0x1c,0xef},{0x24,0xdf},{0x24,0xbf},{0x18,0x7f}}, {{0x3e,0xfe},{0x20,0xfd},...

Atmega128로 도트 매트릭스 숫자 표현(slide)

이미지
저번 포스트에서 숫자를 매 일정 시간마다 바꾸는게 아닌 연결되어 흐르도록 설계 1) 회로도 2) 코드 #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> int num[10][8][8]={ {{0x18,0xfe},{0x24,0xfd},{0x24,0xfb},{0x24,0xf7},{0x24,0xef},{0x24,0xdf},{0x24,0xbf},{0x18,0x7f}}, {{0x10,0xfe},{0x18,0xfd},{0x14,0xfb},{0x10,0xf7},{0x10,0xef},{0x10,0xdf},{0x10,0xbf},{0x3c,0x7f}}, {{0x00,0xfe},{0x18,0xfd},{0x24,0xfb},{0x20,0xf7},{0x10,0xef},{0x08,0xdf},{0x04,0xbf},{0x3c,0x7f}}, {{0x1c,0xfe},{0x22,0xfd},{0x20,0xfb},{0x10,0xf7},{0x10,0xef},{0x20,0xdf},{0x22,0xbf},{0x1c,0x7f}}, {{0x20,0xfe},{0x30,0xfd},{0x28,0xfb},{0x24,0xf7},{0x22,0xef},{0xfe,0xdf},{0x20,0xbf},{0x20,0x7f}}, {{0x3e,0xfe},{0x02,0xfd},{0x02,0xfb},{0x1e,0xf7},{0x20,0xef},{0x20,0xdf},{0x22,0xbf},{0x1c,0x7f}}, {{0x18,0xfe},{0x24,0xfd},{0x04,0xfb},{0x04,0xf7},{0x1c,0xef},{0x24,0xdf},{0x24,0xbf},{0x18,0x7f}}, {{0x3e,0xfe},{0x20,0xfd},{0x20,0xfb},{0x10,0xf7},{0x08,0xef},{0x08,0xdf},{0x08,0xbf},{0x...

AVR과 Proteus로 7segment 작동

이미지
AVR과 Proteus로 코드와 회로를 작성하여 각 버튼을 누룰시 그에 맞는 번호를 7segment에 표시하도록 구성 0~F 까지의 숫자 표현(16진수) 1) 회로도 2) 코드 #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> int main(void){ DDRE=0xf0; DDRB=0xff; PORTB=0b011111111; while(1){ PORTE= 1<<PE7 | 1<<PE6 | 1<<PE5;// | 1<<PE4; if(!(PORTE & 1<<PE4) && !(PINE & 1<<PE3)) PORTB=0b01000000;//0 else if(!(PORTE & 1<<PE4) && !(PINE & 1<<PE2)) PORTB=0b01111001;//1 else if(!(PORTE & 1<<PE4) && !(PINE & 1<<PE1)) PORTB=0b00100100;//2 else if(!(PORTE & 1<<PE4) && !(PINE & 1<<PE0)) PORTB=0b00110000;//3 _delay_ms(1); PORTE= 1<<PE7 | 1<<PE6 | 1<<PE4; if(!(PORTE & 1<<PE5) && !(PINE & 1<<PE3)) PORTB=0b00011001;//4 else if(!(PORTE & 1<<PE5) && !(PINE & 1<...

Atmega128로 도트 매트릭스 숫자 표현

이미지
1초마다 0~9까지의 숫자를 차례대로 표현 1) 디자인 2) 코드 #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> int num0[8][8]={{0x18,0xfe},{0x24,0xfd},{0x24,0xfb},{0x24,0xf7},{0x24,0xef}, {0x24,0xdf},{0x24,0xbf},{0x18,0x7f}}; int num1[8][8]={{0x10,0xfe},{0x18,0xfd},{0x14,0xfb},{0x10,0xf7},{0x10,0xef}, {0x10,0xdf},{0x10,0xbf},{0x3c,0x7f}}; int num2[8][8]={{0x00,0xfe},{0x18,0xfd},{0x24,0xfb},{0x20,0xf7},{0x10,0xef}, {0x08,0xdf},{0x04,0xbf},{0x3c,0x7f}}; int num3[8][8]={{0x1c,0xfe},{0x22,0xfd},{0x20,0xfb},{0x10,0xf7},{0x10,0xef}, {0x20,0xdf},{0x22,0xbf},{0x1c,0x7f}}; int num4[8][8]={{0x20,0xfe},{0x30,0xfd},{0x28,0xfb},{0x24,0xf7},{0x22,0xef}, {0xfe,0xdf},{0x20,0xbf},{0x20,0x7f}}; int num5[8][8]={{0x3e,0xfe},{0x02,0xfd},{0x02,0xfb},{0x1e,0xf7},{0x20,0xef}, {0x20,0xdf},{0x22,0xbf},{0x1c,0x7f}}; int num6[8][8]={{0x18,0xfe},{0x24,0xfd},{0x04,0xfb},{0x04,0xf7},{0x1c,0xef}, {0x2...