[Proramming]/Android2011. 10. 3. 15:13

[Android] 안드로이드폰과 Bluetooth 모듈을 이용한 램프 제어

[[Android]  안드로이드폰과 Bluetooth 모듈을 이용한 램프 제어

 


지금까지 Android 프로그래밍에 대한 기본을 스터디 했기 때문에 좀더 실용적인 프로젝트를 진행 해 보려고 한다.
형광등 혹은 램프를 앉은 자리에서 Phone으로 제어 할수 있으면 편리 할것 같아 첫번째 프로젝트로 정했다.

 Android의 Bluetooth를 이용하면 외부 기기와 쉽게 접근 가능하고 무선으로 다양한 장치들을 제어 할 수 있다.
 Bluetooth 모듈을 이용하여 램프(형광등) 제어 하기 위해 MCU가 필요 한데 간단히 연결할 수 있는 STM32(Cortex-M3, 물론 AVR과 같은 MCU도 가능하다)보드로 준비 했다. Bluetooth 데이터를 UART로 변경해 주기 때문에 시리얼 프로그램만 하면 쉽게 해결된다.




램프 제어를 위해 SSR을 이용했다. SSR을 이용하면 MCU에서 특별한 회로 없이 바로 220V AC전원을 On/Off할 수 있다.
추가로 간단히 밝기 조절하는 LED램프도 준비 했다. 밝기는 PWM으로 제어 할 것이다.



전체 하드웨어적인 구성은 아래아 같이 구성한다.



Android 레이아웃은 아래와 같이 형광등을 On/Off하는 출력 버튼 및 LAMP의 밝기를 제어하는 PWM출력 SeekBar를 구성한다.



완성된 Android 프로그램을 다운로드 하고 실행




Android 와 Bluetooth를 이용하여 하드웨어 제어 테스트 동영상
Android Phone에서 Bluetooth모듈에 접속하여 무선으로 메세지를 전송하면 이를 받아서 형광등 On/Off 제어 및 LAMP 밝기를 제어 하도록 했다.

Posted by nexp

댓글을 달아 주세요

  1. 비밀댓글입니다

    2012.01.21 19:42 [ ADDR : EDIT/ DEL : REPLY ]
  2. qweeeq

    관리자의 승인을 기다리고 있는 댓글입니다

    2012.03.19 11:50 [ ADDR : EDIT/ DEL : REPLY ]
  3. 비밀댓글입니다

    2012.05.11 14:52 [ ADDR : EDIT/ DEL : REPLY ]
  4. 비밀댓글입니다

    2012.05.11 14:56 [ ADDR : EDIT/ DEL : REPLY ]
  5. 최진섭

    관리자의 승인을 기다리고 있는 댓글입니다

    2012.05.21 03:07 [ ADDR : EDIT/ DEL : REPLY ]
  6. 비밀댓글입니다

    2012.05.30 20:52 [ ADDR : EDIT/ DEL : REPLY ]
  7. 비밀댓글입니다

    2012.07.26 09:52 [ ADDR : EDIT/ DEL : REPLY ]
  8. 비밀댓글입니다

    2012.11.02 20:06 [ ADDR : EDIT/ DEL : REPLY ]
  9. 비밀댓글입니다

    2012.12.26 14:09 [ ADDR : EDIT/ DEL : REPLY ]
  10. 비밀댓글입니다

    2012.12.26 14:09 [ ADDR : EDIT/ DEL : REPLY ]

[Proramming]/Android2011. 10. 3. 13:30

[Android] 이더넷 WiFi모듈을 이용한 서보모터 제어

[Android] 이더넷 WiFi모듈을 이용한 서보모터 제어


Android를 이용한 하드웨어 제어를 위한 두번째 방법으로 이더넷(WiFi) 가 가능하다. Android Phone은 기본적으로 WiFi가 가능하므로 TCP/IP 소켓 프로그래밍을 이용하면 네트웍으로 연결되 장치를 제어 할 수 있다.

Android 에서 TCP/IP을 이용하여 우선 간단하게 테스트 할 수 있는 보드로 WiFi t(Wiz600) 모듈을 이용한다. WiFi AP기능을 하기 때문에 Android에서 접속 해서 무선으로 제어 가능하다.


WiFi to Serial 모듈을 USB2UART 커넥터에 연결하고 Servo Motor를 연결한다.



Android Phone에서 WiFi를 검색하면 WLANAP를 찾을 수 있고 접속할 수 있다.





Android TCP/TP Socket 통신 프로그램 작성




Andoid TC/IP 테스트 동영상

Posted by nexp

댓글을 달아 주세요

  1. 안녕하세요

    서버모터. 혹은 제가 작동하고 싶을때 모터를 움직이고 싶은데요. 제가 서버모터 나 뭐든 잘 모르겠습니다.
    질문이 몇개 있습니다.
    1. 버튼 누를떄마다 잉잉거리는 것이 서버 모터인가요? 아니면 저 메인보드 를 서버모터라고하나요??

    2. 저 제품을 제가 얻고 싶은데 안드로이드용 앱과 서버모터 둘다 어디서 구할 수 있나요?>

    2011.11.22 22:40 [ ADDR : EDIT/ DEL : REPLY ]
    • 위 예제는 RC ServoMotor 입니다.
      출력 펄스의 폭에 따라 모터의 각도가 제어되는 모터 입니다.

      판매용 제품은 아니구요. 테스트용으로 제작해 본 보드 입니다.
      좀더 자세한 사항은 메일 주세요

      2012.07.24 22:52 신고 [ ADDR : EDIT/ DEL ]
  2. 비밀댓글입니다

    2012.07.23 18:54 [ ADDR : EDIT/ DEL : REPLY ]
    • http://nexp.tistory.com/1448 를 보시면 Android에서 TCP통신에 관련된 주의 사항과 예제 소스를 찾을 수 있습니다. 참고 하세요

      2012.07.24 22:49 신고 [ ADDR : EDIT/ DEL ]
  3. ^^

    관리자의 승인을 기다리고 있는 댓글입니다

    2012.08.27 02:04 [ ADDR : EDIT/ DEL : REPLY ]

[Proramming]/Android2011. 10. 2. 20:00

[Android] TCP/IP 프로그램 테스트 - 에뮬레이터 이용

[Android] TCP/IP 프로그램 테스트 - 에뮬레이터 이용

android의 WIFI 기능을 이용하면 네트웍으로 연결된 장치들을 쉽게 제어 가능하므로 안드로이드 측에서 TCP 소켓 통신 테스트를 해 두면 여러모로 쓰일곳이 많을 것 같다.


 

 Androd TCP/IP 테스트 프로그램소스코드

AndroidTCP.zip

 


TCP 접속 처리 함수
서버 IP는 PC의 IP를 입력하면 된다.

         InetAddress serverAddr = InetAddress.getByName(serverIP); 

         try
         {
                  socket = new Socket(serverAddr, serverPort);
                   
                   ctlText1.setText("성공");
          }
          catch (Exception e)
         {
                 ctlText1.setText("실패");    
          } 


TCP전송 처리 함수
             EditText message_box;
             message_box = (EditText) findViewById(R.id.editText3)

          try
          {
             PrintWriter out = new PrintWriter(new BufferedWriter(
              new OutputStreamWriter(socket.getOutputStream())), true);
             
             out.println(message_box.getText().toString());
          }
          catch (Exception e)
          {
             ctlText1.setText("Error:" + e);    
          }


데이처 수신 처리 함수
             try
             {
              BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
              if(in != null)
              {
               DataInBuffer = in.readLine();
               tv.setText(DataInBuffer);
              }
             } catch(Exception e)
             {
              ctlText1.setText("Error:" + e);    
             }



주의사항
TCP테스틀 하기 위해서는 manifast 파일에 Uses Permission 설정을 해 주어야 한다. 설저 하지 않으면 TCP접속시 에러가 발생한다.




Android TCP 테스트
우선 가상 장치에서 TCP Client모드로 서버에 접속하는 예제 이므로, PC쪽에 서버가 필요하다.
서버 프로그램은  예전에 작성했던 TCP Server/Client Host Program(VC++) 예제 프로그램으로 테스트 한다.
  EthernetHost.exe

에뮬레이터에서 접속하면 이벤트 보내주고 데이터를 송수신 할 수 있다.




android TCP  소켓 테스트 예제 


Posted by nexp

댓글을 달아 주세요

  1. 통신

    관리자의 승인을 기다리고 있는 댓글입니다

    2013.03.06 17:02 [ ADDR : EDIT/ DEL : REPLY ]

[Proramming]/Android2011. 10. 1. 22:38

[Android] Thread 테스트 - 타이머 만들기

[Android] Thread 테스트 - 타이머 만들기

Thread를 이용하면 일정 주기로 특정한 처리를 할 수 있는 프로그램을 할 수 있다.
예를 들어 외부에 연결된 스위치를 감시 하거나, 0.1 초 주기로 센서 데이터를 읽어오거나,  TCP/IP 에서 들어온 데이터를 수신 하는등의 일을 처리 할 수 있다.

Thread 시작 함수 생성
Thread클래스를 이용하여 새로운 Thread를 생성하고 run() 함수를 재정의 해 주면 된다.

Thread 생성 방법 두가지

1) Thread 클래스를 상속받아 새로운 클래스 생성하여 run() 함수를 재정의하고 start() 함수 호출

ex) class myThread extends Thread
{
    public void run()
   {
        "   "
   }
}

myThread my_thread = new myThread();
my_rhread.start();

 

2)Runnable 인터페이스를 구현한 클래스를 만들어 run()함수를 정의 (Runnable 객체는 다른 클래스를 상속할 수 있으므로 보다 유연한다.)

ex) class myThread implements Runnable
{
    public void run()
   {
        "   "
   }
}

Thread my_thread = new Thread(new myThread());
my_rhread.start();

 


예를 들면 스위치 눌렀을 때 Thread1Start()함수를 실행하면 Thread 생성해서 동작하게 된다.
Thread에서 sleep(), wait(), yeild() 등의 함수를 호출하면 InterruptedException 이 발생할 수 있으므로 반드시 예외 처리를 해 주어야 한다.

    private void Thread1Start()
   {
        new Thread() {
            @Override
            public void run()
            {
             Timer1Process();
            }
        }.start();
    }
   
    //주기적으로 실행될 프로그램
    private void Timer1Process()
    {
     int i = 0;
        // 0.1초에 한번씩 데이터 증가
        while(true)
        {
            try
            {
               //메세지(데이터) 전송
                handler.sendEmptyMessage(i++);
                Thread.sleep(100);
            }
            catch (InterruptedException e)
            {
            }
        }
    }




메시지 처리 함수
Thread 코드 내에서는 위젯사용을 할수 없는데 이를 해결하기 위해 메시지 핸들러를 이용한다.
Thread코드 내부에서는 위젯처리할 내용에 대한 메시지만 등록하고 처리는 Handler에서 받아서 처리하면 된다.
예를 들어 아래와 같이 TextView에 증가된 출력 할 수 있다.

    //메시지 처리 함수
    Handler handler = new Handler()
    {
        public void handleMessage(Message msg)
        {
                  ctlText1.setText("" + msg.what);
        };
    };


아래와 같이 import가 필요하다.
import android.os.Handler;
import android.os.Message;



ProgressBar를 이용하여 0.1초 간격으로 증가하는 프로그램
        ctlProcessBar1 = (ProgressBar)findViewById(R.id.progressBar1);
       
        ctlProcessBar1.setMax(100);
        ctlProcessBar1.setProgress(0);

    Handler handler = new Handler()
    {
        public void handleMessage(Message msg)
        {
         ctlText1.setText("" + msg.what);
         
         ctlProcessBar1.incrementProgressBy(2);
         ctlProcessBar1.setProgress(msg.what%100);
        };
    };


Posted by nexp

댓글을 달아 주세요

[Proramming]/Android2011. 9. 29. 22:00

[Android] 기본 위젯 테스트 - 슬라이드바(SeekBar)

[Android] 기본 위젯 테스트 - 슬라이드바(SeekBar)


        SeekBar seekBar;
        seekBar = (SeekBar) findViewById(R.id.seekBar1);
       
     seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
    {
         public void onStartTrackingTouch(SeekBar seekBar)
         {
          
         } 

         public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch)
         {
          //SeekBar 값 표시
          ctlText1.setText("PWM:"+progress+"%");
         }

         public void onStopTrackingTouch(SeekBar seekBar)
      {
      }
   });


Android SeekBar 테스트 실행 화면
Posted by nexp

댓글을 달아 주세요