Project tutorial

Neopixel LED Eyeball Controlled by Nunchuck

I made an LED eyeball controlled by a Nintendo Wii Nunchuck Controller.

  • 3,487 views
  • 6 comments
  • 18 respects

Components and supplies

Apps and online services

About this project

I modified the Neopixel LED Eyeball to be controlled by the Nintendo Wii Nunchuck Controller.

Configuration

LED Eyeball

Neopixel LED tape is used; LEDs are 68 units. The LEDs are fixed to the bowl with double-sided tape and wired in the following order.

Arduino Library for Wii Nunchuck

The latest library is located in the following.

https://github.com/todbot/wiichuck_adapter

  • Wii VDD pin to Arduino 3.3V pin
  • Wii GND pin to Arduino GNDpin
  • Wii SDA pin to Arduino A4
  • Wii SCL pin to Arduino A5

Operating

Schematics

Block Diagram
Wii eyeball  rukgmywiqq

Code

Wii_eye01.inoArduino
#include <Wire.h>
#include "nunchuck_funcs.h"
#include <Adafruit_NeoPixel.h>

#define PIN 6

Adafruit_NeoPixel led = Adafruit_NeoPixel(68, PIN, NEO_GRB + NEO_KHZ800);

int blackNum = 24;
int pupilNum = 12;

uint32_t color;
int brightness = 40;
byte eyeColor;

int LR =0;

//Black eye L&R animation
int blackLED[15][24] = {{12,32,35,55,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        {12,13,31,36,54,55,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        {11,13,14,30,37,53,54,56,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        {10,11,14,15,29,38,52,53,56,57,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        { 9,10,11,12,15,16,28,33,34,39,51,52,55,56,57,58,68,68,68,68,68,68,68,68},
                        { 0, 8, 9,10,11,12,13,16,17,27,32,35,40,50,51,54,55,56,57,58,59,67,68,68},
                        { 0, 1, 7, 8, 9,10,13,14,17,18,26,31,36,41,49,50,53,54,57,58,59,60,66,67},
                        { 1, 2, 6, 7, 8, 9,14,15,18,19,25,30,37,42,48,49,52,53,58,59,60,61,65,66},
                        { 2, 3, 5, 6, 7, 8,15,16,19,20,24,29,38,43,47,48,51,52,59,60,61,62,64,65},
                        { 3, 4, 5, 6, 7,16,17,20,21,23,28,39,44,46,47,50,51,60,61,62,63,64,68,68},
                        { 4, 5, 6,17,18,21,22,27,40,45,46,49,50,61,62,63,68,68,68,68,68,68,68,68},
                        { 4, 5,18,19,26,41,48,49,62,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        { 4,19,20,25,42,47,48,63,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        {20,21,24,43,46,47,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        {21,23,44,46,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}};

//pupil L&R animation
int pupilLED[15][12] = {{33,34,68,68,68,68,68,68,68,68,68,68},
                        {32,33,34,35,68,68,68,68,68,68,68,68},
                        {12,31,32,33,34,35,36,55,68,68,68,68},
                        {12,13,30,31,32,33,34,35,36,37,54,55},
                        {13,14,29,30,31,32,35,36,37,38,53,54},
                        {14,15,28,29,30,31,36,37,38,39,52,53},
                        {15,16,27,28,29,30,37,38,39,40,51,52},
                        {16,17,26,27,28,29,38,39,40,41,50,51},
                        {17,18,25,26,27,28,39,40,41,42,49,50},
                        {18,19,24,25,26,27,40,41,42,43,48,49},
                        {19,20,23,24,25,26,41,42,43,44,47,48},
                        {20,21,22,23,24,25,42,43,44,45,46,47},
                        {21,22,23,24,43,44,45,46,68,68,68,68},
                        {22,23,44,45,68,68,68,68,68,68,68,68},
                        {22,45,68,68,68,68,68,68,68,68,68,68}};

//Blink animation
int eyelid = 0;
int eyelidNum[8] = {0,4,8,16,24,34,44,56};
int eyelidLED[56] = {64,65,66,67,58,59,60,61,56,57,62,63,49,50,51,52,47,48,53,54,38,39,40,41,46,55,36,37,42,43,26,27,28,29,35,44,24,25,30,31,15,16,17,18,34,45,23,32,13,14,19,20,6,7,8,9};

byte joyx,joyy,zbut,cbut;

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

  led.begin();
  led.setBrightness(brightness); // Initial Brightness 40
  led.show(); // Initialize all pixels to 'off'
  color = led.Color(0, 177, 55); //pupil color
  
  nunchuck_init(); // send the initilization handshake
}

uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return led.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return led.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return led.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

void blink(int eyelid, int LR) {
  if (eyelid != 8){
    //White eye
    for(uint16_t i=0; i<led.numPixels(); i++) {
      led.setPixelColor(i, led.Color(66, 66, 66));
    }
    
    //Black eye
    for(uint16_t i=0; i<blackNum; i++) {
      led.setPixelColor(blackLED[LR][i], color);
    }
    
    //pupil
    for(uint16_t i=0; i<pupilNum; i++) {
      led.setPixelColor(pupilLED[LR][i], led.Color(0, 0, 66));
    }

    //eyelid
    for(int i=0; i < eyelidNum[eyelid]; i++) {
      led.setPixelColor(eyelidLED[i], 0);
    }
  } else if (eyelid == 8){
    led.clear();
  }
  led.show();
}

void loop() {
  nunchuck_get_data();

  joyx = nunchuck_joyx(); // range 29 - 226
  joyy = nunchuck_joyy(); // range 29 - 226
  zbut = nunchuck_zbutton();
  cbut = nunchuck_cbutton(); 

  /*
  Serial.print("joyx: "); Serial.print((byte)joyx,DEC);
  Serial.print("\tjoyy: "); Serial.print((byte)joyy,DEC);
  Serial.print("\tzbut: "); Serial.print((byte)zbut,DEC);
  Serial.print("\tcbut: "); Serial.println((byte)cbut,DEC);
  */


  //Change the color of the pupil with the Z button push
  if(zbut == 1){
    eyeColor++;
    if(eyeColor > 255){
      eyeColor = 0;
    }
    delay(10);
    color =  Wheel(eyeColor);
  }

  //Blink on the joystick's y axis
  eyelid = map(joyy, 29, 130, 8, 0);
  if (eyelid > 8) {
    eyelid = 8;
  }
  if (eyelid < 0) {
    eyelid = 0;
  }

  //The pupil moves left and right on the joystick's x axis
  LR = map(joyx, 29, 226, 0, 14);
  if (LR > 14) {
    LR = 14;
  }
  if (LR < 0) {
    LR = 0;
  }

  blink(eyelid, LR);
}

Comments

Similar projects you might like

Pac-Man LED Pixel Panel Costume

Project tutorial by Ben Muller

  • 4,800 views
  • 4 comments
  • 85 respects

LoRa Gateway for DeviceHive

Project tutorial by DeviceHive IoT team

  • 1,281 views
  • 2 comments
  • 17 respects

IoT Bird Feeder with Sigfox and Tweeter

Project showcase by Gaël Porté

  • 388 views
  • 0 comments
  • 7 respects

SmartWay

Project tutorial by Universum

  • 248 views
  • 0 comments
  • 5 respects

Raspberry Pi and Arduino Laptop

Project tutorial by Dante Roumega

  • 17,831 views
  • 6 comments
  • 45 respects

Arduino-Based Automatic Guitar Tuner

Project tutorial by Ben Overzat

  • 3,486 views
  • 0 comments
  • 12 respects
Add projectSign up / Login