'컨버젼스'에 해당되는 글 18건

  1. 2015.11.15 라즈베리파이 무선랜동글들에 대한 리뷰
  2. 2015.07.05 HC06 블루투스모듈 AT사용기
  3. 2015.05.21 firmata 프로토콜분석
  4. 2015.01.15 라즈베리파이에서 웹캠제어하기
  5. 2015.01.12 node.js 로 라즈베리 i2c 사용해보기
  6. 2014.12.01 neopixel 사용기
  7. 2014.09.08 아두이노유노 에서 3.3V 용 ic2 통신을 위한 레벨변환기 사용기
  8. 2014.08.04 arduino pro mini 와 mpu9150 자이로센서 사용기
  9. 2014.07.13 아두이노용 씨리얼 테스트 코드
  10. 2014.06.03 msp430 launchpad pin 접근하기

라즈베리파이 무선랜동글들에 대한 리뷰

|

상기 내용은 계속 추가할예정입니다. 혹시 공유하고싶은 내용이 있으시면 댓글남겨두시면 감사하겠습니다.


파이와 궁합이 좋은것을 화이트리스트라고 하고 그렇지않으면 블랙리스트로 하겠습니다.


1. 화이트리스트


-iptime N100 mini

-iptime N100 miniAP


2. 그레이 리스트 

-iptime N300UA

 : 직접확인은 아직안해보았지만  (http://zzulog.tistory.com/category/Embedded%20Software/Rasberry%20Pi)

확인결과 station 모드로는 동작하지만 dhcp 데몬이동작하지않아서 AP세팅은 되지않는것같음


2.블랙리스트


-iptime N150UA

: 구글링해보면 어찌어찌 붙였다고 하는 분들몇분계시는데 글읽어보시면알겠지만...그냥 버리고 다른거 사시는 편이...

(http://www.slideshare.net/juhyeonyeom9/iptime-150u-a)


-iptime A2000U 

: 드라어버를 잡지못함 동작하지않음



'컨버젼스' 카테고리의 다른 글

HC06 블루투스모듈 AT사용기  (0) 2015.07.05
firmata 프로토콜분석  (0) 2015.05.21
라즈베리파이에서 웹캠제어하기  (0) 2015.01.15
node.js 로 라즈베리 i2c 사용해보기  (0) 2015.01.12
neopixel 사용기  (0) 2014.12.01
And

HC06 블루투스모듈 AT사용기

|

페어링되지않는 상태에서 씨리얼모듈과 연결합니다.

(당연한 이야기지만 페어링이 되면AT모드는 동작하면안되겠지요?)




사진처럼 rx,tx 를 서로 교차해서 연결해주고 5v,grd 에 서로 연결합니다.


아두이노 ide를 실행합니다.

블루투스모듈에 연결된 씨리얼포트를 지정합니다.



씨리얼모니터를 실행시킵니다.(우상단 돋보기아이콘 클릭~)


이렇게 하면 페어링접속이 아니므로 비밀번호는 없습니다.

AT 라고 입력하셔셔 OK가 나오는지 확인합니다.

대부분의 hc06 모듈은 초기 보더레이트가 9600입니다. 만약 보더레이트가 다르면 동작하지않습니다.(자세한 내용은 구입처에 문의 하시기바랍니다.)

일단 이렇게 접속이 성공하면 당신은 관리자권한으로 접속을 하게된 것입니다.

그리고 한가지 주의하실점이 No line ending 을 선택하셔야합니다. 그렇지않으면 AT다음에 개행문자가 넘겨져서 AT커멘드가 명령을 처리하지않습니다.




간단하게 AT명령어를 정리 하면 다음과 같습니다.


--[[


==이름변경
AT+NAME<원하는 이름>
예>
AT+NAMEgbox3d
이름을 'gbox3d' 로 변경

==패스워드변경
AT+PIN<암호>
예> 
AT+PIN1234
암호를 '1234' 로 변경

==보더레이트변경
AT+BAUD<원하는 보더레이트>
예>
AT+BAUD4
9600으로 보더레이트변경하기
(1:1200, 2:2400, 3:4800, 4:9600, 5:19200, 6:38400, 7:57600, 8:115200, 9:230400, A:460800, B:921600, C:1382400)


<주의사항 > 공백문자 없이 파라메터를 넘긴다.


참고


]]--











And

firmata 프로토콜분석

|


1. pin mode


커멘트는 0xf4 입니다. 뒤로 핀번호와 핀의 모드가 차례로 옵니다.


input/output/analog/pwm/servo

     0 /         1/        2/       3/     4


13번핀을 입력모드로 세팅하는 예제입니다.

0x4f,13,0



2. digital write


명령어는 앞4비트의 값은 1001(0x9) 입니다. 뒤에 포트번호가 옵니다.(0~15)


총 16개의 포트가 존재합니다.

0~7핀 -> 0번포트

8~15 -> 1

..

120~127 -> 15번 포트


그래서 포트를 얻는 방법은 pin/8 의 몫이 포트가 됩니다. 

0번 포트는 0x90, 1번 포트는 0x91 됩니다.


포트당8개의 io가존재합니다. 두개의 바이트로 7개 1개로 나누어서 표시합니다.


아래 표처럼 5번핀은 포트0번의 io 5번 입니다.


 7

4

 0

 

 

 

 

 

 

 

 

그래서 5번핀에 HIGH를 넣어주려면 다음과 같은 코드가 됩니다.

0x90,0x20,0x00


13번핀은 1번 포트입니다. 1번포트는 최하위비트가 8이됩니다.(8번핀)


15

14 

13 

12

11 

10 

 0

 

 

 

 

 

 

 

 


HIGH넣어 주려면 다음과 같습니다.

0x91,0x20,0x00


2. digital read


포트단위로스캔여부를 지정하는 방식입니다.


 커멘드 바이트는 다음과 같이 구성됩니다.

7~4 

 3~0

 1101,(0xD)

0~15  포트번호


두번째바이트는 스캔여부를 묻는 바이트입니다. 0이면 스캔중지 1이면 스캔시작입니다.

10,13번핀을 읽고 싶다면 모두 1번포트이므로 다음과 같이 해줍니다.

0xf4,13,0

0xf4,10,0 --> 인풋모드 설정

0xD1,1 -->1번포트 스캔시작


3. analog


4. pwm


5. servo


6. 기타


0xf9 프로토콜버전 뒤에오는 두바이트가 마이너, 매이져 숫자

0xff 소프트웨어 리셋 


참고자료

http://firmata.org/wiki/Protocol#I.2FOs_Supported


https://github.com/jgautier/firmata

https://github.com/firmata/arduino

And

라즈베리파이에서 웹캠제어하기

|

먼저 기나긴 여정이 될것이므로 마음을 단단히 먹고 시작해야합니다.

일단 opencv라는것을 먼저 설치해야합니다.


http://robertcastle.com/2014/02/installing-opencv-on-a-raspberry-pi/


여기는 2.4.8로 설명되어있는데 저는 2.4.10으로 했습니다. 3.0은 잘모르겠네요.


따라서 하시면 컴파일해서 설치까지 10시간정도 걸립니다.(컴파일 시간이 대부분..)



그런 다음 

sudo ldconfig -v

해줍니다. 동적라이브러리 패스가 설정됩니다. 이단계를 안해주면 동적 라이브러리를 찾지못해서 에러가 발생합니다.

참고

http://ubuntuforums.org/showthread.php?t=2109967


추가적으로 

sudo apt-get install v4l2ucp v4l-utils libv4l-dev

설치해줍니다. 안해도 되긴합니다.


마지막으로 npm을 설치해줍니다.

sudo npm install opencv -g

sudo npm install camera -g


실제로 캠관련어플은 camera를 주로 사용해서 개발합니다. 

다음은 간단하게 스냅샷을 찍는 예제입니다.


fs = require ('fs');
camera = require ('camera');

webcam = camera.createStream(0);


webcam.on('data', function(buffer) {
fs.writeFileSync ('cam.jpg', buffer);
console.log('capture..');
//webcam.destroy();
});









And

node.js 로 라즈베리 i2c 사용해보기

|


 i2c 하나의 선로로 여러개의 데이터버스들을 공유할수있습니다.


여기에서 노드용 i2c 플러그인을 받아서 설치합니다


https://github.com/kelly/node-i2c 


기본적으로 라즈베리파이는 i2c를 사용하지못하도록 되어있습니다. 

이 설정을 풀기위해서...

몇가지 설정해야하는것들이 있는데 위의 링크에 자세히 나와있습니다.


-오픈 하기

var wire = new i2c(address, {device: '/dev/i2c-1'});

i2c 통신 객체를 생성합니다.

첫번째인자는 address 로 주소값입니다. 연결하려는 디바이스 스펙을 참고하시면됩니다.


-주소 검색함수

scan 은 어드레스를 검색합니다. wire 의 멤버함수인데...자기주소외에 다른 주소도 검색합니다. 먼가좀 이상하긴합니다...


-쓰기 함수


writeByte 함수입니다.

첫번째인자 comand

두번째인자 전송할데이터 배열

새번째 결과값 콜백함수 인자로 에러값이 넘어온다. 에러가 없으면 undefined


command라는게 사실 첫번째 전송하는 바이트 같습니다. 

한바이트만 정송하는것이면 커멘트가 생략됩니다.


writeByte(0x02,[0x50,0x51 , callback)  은 


writeByte(0x02 , callback)

writeByte(0x50 , callback)

writeByte(0x51 , callback) 하고 같지않을까하는 추정을 합니다.(나중에 실험해보고 다시 올리겠음. 2015.1.12)


예>

wire.writeByte(byte, function(err) {});

wire.writeBytes(command, [byte0, byte1], function(err) {});



-읽기함수


wire.readByte(function(err, res) { // result is single byte })

wire.readBytes(command, length, function(err, res) {
  // result contains a buffer of bytes
});


첫번째인자 는 커멘트값

두번째인자는 전송받을 바이트수

새번째인자는 콜백입니다.


쓰기함수하고 비슷하게 한바이트만 읽으면 커멘트값이 없습니다.



readByte(0x02,2,callback) 은


writeByte(0x02 , callback)

readByte(function() {

readByte(function() {

});

});

하고 같지 않을까 역시 추정을...


-스트림(?)


wire.on('data', function(data) {
  // result for continuous stream contains data buffer, address, length, timestamp
});

wire.stream(command, length, delay); // continuous stream, delay in ms



타이머로 매번 read하는것하고 비슷하게 동작하는것 습니다. on('data',callback) 으로 값을 받아옵니다.

delay 값이 타이머 딜레이값하고 같습니다.(그만큼 기다렸다가 다시 읽어오기)

한가지 확인한점은 동시에 두개의 주소를 번갈아 가면 하지는 않는것같습니다.

(wire를 1,2로 두개 만들어서 한결과 한값만 받아옴)

대신 setInterval로 하면 가능합니다.














And

neopixel 사용기

|

에이다프르트사의 네오픽셀 16이라는것을 2개 구입했습니다.


소스에 보면 NUMPXELS 라는게16으로 되어있습니다. 그래서 수정없이 그냥 주입시켰습니다.



사진처럼 6개만 불이 들어옵니다. 16개 모두 들어오지않습니다. 으응? 머지?



와이어링은 주석에나오대로 그대로 했습니다.




6번 핀에 데이터 input을 연결했습니다.



납땜상태도 이상없습니다.





두번째 것입니다. 결과가 다르게 나옵니다.

같은 소스에 똑같이 와이어링했는데 이번에는 15개 불이 들어오긴하는데 색상이 엉망으로 나옵니다.






And

아두이노유노 에서 3.3V 용 ic2 통신을 위한 레벨변환기 사용기

|

이렇게 생긴 제품입니다.


아두이노 유노는 기본 5V로 되어 있어서 3.3v용 센서모듈에 맞게 전압을 맞춰 주기 위해서 사용하는 제품입니다.

아두이노 유노의 3.3v에 직접 연결해서 써도 센서값은 잘받아지긴합니다만 센서에 무리가 갈수 있다고 합니다.




제품구매처 :


http://artrobot.co.kr/front/php/product.php?product_no=940&main_cate_no=36&display_group=




연결방법참고자료 



참고자료그림은 아마도 씨리얼 통신예제인합니다.


i2c 통신을 위해서는 rx,tx 대신에 sal,scl 로 바꿔주면됩니다.


중요한건 전원연결인데 정리하면 다음과 같습니다.

아두이노측 / 레벨변화기측 / 센서모듈측

GND         -> GND | GND  -> GND

5V           ->  hv    | lv      -> VCC

3.3v        ->  lv   



a4(sda) -> hv2 | lv2   -> sda

a5(scl)  -> hv1 | lv1   -> scl






And

arduino pro mini 와 mpu9150 자이로센서 사용기

|

일단 이건데...

https://github.com/sparkfun/MPU-9150_Breakout


구입은 여기서 했습니다.


pro mini

http://artrobot.co.kr/front/php/product.php?product_no=673&main_cate_no=7&display_group=1


9150 모듈

http://artrobot.co.kr/front/php/product.php?product_no=753&main_cate_no=&display_group=


일단 pro mini 의 정보입니다.


회로도


핀배열 설명 입니다.





출처 : http://www.igameplusshop.com/shop/goods/goods_view.php?goodsno=118&category=003009002


내용보면 a4,a5 가 SDA, SDL 입니다. i2c통신 할때 참고 하시면 될듯합니다.




일단 연결은 다음과 같이 합니다.


(arduino)   (9150)

a4        -> sda

a5       -> sdl

vcc      -> vcc

gnd     -> gnd


이렇게 4선만 연결하면 됩니다.



깃허부에 올려진 소스를 다운받습니다. (https://github.com/sparkfun/MPU-9150_Breakout)


압축을 풉니다.


firmware 폴더에 있는 i2Cdev 폴더를 아두이노 라이브러리에 추가 합니다.




sample 펄더에 있는 MPU9150_raw 예제를 실행시켜줍니다.













And

아두이노용 씨리얼 테스트 코드

|

안드로이드와 하거나 다른 기기와 테스트할때 가능함

아두이노쪽에서 주기적으로 틱이 날라오고 메씨지를 보낼경우 에코해줌





/* Copyright 2012 Google Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
 * USA.
 *
 * Project home page: http://code.google.com/p/usb-serial-for-android/
 */

// Sample Arduino sketch for use with usb-serial-for-android.
// Prints an ever-increasing counter, and writes back anything
// it receives.

static int counter = 0;
void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.print("Tick #");
  Serial.print(counter++, DEC);
  Serial.print("\n");

  if (Serial.peek() != -1) {
    Serial.print("Read: ");
    do {
      Serial.print((char) Serial.read());
    } while (Serial.peek() != -1);
    Serial.print("\n");
  }
  delay(1000);
}



And

msp430 launchpad pin 접근하기

|


런치페드는 아두이노와는 다르게 포트번호게 P1.1 이런식으로 표기 되어 있습니다.







 P1.6 , P2.0 으로 표시된 핀들에 연결을 했습니다.


 p1.6 번으로 표기된 핀은 P1_6 으로...

 p2.0 번으로 표기된 핀은 P2_0 으로 접근하실수 있습니다.


예>

 pinMode(P1_6,OUTPUT);


테스트 동영상입니다.





예제소스>


/*

  DigitalReadSerial with on-board Pushbutton

  Reads a digital input on pin 5, prints the result to the serial monitor 

 

  Harware Required:

  * MSP-EXP430G2 LaunchPad

  

  This example code is in the public domain.

 */


int pushButton = P1_1;

int pushButton2 = P2_1;


int testLed = P1_6;

int testLed2 = P2_0;


// the setup routine runs once when you press reset:

void setup() {

  // initialize serial communication at 9600 bits per second:

  Serial.begin(9600); // msp430g2231 must use 4800

  // make the on-board pushbutton's pin an input pullup:

  pinMode(pushButton, INPUT_PULLUP);

  pinMode(pushButton2, INPUT_PULLUP);

  

  pinMode(testLed,OUTPUT);

  pinMode(testLed2,OUTPUT);

}


// the loop routine runs over and over again forever:

void loop() {

  // read the input pin:

  int buttonState = digitalRead(pushButton);

  // print out the state of the button:

  

  if(buttonState) {

    digitalWrite(testLed, HIGH); 

  }

  else {

    digitalWrite(testLed, LOW); 

  }


  if(digitalRead(pushButton2)) {

    digitalWrite(testLed2, HIGH); 

  }

  else {

    digitalWrite(testLed2, LOW); 

  }

  

  Serial.println(buttonState);

  delay(1);        // delay in between reads for stability

}






And
prev | 1 | 2 | next