반응형

내가 어릴때 가지고 놀 수 있던 장난감들은 꽤나 단순한 것들이었다. 기억해 보면 축구공, 야구공, 구슬, 팽이, 딱지, 돌(?), 하늘에서 내리는 눈 등.. 대부분 내가 노는 건지 장난감이 날 가지고 노는 건지 모를 정도의 상당한 노동력을 요하는 것들이었다. 그 덕이었는지 어릴땐 체력이 상당히 좋았던 기억이다. 물론 조금 더 크고 나서는 TV에 연결해 '내가' 가지고 놀 수 있는 가정용 게임기도 가질 수 있었지만 말이다.

 

인터넷에서 주워온 사진. 나 없음.

 

그렇게 온 몸을 사용해 놀던 어린 시절, 등장만 했다 하면 나와 내 친구들의 관심을 한 눈에 사로 잡는 동네 형의 장난감이 있었다. Radio Control Car, 바로 RC카였다. 어떤 모델이었는지도 알지 못했지만 약간의 휘발유를 넣는 작은 엔진이 달린 RC카였던거 같다. 그 형이 RC카를 들고 나오면 우리는 뭐에 홀린 사람들 처럼 하던 놀이를 중단하고 따라다니며 구경했다. 나름 엔진이 달린 꽤 큰 RC카 였기 때문에 건전지로 작동하는 작은 미니카 정도만 가질 수 있던 우리로써는 감히 상상하기 힘든 속도와 힘을 자랑했다. 지금 생각해 보면 굉음을 내며 달리는 RC카를 따라 다니며 좋다고 소리 지르는 동네 꼬마들이 그 형은 상당히 귀찮았을 것 같다. 나이 차이가 좀 났던 그 형과 친하지 않았던 우리로써는 한 번 해보게 해달라 조르지는 못하고 그저 부러운 눈빛 으로 바라보며 대리만족을 할 수밖에 없었다.

 

대충 이렇게 생겼던거 같기도 하고...

 

굳이 그런 기억이 아니더라도 대부분의 남자들은 무선 조종 장난감에 대한 호기심이 있다. 아직도 길을 걷다 RC카나 드론이 보이면 적어도 어떤 모델일지 궁금해하며 아닌척 슬쩍 눈길을 주는 내게는 그 추억이(부러움이) 상당히 컸던거 같다.

 

그래서 샀다. 알리에서.

 

주문하고 2주정도 걸렸던거 같다. 생각보다 빨리 도착 했다.

 

 

박스를 열면 RC카와 조종기가 보인다.

 

1:16 스케일의 R/C Monster Truck이라고 한다. 별다른 이름도 없다.  RC카에 대해 별로 아는게 없어서 시험삼아 싸고 대충 잘 굴러 갈거 같은 모델로 골랐다. 대략 27*17*12cm 정도 사이즈에 배송비까지 $17.20이다.

 

뒤집으면 전원 스위치와 배터리 커버가 보인다. 전륜, 후륜에 모터가 하나씩, 무려 4륜 구동이다.

 

배터리와 충전기.

 

 

전진, 후진, 좌우 조종이 가능한 컨트롤러.

 

크지 않은 장애물은 쉽게 넘는다.

 

넓은 들판에서 한 컷.

 

가파른 언덕도(40° 이상) 쫄쫄쫄 잘 올라 간다. 2만원도 안되는 가격에 꽤 잘 굴러 간다. 맘에 든다.

 

 

그래서 또 샀다. 이번엔 좀 더 큰놈으로 빨간색, 녹색 2개.

알리에서 먼저 알아 보니 1개에 $44.93 였으나 국내 쇼핑몰 가격은 배송비 포함 34,400원 이었다. 당연히 이번엔 국내 쇼핑몰에서 68,800원에 2개 구매 했다. 조카가 2명이므로.

 

이번 제품은 1:12 스케일이다. (지난번은 1:16)

 

포장을 계속 뜯어 준다.

 

사이즈는 37 x 23 x 20cm 다. 지난 번 제품보다 좀 크다.

 

 

구성품은 동일.

 

마찬가지로 전륜, 후륜에 모터가 1개씩 들어 있다.

 

2명의 조카를 위한 2개의 차량.

 

차량 크기가 커진 만큼 모터도 크고 힘이 세다.

 

 

빠르지는 않지만 언덕도 잘 올라 간다.

 

밤에는 라이트가 밝게 빛난다. 야간주행도 가능하다.

 

테스트 하다 보니 한 개의 조종기 트리거에서 문제가 발견 되었다. 전진하기 위해 트리거를 당겼다 놓으면 차가 멈추기는 하는데 트리거가 원래의 위치로(가운데로) 돌아가지 않았다. 손가락으로 살짝 밀어줘야 돌아가는 문제였다.

 

뜯어 보니 트리거에 연결된 스프링이 제대로 고정되지 않아 발생하는 문제였다. 스프링을 제자리에 고정시키고 다시 조립한다. 조립은 언제나 분해의 역순.

 

 

조카들에게 입양 되기 전 단체 기념샷. 제일 처음 구매한 차량이 가운데 귀엽게 자리 잡고 있다.

큰 차 2대를 모두 조카들에게 넘기고 작은 차 1대만 남으니 뭔가 좀 아쉬움이 남았다.

 

그래서 또 샀다... 이번엔 다시 알리에서.

 

Wltoys사의 Rock Crawler D7 12402-A 모델이다.

1:12 스케일에 최고 45Km/h의 속도가 나온다. 더 이상 아이들 장난감이 아니다. (14세 이상)

 

알리에서 $66.28에 판매 하지만 $1 할인 쿠폰 적용으로 배송비 포함 $65.28에 구매 했다.

 

 

두툼한 바퀴의 귀여운 노란색 차량과 조종기가 보인다.

 

차량을 집어 들었는데 안나와서 살펴 보니 케이블 타이로 묶여 있었다. 풀어 준다.

 

차량의 바퀴를 보면 전륜은 바깥쪽을 향해 벌어진 것을 볼 수 있다. Toe-in, Toe-out 이라는걸 처음 알게 되었다. 불량인줄 알고 드라이버 들고 뜯으려 했었다...

 

이 조종기에는 기본적인 동작 컨트롤 외, 차량의 전륜 및 스로틀 조절 다이얼이 있다.

 

 

 

차량을 뒤집으면 전원 스위치와 배터리 커버가 보인다. 배터리 커버는 드라이버 없이 간단히 열고 닫을 수 있다.

 

충전기와 간단한 메뉴얼이 들어 있다.

 

 

 

반응형
Posted by J-sean
:
반응형

예전 영화에서 종종 볼 수 있던 레이저 침입 감지 시스템은 간단한 작동 원리에도 불구하고 레이저를 이용 한 방식이 뭔가 있어 보이는지 아직까지도 영화나 드라마에서 심심치 않게 볼 수 있다. 작동 원리가 간단한 만큼 저렴한 부품으로도 비슷하게 만들어 볼 수 있다.


침입 감지 시스템을 회피하기 위한 Catherine Zeta-Jones의 피나는 노력 (영화 Entrapment)


The Big Bang Theory


약 $0.4 짜리 레이저 모듈. 5V로 작동하고 출력 5mW, 파장 650nm의 붉은색 레이저를 발생 시킨다.


Red 

625 - 740nm

Orange

590 - 625nm

Yellow

565 - 590nm

Green

520 - 565nm

Cyan

500 - 520nm

Blue

435 - 500nm

Violet

380 - 435nm


약 $0.7 짜리 레이저 수신 모듈. 5V로 작동하고, 레이저가 수신 될때는 HIGH 시그널을, 수신 되지 않을때는 LOW 시그널을 출력 한다. 수신하려는 레이저 외, 태양이나 다른 강한 빛이 없는 실내용.



레이저 리시버 센서는 방향에 주의 한다. 반대로 연결하면 뜨거울 정도로 열이 발생 한다.


위 다이어그램과 같이 구성 한다.


레이저 모듈에서 레이저가 발생되고 수신 모듈에서 이 레이저를 감지하면 HIGH 시그널을 출력 한다.


중간에 장애물이 생겨 레이저를 수신하지 못하게 되면 수신 모듈에서 LOW 시그널을 출력하고 아두이노는 디지털 4번 핀으로 HIGH를 출력해 Buzzer를 작동 시킨다.



실제 부품의 연결 방식은 다이어그램과 다르지만 기본 구성은 동일 하다. 


소스를 컴파일하고 아두이노에 업로드 한다.


제작 과정 및 테스트


Serial Monitor에도 적의 침입 기록이 남는다.


반응형
Posted by J-sean
:
반응형

DOTween의 DOPath() 예제


아래와 같은 스크립트를 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
 
public class Tween : MonoBehaviour
{
    public Ease ease;
 
    public Transform wayPoint1;
    public Transform wayPoint2;
    public Transform wayPoint3;
 
    private Vector3[] wayPoints;
 
    // Start is called before the first frame update
    void Start()
    {
        // static DOTween.Init(bool recycleAllByDefault = false, bool useSafeMode = true, LogBehaviour logBehaviour = LogBehaviour.ErrorsOnly)
        // Initializes DOTween.
        DOTween.Init(falsetrue, LogBehaviour.ErrorsOnly);
 
        wayPoints = new Vector3[3];
        wayPoints.SetValue(wayPoint1.position, 0);
        wayPoints.SetValue(wayPoint2.position, 1);
        wayPoints.SetValue(wayPoint3.position, 2);
        // wayPoints = new[] { wayPoint1.position, wayPoint2.position, wayPoint3.position };
 
        // DOPath(Vector3[] waypoints, float duration, PathType pathType = Linear, PathMode pathMode = Full3D, int resolution = 10, Color gizmoColor = null)
        // Tweens a Transform's position through the given path waypoints, using the chosen path algorithm.
        transform.DOPath(wayPoints, 6.0f, PathType.CatmullRom).SetLookAt(new Vector3(0.0f, 0.0f, 0.0f)).SetEase(ease).SetLoops(-1, LoopType.Yoyo);
    }
 
    // Update is called once per frame
    void Update()
    {
 
    }
}
 


스크립트 이름은 Tween으로 지정 한다.


Empty Object(WayPoint)와 Cube를 생성하고 Cube에 Tween 스크립트를 추가한다.


Empty Object를 3개 생성하고 WayPointX로 이름을 바꿔서 Cube가 이동할 위치에 배치한다. Cube Inspector 창의 Tween 스크립트에서 Way Point1~3 변수에 WayPoint1~3 오브젝트를 지정한다. Ease 변수도 In Bounce 등 원하는 ease로 변경한다.


플레이 버튼을 클릭 하면 Cube가 지정한 위치들을 거쳐 이동 한다. DOPath()의 경우 Scene창에 이동 경로가 표시 된다.


반응형
Posted by J-sean
:
반응형

DOTween의 Sequence 예제


아래와 같은 스크립트를 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
 
public class Tween : MonoBehaviour
{
    public Ease ease;
 
    // Start is called before the first frame update
    void Start()
    {
        // static DOTween.Init(bool recycleAllByDefault = false, bool useSafeMode = true, LogBehaviour logBehaviour = LogBehaviour.ErrorsOnly)
        // Initializes DOTween.
        DOTween.Init(falsetrue, LogBehaviour.ErrorsOnly);
 
        // static DOTween.Sequence()
        // Returns a usable Sequence which you can store and add tweens to.
        Sequence mySeq = DOTween.Sequence();
 
        // Delays and loops (when not infinite) will work even inside nested tweens.
 
        // Append(Tween tween)
        // Adds the given tween to the end of the Sequence.
        mySeq.Append(transform.DOMove(new Vector3(5.0f, 0.0f, 5.0f), 2false).SetEase(ease).SetLoops(3, LoopType.Yoyo));
        mySeq.Append(transform.DOMove(new Vector3(-5.0f, 0.0f, 5.0f), 2false).SetEase(ease).SetLoops(3, LoopType.Yoyo));
        // 첫 번째 DOMove를 3회 반복, 그리고 두 번째 DOMove를 3회 반복 한다. 전체(첫 번째 + 두 번째) DOMove를 3회 반복하는게 아니다.
 
        // Insert a lookat tween for the whole duration of the Sequence
 
        // Insert(float atPosition, Tween tween)
        // Inserts the given tween at the given time position, thus allowing you to overlap tweens instead of just placing them one after each other.
        mySeq.Insert(0, transform.DOLookAt(new Vector3(0.0f, 0.0f, 0.0f), mySeq.Duration()));
        // float Duration(bool includeLoops = true)
        // Returns the duration of the tween(delays excluded, loops included if includeLoops is TRUE).
    }
 
    // Update is called once per frame
    void Update()
    {
 
    }
}
 


스크립트 이름은 Tween으로 지정 한다.


Cube를 생성하고 Tween 스크립트를 추가한다.


Inspector 창의 Tween 스크립트에서 Ease 변수를 In Bounce 등 원하는 ease로 변경한다.


플레이 버튼을 클릭 하면 Cube가 첫 번째 DOMove 3회, 두 번째 DOMove 3회를 반복하며 전체 시간에 걸쳐 원점을 향해 회전 한다.


반응형
Posted by J-sean
:
반응형

DOTween의 DOMove(), DOColor() 예제


아래와 같은 스크립트를 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
 
public class Tween : MonoBehaviour
{
    public Ease ease;
 
    // Start is called before the first frame update
    void Start()
    {
        // static DOTween.Init(bool recycleAllByDefault = false, bool useSafeMode = true, LogBehaviour logBehaviour = LogBehaviour.ErrorsOnly)
        // Initializes DOTween.
        DOTween.Init(falsetrue, LogBehaviour.ErrorsOnly);
 
        // DOMove(Vector3 to, float duration, bool snapping)
        // Moves the target's position to the given value.
        transform.DOMove(new Vector3(0.0f, 0.0f, 5.0f), 3.0f, false).SetEase(ease).SetLoops(-1, LoopType.Yoyo);
 
        // DOColor(Color to, float duration)
        // Changes the target's color to the given one.
        transform.GetComponent<MeshRenderer>().material.DOColor(Color.red, 3.0f).SetLoops(-1, LoopType.Yoyo);
    }
 
    // Update is called once per frame
    void Update()
    {
        
    }
}
 


스크립트 이름은 Tween으로 지정 한다.


Cube를 생성하고 Tween 스크립트를 추가한다.


Inspector 창의 Tween 스크립트에서 Ease 변수를 In Bounce 등 원하는 ease로 변경한다.


플레이 버튼을 클릭 하면 Cube가 지정한 동작으로 움직이며 색깔이 변경 된다.

반응형
Posted by J-sean
:
반응형

USBASP로 ATtiny13을 프로그래밍 할 수 있다. Arduino를 이용한 프로그래밍과 기본적인 설정 방법은 아래 링크를 참고 한다.

 

2020/04/02 - [Raspberry Pi & Arduino] - Programming ATtiny13 with Arduino Uno - 아두이노로 ATtiny13 프로그래밍 하기

 

AliExpress에서 구매한 USBASP.

 

Adaptor와 함께 구매 했다.

 

컴퓨터에 연결 한다.

 

드라이버가 설치되지 않았다면 제대로 인식하지 못한다.

 

 

 

https://zadig.akeo.ie/

위 링크에서 Zadig를 다운 받는다.

zadig-2.5.exe
4.92MB

 

드라이버를 설치 한다.

 

장치가 제대로 인식 된다.

 

ATtiny13에 기본적인 Blink 예제를 프로그래밍 할 수 있도록 케이블을 연결 한다.

USBASP RESET - ATtiny pin 1

USBASP MOSI - ATtiny pin 5

USBASP MISO - ATtiny pin 6

USBASP SCK - ATtiny pin 7

USBASP 5V - ATtiny pin 8

USBASP GND - ATtiny pin 4

 

Optional:

ATtiny pin4(GND) - Negative side of the LED

ATTiny pin 3 - Resistor (330 Ohm) - Positive side of the LED

 

 

 

프로그램을 컴파일 하고 업로드 해도 warning이 발생하고 제대로 작동 하지 않는다. USBASP의 Firmware를 업데이트 해야 한다.

 

https://sourceforge.net/projects/ardude/

위 링크에서 Arduino AVR Dude Programmer를 다운 받고 설치한다. (설치하지 않고 cab 파일의 압축만 풀어도 상관 없다)

Arduino AVR Dude Programmer.zip
1.99MB

 

https://www.fischl.de/usbasp/

위 링크에서 usbasp.2011-05-28.tar.gz를 다운 받고 압축을 풀어서 usbasp.atmega8.2011-05-28.hex파일을 Arduino AVR Dude Programmer가 있는 폴더에 복사 한다. (USBASP의 칩셋이 ATMEGA8인지 확인 한다)

usbasp.2011-05-28.tar.gz
0.51MB

 

컴퓨터에 Arduino만 연결한 상태에서 File - Examples - 11. ArduinoISP - ArduinoISP를 컴파일 하고 업로드 한다.

 

 

 

 

USBASP의 Firmware를 업데이트 할 수 있도록 케이블을 연결 한다.

USBASP RESET - Arduino pin 10

USBASP MOSI - Arduino pin 11

USBASP MISO - Arduino pin 12

USBASP SCK - Arduino pin 13

USBASP 5V - Arduino 5V

USBASP GND - Arduino GND

 

Arduino RESET - (+) 10㎌ Capacitor (-) - Arduino GND (Capacitor를 연결하지 않으면 Firmware 업데이트가 제대로 되지 않는다)

USBASP JP1(JP2로 표시된 제품도 있다) 연결

 

avrdude가 있는 폴더(Arduino AVR Dude Programmer를 설치한 폴더)로 이동 해서 아래 명령어를 실행 한다.

avrdude -C avrdude.conf -c avrisp -P COM3 -b 19200 -p m8 -v

(COM 포트는 실제 포트를 적어준다.)

 

이상이 없다면 AVR device initialized and ready to accept instructions라는 메세지가 나온다.

 

아래 명령어를 실행 한다.

avrdude -C avrdude.conf -c avrisp -P COM3 -b 19200 -p m8 -U flash:w:usbasp.atmega8.2011-05-28.hex

Verify까지 완료되면 USBASP의 Firmware 업데이트가 끝난다.

 

USBASP로 Blink 예제를 프로그래밍 할 수 있도록 케이블을 다시 연결 한다.

USBASP RESET - ATtiny pin 1

USBASP MOSI - ATtiny pin 5

USBASP MISO - ATtiny pin 6

USBASP SCK - ATtiny pin 7

USBASP 5V - ATtiny pin 8

USBASP GND - ATtiny pin 4

 

Optional:

ATtiny pin 4(GND) - Negative side of the LED

ATTiny pin 3 - Resistor (330 Ohm) - Positive side of the LED

 

 

 

Programmer: "USBasp (slow)"로 설정 한다. USBasp로 설정 하면 에러가 발생 한다.

 

컴파일 하고 업로드 한다.

 

ATtiny13에 프로그램이 업로드 되고 정상 작동 한다.

 

반응형
Posted by J-sean
:
반응형

3상 교류는 세 개의 상 간에 2π/3의 위상차가 존재 하며, 선간전압이 상전압의 √(3)배인 이유는 아래와 같다.


2π/3의 위상차를 두고 생성되는 3상 교류 전압.

h(x) = R

f(x) = S

g(x) = T


두 상의 차이(S-T)가 선간 전압이다.


S상과 T상으로 선간 전압을 알아 보자. 위상차가 2π/3이므로 각 상은 아래와 같다.

S = f(x) = sin(x)

T = g(x) = sin(x+2π/3)


p(x) = S-T = sin(x)-sin(x+2π/3)


S상과 T상의 차이 즉, 선간 전압 p(x) = sin(x)-sin(x+2π/3) 는 아래와 같이 간단히 표시 할 수 있다.

p(x) = 2sin(-π/3)cos(π/3+x) = -√(3)cos(π/3+x)


결국, √(3)배의 cosine 함수가 된다. 그래프에 표시된 것 처럼 최대/최소값은 약 ±1.732이다.


반응형
Posted by J-sean
:
반응형

Bartop Arcade Machine을 만들기 위해서는 Joystick이 필요하다. 완제품으로 만들어져 컴퓨터에 연결만 하면 되는 조이스틱도 많지만 원하는 디자인으로 만들기 위해서는 조이스틱, 버튼, 케이블 등을 따로 구매해야 한다.


2020/03/17 - [Review] - DHU-4500 Joystick : 조이스틱

2020/11/12 - [Vita] - 오래된 노트북을 오락실 게임기로 만들어 보자.


Bartop Arcade Machine


2주 전 AliExpress에서 구매한 조이스틱이 도착 했다.


박스를 개봉하니 Push Button이 보인다.


버튼과 함께 다른 상자가 하나 더 들어 있다.



다른 상자에는 조이스틱과 Encoder(Zero Delay) 그리고 각종 케이블이 들어 있다.


각종 케이블들과 Encoder.




Zero Delay Encoder.



뒷면.


조이스틱.


Push Button. 왼쪽이 24mm, 오른쪽이 30mm 이다.


Encoder에 USB 케이블, 조이스틱, 버튼을 위와 같이 연결해 준다. 버튼은 필요한 만큼 추가로 연결 한다.


※ 오른쪽 컨넥터 4개 설명

Mode: Analog - Digital 변환

Turbo: 버튼을 누르면 연사

Auto: 버튼을 누르지 않아도 연사

Clear: Turbo/Auto 취소



10개의 버튼을 테스트 하기 위해 연결한 모습.


케이스 없이 이 조이스틱을 그대로 사용하긴 어렵다. 우선 테스트를 위해 버튼과 조이스틱 케이블을 모두 연결 하고 컴퓨터에 USB를 연결하면 특별한 드라이버나 설정 없이 바로 인식 된다. RetroPie등을 사용한다면 키설정을 다시 진행 해 준다.


반응형
Posted by J-sean
: