블로그 검색
AVR 명령어 검색
전자부품 검색

서보모터가 생겨서 아두이노로 한번 돌려봤습니다.

생각보다 무지 간단하네요.
서보에 3가닥 선으로 되어 있습니다.
+- 전원 두가닥과 신호선 1가닥입니다.
전원선은 각각 5V(Vcc)와 GND에 연결하고, 나머지 1개 신호선은 PWM핀 아무거나에 연결하면 됩니다.
저는 10번핀에 연결했습니다.

서보모터에는 톱니가 있는 축으로 되어 있는데 가운데 구멍이 있길래...돌아가는거 잘 보이라고 않에 와이어를 꽂아 봤습니다.

간단하지요?




역시 폰카입니다...ㅜㅜ

소스는 arduino.cc의 servo 샘플소스입니다. 출처: http://arduino.cc/en/Tutorial/Sweep

myservo.write(pos); 함수에 pos에 각도만 주면 그 각도로 움직이네요.
서보모터의 회전 범위 역시 0 ~ 180도로 회전하네요.

Posted by pepsiman
comments powered by Disqus
아두이노 전압계 와 processing 만 있으면 아두이노를 오실로스코프로 활용할수 있습니다.

일단 아두이노는 이전 포스팅의 전압계 프로그램을 넣어 놓습니다.

processing라는 프로그램을 다운 받아 설치합니다.


processing에 다음 코드를 붙여 넣게 합니다.
/*
 * Oscilloscope
 * Gives a visual rendering of analog pin 0 in realtime.
 * 
 * This project is part of Accrochages
 * See http://accrochages.drone.ws
 * 
 * (c) 2008 Sofian Audry (info@sofianaudry.com)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program 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 General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */ 
import processing.serial.*;

Serial port;  // Create object from Serial class
int val;      // Data received from the serial port
int[] values;
String s;

void setup() 
{
  size(640, 480);
  // Open the port that the board is connected to and use the same speed (9600 bps)
  port = new Serial(this, "COM3", 9600);
  values = new int[width];
  smooth();
}

int getY(int val) {
  return (int)(val / 600.0f * height) - 1;
}

void draw()
{
  while (port.available() >= 1) {
    //if (port.readString() == 0xff) {
    //  val = (port.read() << 8) | (port.read());
    //}
    s = trim(port.readString());
    val =   int(s );
    println(val);
  }
  for (int i=0; i<width-1; i++)
    values[i] = values[i+1];
  values[width-1] = val;
  background(0);
  stroke(255);
  for (int x=1; x<width; x++) {
    line(width-x,   height-1-getY(values[x-1]), 
         width-1-x, height-1-getY(values[x]));
  }
}
원본코드를 아두이노 전압계에 맞게 약간 수정 했습니다.
아두이노에서 시리얼 포트(제꺼에서는 COM3)쪽으로
119
399
47
499
38
169
436
13
499
이런 식으로 출력 됩니다
이걸 processing에서 받아서 그래프로 출력합니다.



결과물을 볼까요?

아두이노의 ADC가 여러개 있으니 다채널도 가능하겠지요.
Posted by pepsiman
comments powered by Disqus
2009/05/19 arduino에 사용가능한 이더넷 모듈에서 소개했던 WIZ811MJ이 도착했습니다.
사실 벌써 도착했는데 만질 시간이 없어서 못하고 있었다는...

보시다 시피 썰렁하게 연결되어 있는데, 간단한 연결(6핀)만으로 아두이노를 인터넷에 연결이 가능합니다.

사진과 같이 연결하였고, 연결은 엉성해도 동작은 잘 되더군요. ^^

필요한 핀에만 소켓을 끼웠습니다.

많은 핀중에 6개만 사용하면 됩니다. 나머지 하나는 리셋핀....

조그만한게 귀엽게 생겼죠? ^^;


WIZ811MJ 모델은 2.54mm 간격의 40핀으로 핀이 구성되어 있습니다. 듀얼핀이라 브레드보드에 직접은 안되네요.
아두이노와 각 핀의 연결은 위의 그림과 같이 D10~D13, 3V3, GND 6개의 핀을 연결합니다.
아두이노 두에밀라노브(데시밀라)에는 3.3v 출력이 있어서 직접 연결이 가능합니다.



WIZ811MJ는 arduino ethernet shield와 같은 칩을 사용하기 때문에 라이브러리도 호환된다는것이 최대 장점이라고 할 수 있습니다. 이미 만들어져 있는 아두이노 이더넷 라이브러리를 가져다 쓰기만 하면 됩니다. 예제까지도....

아두이노 소스는 아두이노 웹서버로  Examples/Library-Ethernet/WebServer 에 있는 예제를 사용해봤습니다.

/*
 * Web Server
 *
 * A simple web server that shows the value of the analog input pins.
 */

#include 

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 20 };

Server server(80);

void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if we've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so we can send a reply
        if (c == '\n' && current_line_is_blank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          
          // output the value of each analog input pin
          for (int i = 0; i < 6; i++) {
            client.print("analog input ");
            client.print(i);
            client.print(" is ");
            client.print(analogRead(i));
            client.println("
"); } break; } if (c == '\n') { // we're starting a new line current_line_is_blank = true; } else if (c != '\r') { // we've gotten a character on the current line current_line_is_blank = false; } } } // give the web browser time to receive the data delay(1); client.stop(); } }
소스중 위의 mac과 ip 부분은 자신에 맞게 수정해야 합니다.

WIZ811MJ는 DHCP를 지원하지 않는데, 아마도 DHCP기능이 없어서 그냥은 연결이 안되는듯합니다.
소스의 빨간색부분을 공유기의 IP 수동할당에 추가하고, 오른쪽에 추가버튼을 누르면 왼쪽에 추가 됩니다.


브라우저에서 설정한 IP로 아두이노에 접속한 모습입니다. 아날로그 핀의 값을 출력하는 웹서버 프로그램입니다.

이제 아두이노에 달린 날개를 잘 활용하는 일만 남았네요. ^^
Posted by pepsiman
comments powered by Disqus

LCD 화면을 지우고 싶으면 D7~D0에 00000001 즉 0x01을 command로 보내면 됩니다.
위치 지정 명령은 1xxxxxxx 인데, 첫번째 줄은 0x80~0x8F, 두번째줄은 0xC0~CF 를 command로 보내면 됩니다.



Posted by pepsiman
comments powered by Disqus
아두이노(arduino)에서 2색 도트매트릭스를 구동시켜 보았습니다.

부품

아두이노(arduino)
도트매트릭스(DotMatrix 8x8 2색)
74HC595 x2
74HC138


나름 하트를 그려봤는데 생각만큼 이쁘게 나오진 않는군요 ^^;


배선이 좀 많이 들어가네요
핀은 24핀으로 위에 12, 아래 12개 입니다.
핀소켓에 납땜으로 배선을 연결했습니다.
전선이 부드러운줄 알았는데 연결하고 나니 엄청 뻣뻣하네요 ㅜㅜ


1번핀 - [LED1-],   2번핀 - [LED1적+], 3번핀 - [LED1녹+], 4번핀 - [LED2-],   2번핀 - [LED2적+], 3번핀 - [LED2녹+]......
위 사진상으로 보면 모델번호를 위로 놓고 볼때 우상터 1~12, 우하 13~24번 입니다.




가장 왼쪽 브레드보드 대신에 도트매트릭스라고 보고
이 보드의 red에 연결된 흰색 배선 위쪽부터 도트매트릭스의 2,5,8,11,14,17,20,23,
green에 연결된 배선 위쪽부터 도트매트릭스의 3,6,9,12,15 18,21,24 번에 연결합니다.



74HC138 디코더 입니다.
Y0 ~ Y7 은 도트매트릭스의 1,4,7,10,13,16,19,22에 각각 연결합니다.
4, 5번 핀은 GND, 6번핀은 VCC에 연결합니다.
A0~A2는 아두이노의 digital 5~7에 연결합니다,







소스

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

//holders for infromation you're going to pass to shifting function
byte data;
byte data2;
byte dataArray[10];
int val=0;

void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  // 74HC138N 
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  Serial.begin(9600);

  dataArray[0] = 0x24; //00100100
  dataArray[1] = 0x5a; //01011010
  dataArray[2] = 0x81; //10000001
  dataArray[3] = 0x81; //10000001
  dataArray[4] = 0x81; //10000001
  dataArray[5] = 0x42; //01000010
  dataArray[6] = 0x24; //00100100
  dataArray[7] = 0x18; //00011000
}

void loop() {
  for (int j = 0; j < 8; j++) {
    //load the light sequence you want from array
    data = dataArray[j];
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, 0);

    shiftOut(dataPin, clockPin, LSBFIRST, 0); 
    shiftOut(dataPin, clockPin, LSBFIRST, data); 
    digitalWrite(7, j>>2 & 0x1);
    digitalWrite(6, j>>1 & 0x1);
    digitalWrite(5, j & 0x1);

    digitalWrite(latchPin, 1);
    delay(1);
  }
}


선이 뻣뻣해서 매트릭스가 공중에 떠버렸습니다.
깔끔하게 하려면 만능기판으로 옮겨야할듯싶네요. 다시만들어야겠네....ㅜㅜ

원래 2색인데, 2색 모두 구동 됩니다만 데이타 만들기 귀찮아서 단색만 했습니다.
회로는 2색 모두 지원합니다.
저항 연결하니 빛이 어두워서 저항도 연결하지 않았습니다.

Posted by pepsiman
comments powered by Disqus
이 글은 arv을 배우려는 사람보다는 저처럼 비 전공자(피지컬 컴퓨팅, 미디어아트, 인터렉티브 미디어 분야등)가 avr에 관심을 갖고 계신분에게 더 유용할꺼라 생각됩니다.
처음 이쪽 분야를 접하고 arduino나 wiring, atmega128(avr 중하나)을 접하면서 선택의 기로에 서게 됩니다.
이때 이글이 도움이 되길 바랍니다.

1. Arduino
아두이노 데시밀라는 atmega168 칩을 사용합니다
칩만 보면 메모리는 8k이고 가격은 4천원대 입니다.(디바이스마트)

아두이노 두에밀라노브는 328(메모리 32k)을 사용하고 국내 정식(플러그하우스)판매가격은 3.9만원 합니다, ($29.95)

아두이노 데시밀라는 168 사용(메모리 16k)

아두이노 미니는 168을 사용하고 국내 정식판매가격은 4.8만원 합니다 ($33.95)

arduino nano는 별로 특징이 없네요. 미니 usb를 가지고 있어 좋기는한데 너무 큰듯한...

최근에 나온 아두이노 메가는 1280칩(메모리 128k)을 사용하고 


1-1 . Arduino 호환보드


아두이노스토리 카페의 딸기보드는 카페에서 공동 제작 형식으로 판매했던것 같은데 사용자가 많지않아 더이상 생산은 어려울것 같습니다.

AVRTOOLS에서 아두이노 데시밀라(168) 호환보드를 팔고 있고, 아두이노 미니 호환 보드도 팔고 있는데 가격도 저렴하고 크기도 작아 상당히 매력이 있네요.

2. Wiring

와이어링에서 사용하는 atmega128 칩은 128k 메모리에 6~7천원 합니다.(디바이스마트)
Wiring-IO (atmega128)를 샘플전자에서 17.6만원에 팔고 있네요ㅡㅡ; (이런 날...)

Wiring mini 샘플전자에서 12.1만원에 팔고 있습니다

2-2. Wiring 호환보
샘플전자에서 와이어링 미니 호환보드를 2.9만원에 판매하고 있습니다.


3. AVR

AVR은 ATmel사의 mcu로 메모리와 속도등에 따라 상당히 많은 종류가 있습니다.
그중에 가장 가격대비 성능이 좋은 atmega128이 많이 쓰이는것 같습니다.(6~7천원대)
외국에서는 attiny2313 칩도 많이 쓰더군요(2000원정도)

이러한 128보드는 1만원대 부터 다양하게 있는데 가장 싼것들은 mcu에 핀만 연결해놓은것으로 다용도로 쓸수 있고 가격도 쌉니다. arduino나  wiring도 이런 기본 보드에 속합니다.
비싼보드는 여러가지 센서나 스위치, LCD등을 붙여 놓아 별도로 구입하는 번거로움을 없에기는 했으나 가격이 꽤 비쌉니다. 
이런 교육용보드중에 유명한것으로는 네이버의 당근이의 AVR갖고 놀기 카페의 당근보드(atmega32)와 아두이노스토리 카의 체리보드(atmega128)가 있고 이들을 이용하면 카페에서 지속적인 도움을 받을수 있어 편리합니다.
당근보드 메인4만원 + 디스플레이보드 4만원

체리보드 5.5만원(2009.06.08 현재 공구중 - 아두이노 스토리카페)



4. avr을 arduino로 만들기

atmega168 보드들은 아르두이노 부트로더를 올리면 아르두이노로 쓸수 있습니다.
atmega128 보드들은 와이어링 부트로더를 올리면 와이어링으로 쓸수 있습니다.(32.768K의 크리스탈을 달아야만 합니다)

이방법이 가장 저렴하긴한데 좀 번거롭습니다.
그리고 초기에는 그다지 저렴하지도 않고요. (이것 저것 준비할게 많습니다. ISP, usb2uart)

작은태양님께서 atmega168(AVRMall) 보드에 arduino 부트로더를 올려 아르두이노로 만드는 과정을 포스팅해 놓으셨습니다. http://tinysun.net/8

동작시켜보기 위한 과정을 간단히 요약해보면
부트로더 심기
1) 아르두이노 부트로더 다운로드
2) atmega168에 ISP를 연결하여 부트로더 업로드
사용하기
3) usb2uart 연결하기
4) IDE 에서 프로그램 작성 및 컴파일
5) arduino(atmega168)에 프로그램 업로드
6) 동작

1),2) 만 하면 아르두이노가 만들어 진겁니다.
하지만 avr(atmega168)이나 아르두이노 미니 같은경우 USB 포트가 없기 때문에 usb2uart 모듈을 이용하여 프로그램을 업로드 해야 합니다.
저근 이부분이 이해가 안돼서 처음에 무지 고생했지요.

직접 만들어보는것도 좋지만 호환보드들도 워낙 저렴하니 호환보드를 구입해서 쓰는것도 추천할만한 방법입니다.
Posted by pepsiman
comments powered by Disqus
얼마전 arduino에 인터넷에 연결하기 위한 모듈이 nemo10과 rj45잭을 구입했습니다
수아파파님 블로그를 열심히 들여다 보고 회로도도 보고 해서 빵판에 여기 저기 연결해 보았으나  아직 지식이 부족한건지 이해도 잘 안되고 어디가 문제인지 파악도 어렵고, 그리서 일단 보류하고 있던중....
수아파파님 블로그에 놀러 갔다가 나우테스님의 리플을보고 techblog.tistory.com에 방문해 wiznet의 이더넷 모듈을 알게 되었습니다.

W5100칩 안에 TCP, UDP, IP, ARP, ICMP, IGMP, PPPoE, MAC 프로토콜과 PHY 까지 모두 내장 되어 있는 것 같습니다.
모듈에는 rj45잭까지 붙어 있으니 바로 arduino에 붙이 SPI통신만 하면 될꺼 같습니다.
arduino에서 사용하는 이더넷 라이브러리도 바로 사용가능 하다니 현재로서는 최상의 선택인듯합니다.
그래서 바로 구입...


나우테스님의 포스팅에 810모델은 핀간격이 2mm라고 해서 다른 모델을 보니 핀간격이 2.54mm인 811모델이 있길래 그것을 주문했습니다.

위즈넷 홈피에있는 각 모듈별 호환표 입니다.

  WIZ810MJ WIZ811MJ WIZ812MJ
Architecture TCP/IP W5100
PHY Embedded in W5100
Mag Jack PPT RJ113BZ
Interface 10/100 Base-T Ethernet (Auto Detection)
Network Protocol TCP, UDP, IP, ARP, ICMP, IGMP, PPPoE, MAC
Dimension(mm) 52 x 25 x 21
(W x H x D)
55.5 x 25 x 23.5
(W x H x D)
55.5 x 25 x 23.5
(W x H x D)

Connector Type

2mm pitch
14 x 2 header

2.54mm pitch
10 x 2 header

2.54mm pitch
10 x 2 header

J2:9 GND
->RX_LED

J2:10 GND
->TX_LED

J2:19 GND
->LINK_LED
PCB Through Hole X

Two PCB Throughhole
(ø3.00mm)

Four PCB Throughhole
(ø3.00mm)
SPI Signal Pin Shared for SPI
and BUS signals
Separated for
SPI signals
(SPI_EN controlled by /SCS signal)
Separated for
SPI signals
(SPI_EN controlled by /SCS signal)
LINK LED When the link is established,
LED is on and flashes
at the TX or RX
When the link is established,
LED is on,
but not flashes
at the TX or RX
Input Voltage 3.3V internal operation and 5V tolerant I/Os
Power Consumtion 10/100 baseT max. 185mA (3.3V)


도착하면 다시 포스팅하겠습니다.



추가)
나우테스님이 소개해주시기 전에는 위드로봇에 e2net 이라는 모델을 보고 있었습니다.
이 모델도 SPI 통신을 하고 좋은 점은 브레드보드에 직접 연결가능한 핀과 적은 핀수....
허나 결정적으로 TCP 프로토콜을 직접 프로그램해줘야 한다네요. 소스는 물론 회사에서 제공하고 있으나 avr의 메모리를 차지한다는 단점때문에 wiznet 모델로 선회하게 되었습니다.


위 모델입니다. 생긴건 심플하니 괜찮은데....
ENC28J60 라는 칩을 사용한다는군요.
Posted by pepsiman
comments powered by Disqus
LCD를 연결하고나니 활용방안이 많네요.
지난번 arduino 전압계에 이어 요번엔 자전거용 속도계를 만들어봤습니다.

회로는 전압계와 비슷합니다. 전압계는 아날로그 입력을 사용했고, 속도계는 디지털입력을 사용한다는 차이뿐
하지만 프로그램은 약간더 복잡하지요.

사용부품

[플러그하우스판매]아두이노 두에밀라노브 1개
usb케이블 1개
[디바이스마트]점퍼와이어 (피복 안에 선이 하나로 된 전선) 1m 이상
캐릭터LCD 16x2 14핀(또는 16핀 - 백라이트지원) 1개
핀헤더 Single 1x40Pin Straight(2.54mm) 1개
ND자석 (네오디움) 10pi x 2T 1개
리드스위치 PMC1001 1개
(* 리드스위치는 잘 망가지니 여분으로 하나 정도는 더 구입하시길)
9v 배터리스넵  Snap.I-3(for 9V)  1개
dc 플러그 2.5pi 1개
브레드보드 WBU-D, WBU-T 각 1개
저항 10K옴 1개
TRIMMER(가변저항) WIW1036(3323 Series)-10KΩ 1개

기타 [디바이스마트 또는 동네 전파사]
인두 1개
실납 1개
니퍼 1개
전연 테이프 1개


자전거에 장착해야 하기 때문에 좀더 튼튼하게(?) 고정했습니다. 고무줄로...^^;;



속도를 측정하기 위해서 한바퀴 회전하는데 걸리는 시간을 측정했습니다.
일반적으로 판매되는 자전거용 속도계와 원리는 같습니다.
자석 스위치를 앞바퀴 프레임에 붙이고 자석은 바퀴살에 붙였습니다. 자석이 스위치옆을 지날때마다 스위치가 단락됩니다.

자석 스위치는 위와 같이 생겼습니다. 표면이 유리인데 납땜하고 약간 비틀었더니 부서져 버려서 하나는 망가져 버렸습니다.
자석을 스위치 근처로 가져가면 스위치가 단락됩니다.

검은색 전기 테이프로 대충 고정했습니다. 프레임에 스위치의 간격조절도 테이프를 대충 말아서 높이를 줬습니다.

고정도 대충하고 자석

바퀴살에 붙어있는것이 nd 자석이라불리는 지름 10mm짜리 네오디움자석을 테이프로 고정해서 붙였습니다.

자석과 스위치의 간격은 약 1cm 정도 되는데 동작은 잘하네요.
스위치의 선은 브레이크 라인을 타고 올라와 아르두이노가 있는 빵판에 연결됩니다.

왼쪽은 LCD모듈 오른쪽은 9v 배터리, 아래로 아르두이노가 있네요.
자전거에 장착은 검정테이프 하나가 다입니다. 떨어질까봐 조마 조마 ^^;
자전거를 살짝 움직여보니 시속5km라고 찍혔네요. 옆에 RPS는 초당 앞바퀴 회전수....나중에 페달 회전수가 들어가야 하는데,
스위치를 하나 망가트리는 바람에 바퀴 회전수가 들어갔습니다.

 천천히 가니 10km는 그냥 나오더군요. 한강을 살짝 달려보았습니다. 최고 속도 32km 나오더군요.
대충 맞는거 같기도 하고....어차피 숫자 계산이니 틀리면 고치면 되겠죠.
다음에 gps를 가져가서 속도를 비교해봐야겠네요. 그때까지 분해가 안된다면....ㅋㅋㅋ

To Do
자전거를 멈췄을때 속도가 0이 안되는 문제 -> 스위치가 on 됐을때만 속도를 계산하기 때문
페달 회정수 측정 -> 스위치 구입
외관 디자인 자전거고정 -> OTL

속도 계산
바퀴둘레     = 26인치 * 25.4 * 3.14 = 2074 mm = 2.074 m = 0.002074 km
속도(시속)  ->  한바퀴회전시간(ms) : 0.002074 km(바퀴둘레) = 1000ms * 60 * 60 (1시간) : 1시간동안 이동거리
속도(km/h) =  7466.4 / 한바퀴회전시간(ms)


두번째 압축 파일은 아두이노 개발툴 설치 폴더의 hardware\libraries\LiquidCrystal_pepsiman 폴더에 압축을 풀어주세요.
(이 파일은 플러그 하우스LCD용 파일입니다. 다른 LCD는 Arduino 사이트의 LiquidCrystal 라이브러리를 사용하세요)
소스코드
#include <stdio.h>
#include <LiquidCrystal_pepsiman.h>

// LiquidCrystal display with:
// rs. rw, e, d4, d5, d6, d7 - LCD pin name
//  4,  5, 6, 11, 12, 13, 14 - LCD pin #
LiquidCrystal lcd(2,3,4,  8,9,10,11); // arduino pin #

char buf[33]={0};
unsigned long time, oldtime, delta;
float spd=0;
int ledpin = 13, swpin=12, swval=0, oldswval=0;

void setup()
{
  Serial.begin(9600);

  pinMode(ledpin, OUTPUT);
  pinMode(swpin, INPUT);
  lcd.clear();
  lcd.print("hello, world!.............");
}

void loop()
{
  swval = digitalRead(swpin);
  if (oldswval == LOW && swval == HIGH)
  {
    time = millis();
    delta = millis() - oldtime;
    //26" * 25.4 * 3.141592 = 2.074m, 0.002174 km;
    // * 3600 = 7446.4 km/s
    spd = 7466.4 / (float)delta;
   
    sprintf(buf, "SPD %3ld RPS %4ld", (long)spd, (long)(1.0 / (float)delta * 1000.0));
    Serial.println(buf);
    lcd.clear();
    lcd.print(buf);
   
    oldtime = time;
    digitalWrite(ledpin, HIGH);
    delay(20);
  }
  digitalWrite(ledpin, LOW);
  oldswval = swval;
}


추가) 회로에 대한 문의가 있어서 추가 합니다.

솔찍히 회로 라고 할만한게 없습니다 ^^;
리드 스위치를 아두이노의 12번 핀에 연결하면 끝입니다.(하나는 GND, 하나는 아두이노의 D12)

추가) 전원(베터리)에 대한 문의가 있어서 추가합니다.

아두이노는 기본적으로 아답터 단자로 들어오는 7~12v 전압을 5v로 바꿔주는 레귤레이터를 내장하고 있습니다.
따라서 9v전지용 스넵단자와 아답터 단자를 구입해서 선으로 연결해 주기만하면 
아답터 단자로 9v전지를 연결해 아두이노의 전원으로 사용할 수 있습니다.
Posted by pepsiman
comments powered by Disqus
LCD 구동 이후 무엇을 해볼까 하다가 전압계를 만들어 보았습니다.

머 말은 거창하지만 사실 아르두이노의 아날로그 입력을 이용하면 간단합니다.
선만 두개 더 추가하면 되지요.

아르두이노의 아날로그 입력은 0 ~ 5v를 입력받을수 있습니다. 해상도는 10bit = 1024입니다.
즉 0.0048828125v , 약 4.88mV 단위로 측정가능합니다.

위 사진은 충전지의 전압을 측정해 본것입니다. 약 1.22v가 나오네요.
소수점 출력하는법을 몰라 x100 해버렸습니다. ^^; (출력 formatting 하는 법좀 알려주세요~)
암튼 별건 아니지만 재미있네요.



#include <LiquidCrystal.h>
// LiquidCrystal display with:
// rs. rw, e, d4, d5, d6, d7 - LCD pin name
//  4,  5, 6, 11, 12, 13, 14 - LCD pin #
LiquidCrystal lcd(2,3,4,  8,9,10,11); // arduino pin #
int val = 0;
void setup()
{
  Serial.begin(9600);
  lcd.clear();
  lcd.print("hello, world!.............");
  delay(1000);
}
void loop()
{
  val = analogRead(0)*500.0/1024.0;    // read the value from the sensor
  Serial.println(val, DEC);
  lcd.clear();
  lcd.print(val);
  digitalWrite(13, HIGH);
  delay(100);
  digitalWrite(13, LOW);
  delay(100);
}

숙제가 하나 남았네요.
5v가 넘는 전압은 어떻게 해야 측정이 가능할까요?

추가) 
아두이노에 5v이상의 전압을 직접 연결하면 아두이노가 사망할수 있으니 주의하세요.
5v 이상의 전압을 측정하려면 전압나눔 회로를 사용해야 합니다.

Posted by pepsiman
comments powered by Disqus
피지컬 컴퓨팅
카테고리 기술/공학
지은이 DAN O SULLIVAN (지구문화사, 2008년)
상세보기


저는 전자쪽에 관심은 있으나 전공자가 아니다 보니 회로 보는것도 어렵고, 부품 명칭도 모르겠고 해서 무지 고생하고 있습니다.
카페에서 피지컬 컴퓨팅이라는 책을 소개받았는데, 저같은 초보자를 위한 책인것 같아서 소개합니다.

이 책은 전공자가 아닌 비전공자...특히 미디어 아트를 하는 사람들을 위해 쓰여졌습니다.
arduino를 사용하는 방법은 나와 있지 않지만, 비 전공자로써 필요한 최소한의 전자에 관한 지식을 이해하기 쉽게 설명하고 있습니다.

저자가 처음부터 끝까지 강조하는것은 바로 (미디어아트)작품을 만들기위해 세부적인부분(프로그래밍, 전자회로 원리/구현)에 집착하지 말고 만들어 져있는것을 써라 !! 라는것입니다. 머 원리를 이해까지 하면 좋지만 저같이 취미로 하는 사람에게 회로 공식까지 암기할 필요는 없는것 같습니다. 그때 그때 필요한 부분만 이해 하면 되지 싶습니다.

원래 arduino가 전공자가 아닌 사람도 쉽게 사용하기 위해 만들어진만큼 구현이 아닌 활용에 포커스를 맞추는것이 맞다고 생각합니다.

그런면에서 이 책은 딱 필요한 만큼만 설명하고 더 깊이 있는 부분으로 들어가지 않도록 책의 처음부터 끝까지 그 수위조절을 탁월이 했다는데 높은 점수를 주고싶습니다.

아쉬운 부분이 있다면 이 책에서 사용하는 프로세서들이 저와는 상관 없는 프로세서들이어서 책 나온 많은 소스코드들이 특별한 의미를 주지는 못하지만 소스를 어느정도 이해할수 있는 사람이라면 충분히 응용가능하리라 생각됩니다.

저처럼 비 전공자이면서 전자회로책이 너무 딱딱하다고 느끼시는분들께 적극 추천하는 바입니다. 




[머리말] 

피지컬 컴퓨팅이라는 커다란 분야를 독창적인 시각으로 간단명료하고 명쾌하게 가름지어 갈래마다 차근차근 설명하고 있는 이 책은, 앞으로 기술환경이 어떻게 진보하든 피지컬 컴퓨팅을 공부하고자 하는 모든 사람들에게 기본적인 생각의 틀과 접근방법을 제공해 줄 것이라 믿어 의심치 않는다. - 저자의 말

머리말

차례 

서론 
Chapter 1 전기 
Chapter 2 쇼핑하기 
Chapter 3 회로 만들기 
Chapter 4 마이크로컨트롤러 
Chapter 5 프로그래밍 
Chapter 6 4대회로 
Chapter 7 컴퓨터 간의 통신 
Chapter 8 피지컬 인터액션 디자인, 또는 예의바른 대화의 기술 
Chapter 9 움직임 감지하기 
Chapter 10 움직임 만들기 
Chapter 11 신체와 접촉하기 
Chapter 12 디바이스 간의 여러 가지 통신 
Chapter 13 소리와 빛 제어하기 
Chapter 14 아주 많이 입력 받기, 그리고 아주 많이 출력하기 

부록A 마이크로컨트롤러의 선택 
부록B 추천업체목록 
부록C 회로도에 사용되는 기호들


Posted by pepsiman
comments powered by Disqus

티스토리 툴바