Своими руками

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

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’а.

Популярное за месяц

Follow us

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