HandMade32.ru - сделай своими руками

Wii Nunchuk превращается в компьютерную мышь


Герой нашего рассказа — снова контроллер Wii Nunchuk. Как только программист Tod E. Kurt написал библиотеку для Arduino, позволяющую работать с ним, самодельщики стали придумывать для него самые разнообразные применения. То игрушкой «волшебный экран» управляют, то виртуальным вертолётом в игре для MSX… Ну а автор Instructables под ником Kriegwesen придумал, как применить такой контроллер в качестве обычной компьютерной мыши с интерфейсом USB. Это как трекбол — не нужен коврик. Нет, это лучше трекбола — не нужен и стол.
Обычно для подключения Arduino к Nunchuk’у применяют импровизированные разъёмы. Мастер решает обойтись без такового, вскрыв корпус и разместив там какой-нибудь совсем небольшой клон Arduino. Но у него не оказывается отвёртки с жалом треугольного сечения. Мастер заказывает её, но ждать приходится слишком долго. Ничего, пригодится для других проектов. Здесь же он вскрывает кабель и вытаскивает из него четыре проводника:

Wii Nunchuk превращается в компьютерную мышь
Для самоделки подойдёт любая Arduino-совместимая плата, способная эмулировать USB HID-устройства, а также имеющая выводы, специально выделенные для линий SDA и SCL интерфейса I2C. Плата Arduino Leonardo подходит по обоим критериям. Проводники в кабеле Nunchuk’а обычно имеют следующую цветовую кодировку: белый — общий, красный — плюс питания (правильно подавать 3,3 В, но по отзывам, и от 5 В ничего не выходит из строя), зеленый — SDA, жёлтый — SCL. Но бывает и так, что цвета нестандартные, поэтому лучше взять тот кусок кабеля, который после перекусывания который остался вместе с разъёмом, и прозвонить согласно его цоколёвке.

Соединив всё как указано выше, мастер пишет скетч:

Wii Nunchuk превращается в компьютерную мышь Скетч здесь//Wiichuck Mouse
//Brian Krukoski
//April 2012
//red-+5, white-gnd, green-sda, yllw-clck

#include <Wire.h>
#include "nunchuck_funcs.h"
int loop_cnt=0;

// parameters for reading the joystick:
int range = 40; // output range of X or Y movement
int threshold = range/10; // resting threshold
int center = range/2; // resting position value

boolean mouseIsActive = false; // whether or not to control the mouse
int lastSwitchState = LOW; // previous switch state

void setup() {
// initilization for the Wiichuck
nunchuck_init();
// take control of the mouse:
Mouse.begin();
Serial.begin(9600);
}

void loop() {
if( loop_cnt > 10 ) { // every 10 msecs get new data
loop_cnt = 0;
nunchuck_get_data();

//right and left click control
int leftState = nunchuck_cbutton();
if (leftState) Mouse.press(MOUSE_LEFT); else Mouse.release(MOUSE_LEFT);
int rightState = nunchuck_zbutton();
if (rightState) Mouse.press(MOUSE_RIGHT); else Mouse.release(MOUSE_RIGHT);

// read the x axis
int xReading = nunchuck_joyx(); //calls on nunchuck_funcs library for x axis reading
xReading = map(xReading, 38, 232, 0, range); // 38 and 232 arbitrarily determined through experimentation, maps to 0 and preset range
int xDistance = xReading — center;
if (abs(xDistance) < threshold) //if absolute value of xDistance is less than predefined threshold….
{
xDistance = 0;
}

// read the y axis
int yReading = nunchuck_joyy(); //calls on nunchuck_funcs library for y axis reading
yReading = map(yReading, 38, 232, 0, range); // 38 and 232 arbitrarily determined through experimentation, maps to 0 and preset range
int yDistance = yReading — center;
if (abs(yDistance) < threshold) //if absolute value of yDistance is less than predefined threshold….
{
yDistance = 0;
}

// move the mouse if the readings were above 0
if ((xDistance != 0) || (yDistance != 0)) {
Mouse.move(xDistance, -yDistance, 0); // -yDistance ensures inverted style joystick
}
}
nunchuck_print_data(); //prints nunchuck data to serial monitor for debugging purposes
loop_cnt++;
delay(1);

}

К программе нужен файл заголовка, выложенный здесь. Его надо после скачивания переименовать в nunchuck_funcs.h
Всё железо мастер помещает в коробку, похожую на распаечную, и фиксирует внутри кабели средством Sugru. Можно взять и реально распаечную коробку, а кабели зафиксировать и другим способом.

Wii Nunchuk превращается в компьютерную мышьWii Nunchuk превращается в компьютерную мышьWii Nunchuk превращается в компьютерную мышьWii Nunchuk превращается в компьютерную мышьWii Nunchuk превращается в компьютерную мышь
В текущем варианте прошивки всё работает стабильно, но не реализована функция прокрутки. В дальнейшем мастер планирует сделать так, чтобы при нажатии одной из кнопок прокрутка происходила по сигналам от акселерометра Nunchuk’а.

administrator

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного. - Альберт Эйнштейн

Follow us

Don't be shy, get in touch. We love meeting interesting people and making new friends.