http://zebra0.tistory.com/13


임베디드 하드웨어 소프트웨어,어플 의뢰받습니다.



 

 

1.댓글 또는 이메일 남겨주시면 알람이 바로떠요 (연락처 남겨주세요)

2.인천에 미팅할공간이 있습니다.


 

#라이브러리활용 directX opengl OpenCV(영상처리, image tracking)

https://www.youtube.com/watch?v=WFhEIIiXWyQ

#웹서버 , 데이터 베이스 구축(apach2, php, mysql, IIS , node.js , mongoDB)

#각종언어 (파이썬 , C, C++, C#, java 등등)

#안드로이드, IOS 앱 개발

#윈도우 프로그래밍(각종 게임, 관리툴, 영상처리등등)

#제어(LCD, LED, 각종 모터, 각종 센서, 스피커)

#통신(Wifi, 블루투스, Uart, SPI I2C, Serial)구현

#리눅스(서버, 드라이버 개발)

#펌웨어개발

#임베디드 장비 개발

#사물인터넷 IOT(라즈베리파이, 아두이노, ATmega 등등)

-집에서 간단하게 쓸수있는것들(cctv, 도어락, 환풍, 온도조절 등등)

#FPGA (cyclone)

#다이나믹셀 (로보티즈)


임베디드 , S/W 과외합니다.

개인사업자입니다. 세금계산서 해드려요

 

 


※문의메일 양식 


ex)

이름 : 홍길동

번호 : 010-1234-1234

필요부품 : 서보모터 라즈베리파이, 카메라, Atmega 등등

제품명 : 얼굴추적, 윈도우게임, 리눅스서버

예상비용 : 80만

해당 개발제품에 대한 자세한 설명:(최대한 자세하고 상세하게 설명해주시기바랍니다)


ex)

이름 : 유길동

번호 : 010-1234-1234

필요부품 : atmega128 웹캠 ,노트북  서보모터

예상비용 : 80만

제품명 : 노트북을 웹캠을 이용한  face tracking

해당 개발제품에 대한 자세한 설명: atmega128로 servo모터를 제어하고 servo모터에 웹캠이 부착되어서 얼굴을 인식하고 따라가게됩니다.

서보모터가 2개들어가서 x 축 y축이 동시에 움직였으면 좋겠습니다.

노트북으로 영상처리를하고 atmega128과 통신으로 서보모터의각도를 전송해주고 

atmega128 에선 servo모터를 컨트롤합니다.


ex)

이름 : 김길동

번호 : 010-1342-5123

필요부품 : smart feeding system

제품명 : 

예상비용 : 80만

해당 개발제품에 대한 자세한 설명:

하루세번 서보모터를 활용하여 먹이를 자동으로 공급할수있다

servo moter supply food treeㄴ time a day for a dog

시간 설정은 블루투스로 시간설정가능

you can set the time setting via smart phone using Bluetooth

블루투스로 바로 먹이주는것이 가능

also you can instantly supply via smart phone using Bluetooth


ex)

이름 : 최길동

번호 : 010-4325-6456

필요부품 : 자세교정의자

예상비용 : 80만

제품명 : 

해당 개발제품에 대한 자세한 설명:

압력센서 또는 무게센서를이용한 올바르지않은 자세가 나왔을때 알람이 울리는 의자


ex)

이름 : 한길동

번호 : 010-1256-1324

필요부품 : 리니어 스테핑모터, 직교로봇 , atmega128

제품명 : cnc 글씨쓰기

예상비용 : 80만

해당 개발제품에 대한 자세한 설명: 하이퍼터미널을 이용해서 a~Z 를입려하면 글씨를 쓰는장비

 

 

필요부품 : 서보모터 아두이노 키패드

제품명 : 도어락

예상비용 : 80만

 

필요부품 : 다이나믹셀 ax-12a , ax-18a 터치스크린 컨트롤러

제품명 : 글씨쓰는 로봇

예상비용 : 80만

 

 



 

이메일 : itpac@naver.com


전자과 졸업작품


여러가지 전자과 졸업작품 팝니다.

영상스트리밍, 안드로이드 앱개발, 어플제어 RC카, POV 시계, 전류측정기, 

립 모션,블루투스도어락 , 태양광 충전기,지문인식시스템, 터치방지 선풍기, 로봇팔 제어,

졸음운전 제어, 라즈베리 트랙킹 RC카, 스마트윈도우, 침입감지, 블랙박스, CCTV,

OPEN CV 영상처리, 이미지트랙킹, 라이딩 방향표시기

원하는 아이디어로 튜닝해드립니다.
  
인천은 직거래나 물류로 제품 전달 가능합니다.



opencv
https://www.youtube.com/watch?v=WFhEIIiXWyQ (얼굴 추적 라즈베리파이)
https://youtu.be/6xwtLs91a3M  (보행자검출 및 추적하는 라즈베리파이)

pid제어
https://youtu.be/25nR7Ur23lQ( 볼벨런싱 훨씬 안정적)





판매된제품들은  유투브 영상에는 기능구현만 보여드리도록 최대한 정보를 제한해서 올렸어요.(-_-)
실제제품과 유투브영상을봐도 이게그건가? 라는생각이안들도록요.




전자과 졸업작품 제작한 작품입니다.

소프트웨어전공이라 
opencv(영상처리)
웹서버, DB
각종언어(c 파이썬 c++ c# 등등)
안드로이드
각종관리프로그램(윈도우프로그램)
통신
리눇스
사물인터넷 IOT
다이나믹셀등 이용해서 많은 작품을 만들었었네요
해당작품들을 모두 판매하니 연락주십시오.

https://youtu.be/AoYTtvWcMVE  자동먹이공급 시스템(개밥)


자세교정의자
cnc글씨쓰기
스마트 도어락
스마트팜
https://youtu.be/KBofgMjr4ts  글씨쓰는 로봇
장애물감지 라인트레이서
옴니휠 rc카 (메카넘휠)

이외에도 너무나 많은 작품들을 보유중입니다.
유투브에 영상도있으니 보시고 연락주시기바랍니다.

코드주석부터 핀맵핑(회로도대용) 사무실로오시면 전체적인 흐름을 설명까지해드립니다.

010-(2)7(5)4-(2)(7)(7)(0)

전자과 졸업작품


byte graph[8][8] = {
{B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00000},
{B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00000},
{B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00000},
{B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00000},
{B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00000},
{B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00000},
{B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00000},
{B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00000}
};

배열에 데이터값을 저장하고

LiquidCrystal 라이브러리

lcd.createChar
lcd.setCursor
lcd.write 함수를 사용하여 그래프를 표현할수있다

라즈베리파이 얼굴인식 해서 서보모터로 따라가기

서보모터2개

 

https://www.youtube.com/watch?v=WFhEIIiXWyQ

 

face tracking

opencv 기반 python 으로 만들었어요

static int putch_uart0(char message, FILE * stream)
{
   while((UCSR0A&0x20) == 0);
   UDR0 = message;
   if(message == '\n')
   putch_uart0('\r', stream);
   return 0;
}

 

라는 함수로 uart연결된 장비(ex: 블루투스 , serial)로 출력 한다

 

fdevopen(putch_uart0,0);를 init 부분에 넣어주면

 

printf와 putch_uart0 함수와 연결이 되면서 표준C에서 쓰는 것처럼 printf로 uart0 port 에 연결 된 장비에 출력 을 할수 있다

블루투스를 연결하여 LED제어

 

 

 

 

 

 

ex)

 

#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>

 


char rx_char(void) {
 while((UCSR0A&0x80) == 0); 
 return UDR0; }


void tx_char(char tx_data){
 while((UCSR0A&0x20) == 0); 
 UDR0 = tx_data; }

 

static int putch_uart0(char message, FILE * stream)
{
   while((UCSR0A&0x20) == 0);
   UDR0 = message;
   if(message == '\n')
   putch_uart0('\r', stream);
   return 0;
}

 

 


int main(void)
{

fdevopen(putch_uart0,0);
 char i, data;

 DDRB = 0xff;  PORTB = 0xFF;  PORTB=0x01;  
 UCSR0A = 0x00; 

 UCSR0B = 0x98;
 UCSR0C = 0x06;
 UBRR0H = 0x00;
 UBRR0L = 103;


while(1)
 {   
  data = rx_char();  

 tx_char(data);//받은데이터를 그대로 전송해줌으로인해서 데이터가 잘 도착했는지 확인한다

  if(data=='1')  {
   PORTB=0x01; 
  }
  if(data=='2')   {
   PORTB=0x00;
  }
  }
 }
return 0;
}

 

간단한 LED제어다

하지만 usb to serial(rs232) 모듈이 없고 까다로운 디버깅을 해야할때 유용하게 쓸수있다

 

'AVR' 카테고리의 다른 글

아트메가 328 부트로더  (0) 2016.07.20

블루투스를 연결하여 LED제어

 

#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>

 


char rx_char(void) {
 while((UCSR0A&0x80) == 0); 
 return UDR0; }


void tx_char(char tx_data){
 while((UCSR0A&0x20) == 0); 
 UDR0 = tx_data; }


int main(void)
{
 char i, data;

 DDRB = 0xff;  PORTB = 0xFF;  PORTB=0x01;  
 UCSR0A = 0x00; 

 UCSR0B = 0x98;
 UCSR0C = 0x06;
 UBRR0H = 0x00;
 UBRR0L = 103;


while(1)
 {   
  data = rx_char();  

 tx_char(data);//받은데이터를 그대로 전송해줌으로인해서 데이터가 잘 도착했는지 확인한다

  if(data=='1')  {
   PORTB=0x01; 
  }
  if(data=='2')   {
   PORTB=0x00;
  }
  }
 }
return 0;
}

 

간단한 LED제어다

하지만 usb to serial(rs232) 모듈이 없고 까다로운 디버깅을 해야할때 유용하게 쓸수있다

 












전자과 졸업작품 , 시제품 제작  임베디드 하드웨어 소프트웨어,어플 의뢰받습니다.

이메일 : itpac@naver.com



 뭐든지 문의주시면 대행해드립니다.

 

1.댓글 또는 이메일 남겨주시면 알람이 바로떠요 (연락처 남겨주세요)

2.인천에 미팅할공간이 있습니다.


 

#라이브러리활용 directX opengl OpenCV(영상처리, image tracking)

https://www.youtube.com/watch?v=WFhEIIiXWyQ

#웹서버 , 데이터 베이스 구축(apach2, php, mysql, IIS , node.js , mongoDB)

#각종언어 (파이썬 , C, C++, C#, java 등등)

#안드로이드, IOS 앱 개발

#윈도우 프로그래밍(각종 게임, 관리툴, 영상처리등등)

#제어(LCD, LED, 각종 모터, 각종 센서, 스피커)

#통신(Wifi, 블루투스, Uart, SPI I2C, Serial)구현

#리눅스(서버, 드라이버 개발)

#펌웨어개발

#임베디드 장비 개발

#사물인터넷 IOT(라즈베리파이, 아두이노, ATmega 등등)

-집에서 간단하게 쓸수있는것들(cctv, 도어락, 환풍, 온도조절 등등)

#FPGA (cyclone)

#다이나믹셀 (로보티즈)

#비콘 개발

임베디드 , S/W 과외합니다.

개인사업자입니다. 세금계산서 해드려요

 

 


※문의메일 양식 


ex)

이름 : 홍길동

번호 : 010-1234-1234

필요부품 : 서보모터 라즈베리파이, 카메라, Atmega 등등

제품명 : 얼굴추적

예산 : 80만

해당 개발제품에 대한 자세한 설명:(최대한 자세하고 상세하게 설명해주시기바랍니다)

이메일 : itpac@naver.com



Wiimote 를 활용한 전자칠판 




자동먹이공급시스템




볼벨런싱 




얼굴인식및 추적 


자유롭게 움직이는 실시간 카메라 스트리밍 RC카




충격감지해서 촬영하는 블랙박스  




짐을 들어올리고 내리는 라인트레이서  (사진을 클릭하시면 동작영상을 보실수있어요)





 

Analog to Digital Converter 에 대한 약자이다

아날로그 신호를 디지털값으로 바꿔주는 역할을 한다

ADC는 주로 센서(전압) 값을 읽을때 사용한다.

 

타겟보드는 Atmega128 !!

avrISP mk2에서 ISP 커넥터를 사용 했을 경우 나오는 증상이였습니다

 

 

Studio 6.2에서

Device Progamming에서 Tool항목에  AVRISP MK2 조차 뜨지않는경우

Studio 7설치

 

 

Studio 7 에서

AVRISP MK2 항목은 뜨지만 Unable to connect to toll AVRISP MkII 라는 오류가 뜰경우

 

해결방법

http://www.allkit.kr/shop/community/Community_view.php?t_id=board_20060911200705&category=&no=42&search_1=&search_2=&page=1

으로 해결 하였으나 해결이 되지않는경우

 

7에서는 해결이 안되는고 6.2 에서 해결이되어 6.2버전 사용중입니다.

 

해당 현상은 pc마다 다른것같고 os마다 다른것같으니 해결방안중 하나라고 보셔야 합니다.

 

 

http://www.atmel.com/images/atmel-1259-real-time-clock-rtc-using-the-asynchronous-timer_ap-note_avr134.pdf

▲Datasheet


http://extremeelectronics.co.in/avr-projects/avr-project-relay-timer-with-atmega8-avr-mcu/

▲Example



/******************************************************

A Simple Device Timer project designed using ATmega8


AVR MVU. The Timer is usefully for keeping a device

"ON" for a specific period of time. After the set time

elapse the timer automatically turns the load off.


The Timer uses a standard 16x2 lcd module for user interface

UI. User can set the time using a 3 button keypad.


After that Timer is started. While count down is in 

progress, the time left is displayed on screen.


The program use our LCD driver library more details

of which can be found in Web site.


Use avr-gcc + AVR Studio to compile.


Author: Avinash Gupta

E:Mail: me@avinashgupta.com

Web: www.eXtremeElectronics.co.in


*** THIS PROJECT IS PROVIDED FOR EDUCATION/HOBBY USE ONLY  ***

*** NO PROTION OF THIS WORK CAN BE USED IN COMMERIAL       ***

*** APPLICATION WITHOUT WRITTEN PERMISSION FROM THE AUTHOR ***


EVERYONE IS FREE TO POST/PUBLISH THIS ARTICLE IN

PRINTED OR ELECTRONIC FORM IN FREE/PAID WEBSITES/MAGAZINES/BOOKS

IF PROPER CREDIT TO ORIGINAL AUTHOR IS MENTIONED WITH LINKS TO

ORIGINAL ARTICLE 


Copyright (C) 2008-2009 eXtreme Electronics, India.


******************************************************/


#include <avr/io.h>

#include <avr/interrupt.h>


#include "lcd.h"


//Connection of Load

#define LOAD_DDR DDRC        //데이터방향(Direction) C포트에서

#define LOAD_PORT PORTC      //어느포트를 사용할지 결정

#define LOAD_POS PC0


//Global variable for the clock system

volatile unsigned int   clock_millisecond=0;


volatile char        clock_second=0;

volatile char        clock_minute=0;

volatile char        clock_hour=0;



void Wait(uint8_t n)

{

   uint8_t i,temp;

   temp=n*28;


   for(i=0;i<temp;i++)

   _delay_loop_2(0);

}



void LoadOn()

{

   LOAD_PORT|=(1<<LOAD_POS);

}


void LoadOff()

{

   LOAD_PORT&=(~(1<<LOAD_POS));

}

main()

{


   while(1)

   {

      LOAD_DDR|=(1<<LOAD_POS);


      LoadOff();


      //Enable Pullups on Keypad


      PORTB|=((1<<PB2)|(1<<PB1)|(1<<PB0));


      int8_t hr,min; //Target Time

      hr=min=0;


      //Initialize the LCD Subsystem

      InitLCD(0);

      //Clear the display


      LCDClear();


      //Set up the timer1 as described in the

      //tutorial

      TCCR1B=(1<<WGM12)|(1<<CS11)|(1<<CS10);

      OCR1A=250;


      //Enable the Output Compare A interrupt


      TIMSK|=(1<<OCIE1A);


      //Enable interrupts globally

      sei();


      LCDClear();

      LCDWriteString("    Welcome     ");

      LCDWriteStringXY(0,1,"   Relay Timer  ");


      Wait(4);


      LCDClear();

      LCDWriteString("Set Time - 00:00");

      LCDWriteStringXY(0,1," Start     ^");


      uint8_t selection=1;

      uint8_t old_pinb=PINB;


      while(1)

      {

         while((PINB & 0b00000111) == (old_pinb & 0b00000111));


         //Input received



         if(!(PINB & (1<<PINB2)) && (old_pinb & (1<<PB2)))

         {

            //Selection key Pressed


            selection++;

            if(selection==3)

               selection =0;

         }


         if(!(PINB & (1<<PINB1)) && (old_pinb & (1<<PB1)))

         {

            //Up Key Pressed


            if(selection == 1)

            {


               //Hour is selected so increment it

               hr++;


               if(hr == 100)

                  hr =0;

            }


            if(selection == 2)

            {


               //Min is selected so increment it


               min++;


               if(min == 60)

                  min =0;

            }


            if(selection == 0)

            {

               //Start Selected

               break;

            }



         }


         if(!(PINB & (1<<PINB0)) && (old_pinb & (1<<PB0)))

         {

         //Down Key Pressed


            if(selection == 1)

            {


               //Hour is selected so decrement it

               hr--;


               if(hr == -1)

                  hr =99;

            }


            if(selection == 2)

            {


               //Min is selected so decrement it


               min--;


               if(min == -1)

                  min =59;

            }


            if(selection == 0)

            {

               //Start Selected

               break;

            }


         }



         old_pinb=PINB;




         //Update Display


         LCDClear();

         LCDWriteString("Set Time - 00:00");

         LCDWriteStringXY(0,1," Start    ");


         //Hour

         LCDWriteIntXY(11,0,hr,2);


         //Minute


         LCDWriteIntXY(14,0,min,2);


         if(selection == 0)

            LCDWriteStringXY(0,1,">");


         if(selection == 1)

            LCDWriteStringXY(11,1,"^");


         if(selection == 2)

            LCDWriteStringXY(14,1,"^");


         _delay_loop_2(0);

         _delay_loop_2(0);

         _delay_loop_2(0);

         _delay_loop_2(0);


         _delay_loop_2(0);

         _delay_loop_2(0);

         _delay_loop_2(0);

         _delay_loop_2(0);

      }


      //Start the Load


      LoadOn();


      //Now start the timer

      clock_hour = hr;

      clock_minute = min;

      clock_second =0;


      LCDClear();

      LCDWriteString("  Power Off In ");


      while(1)

      {

         LCDWriteIntXY(4,1,clock_hour,2);

         LCDWriteString(":");

         LCDWriteIntXY(7,1,clock_minute,2);

         LCDWriteString(":");

         LCDWriteIntXY(10,1,clock_second,2);


         if((clock_hour == 0) && (clock_minute == 0) && (clock_second == 0))

         {

            //Time Out


            LoadOff();


            LCDClear();

            LCDWriteString("Load Turned Off");


            while(1)

            {

               LCDWriteStringXY(0,1,"*Press Any Key*");


               Wait(1);


               LCDWriteStringXY(0,1,"                ");


               Wait(1);


               if((~PINB) & 0b00000111)

                  break;


            }


            break;




         }


         _delay_loop_2(0);

         _delay_loop_2(0);

         _delay_loop_2(0);

         _delay_loop_2(0);

      }

   //Continue again


   }



}


//The output compate interrupt handler

//We set up the timer in such a way that

//this ISR is called exactly at 1ms interval

ISR(TIMER1_COMPA_vect)

{

   clock_millisecond++;

   if(clock_millisecond==1000)

   {

      clock_second--;

      clock_millisecond=0;

      if(clock_second==-1)

      {

         clock_minute--;

         clock_second=59;


         if(clock_minute==-1)

         {

            clock_hour--;

            clock_minute=59;

         }

      }

if( clock_hour == 1 && clock_minute==0 && clock_sec)

{

//1번LED가 켜진다 

}

   }

}

IDE Cable

Programmer 장비로 MCU칩에 넣을때는 맞춰서 연결하면 된다.



---------------------------------------------------------------------------------------------------------------

유선통신의 대표적인 형태로는 I2C, SPI가 있다.

SPI (=Serial Peripheral Interface)



▲이 통신방식은 ISP통신이고 관련자료및 약자들의 의미는 여기링크에...

http://electronics.stackexchange.com/questions/55960/difference-between-miso-mosi-and-txd-rxd

(Note!!! : 글자위에 짝대기 or 글자뒤에 프라임이 붙으면 Active Low이다. 즉, GND값이 들어가면 동작)

SCK : Clock signal from master to slave

MOSI : Master Out Slave In

MISO : Master In Slave Out

SS : Slave Select signal selects salve devices. 

SPI is a bus and can have multiple devices on the bus. 

Because of a clock signal present, SPI can be operated faster than UART.

Master와 Slave가 통신하기 위해서는 양쪽의 SS비트가 모두 Low가 되야한다.

(관련자료 링크)

+ Recent posts