[Blogging Intensifies]

Technology, Projects, Linux, Coding, Internet of Things, Music, Books, Life...

  • About
  • Code Projects
  • Photo Gallery

Maker

My DIY Dance Dance Revolution Hardpad

July 18, 2016

IMGP0429Something like ten years or so ago, I built my own hardpad for use on Dance Dance Revolution and Stepmania.  Most of the pads that are easily bought are “soft pads”.  These vary in quality, I have a couple of pads that are pretty light weight and plastic I used ages ago.  These pads tend to get damaged pretty easily, especially when wearing shoes, and slide all over the place when playing.  When i used mine in college I actually taped it to the underside of the rug in the dorm and taped out the grid of squares on the surface, so I could play using my shoes.  I’m sure the people living below me loooove that.  Probably as much as I loved the people above me who played dice constantly.   Some more pricey are made of a thicker though still pliable rubbery material.  These mats slide around less due to the grippy nature of the material, but they can get worn out and damaged by the rough beating of shoes.

The ideal pad is a hard pad.  These can run hundreds of dollars on-line.  They also tend to be large and bulky and heavy.  Shortly after i had finished in college I decided to employ me newly acquired Engineering design skills to build my own Hard Pad.  The electronics part was easy.  I went to the local used game store and asked for the cheapest used PS2 controller they had in stock.  The guy behind the counter actually asked if I was planning to build a DDR pad with it, which was funny since I was.

The pad itself was a bit trickier.  I’d studied several design ideas on-line that others has built.  I wanted something that was less bulky than most of the pads I’d seen.  I also wanted to keep costs down somewhat, which meant using a little material as I could and not having to invest in a bunch of expensive triggers to wire into everything.  The trigger is the key component of course, since it registers the steps when playing.  The dead squares are all just plywood covered in sheet metal.

The sheet metal is also what I ended up using to build the triggers for the step squares.  When you press a key on a video game controller, all that happens is that an electrically conductive pad is flattened and shorts the connection between two copper pads on a PCB board.  When the electrical short is made,  current can flow which causes some chip somewhere to register the button press.  For my step pads, I simply enlarged this process by attaching plates of sheet metal tot he base and to the bottom of each step pad.  To give the pads some cushion and bounce, I placed strips of weather stripping bought at the hardware store between the base and the pad.  Stepping on the pad creates more than enough weight to overpower the weather stripping causing the two sheet metal pads to connect and trigger, stepping off allows the weather stripping to flex back up pushing the pad back to a neutral, unconnected position. I took some CAT 5 cable and soldered it to the sheet metal contacts and the appropriate parts inside the PS2 controller to replicate the button press action inside the controller.

Everything else was cutting wood, attaching corner brackets and attaching sheet metal.   Here are some old photos of the process.


The general construction was sound, but it had a few issues that I never really got around to fixing until more recently.

In the original design, I soldered the connections for the step pads tot he controller’s D-pad.  Mostly because the solder points were larger and easier to solder to.  This had some unintended side effects that made the game unplayable at any higher difficulty level.  By design, the controller never expects opposite D-Pad buttons to be depressed at the same time.  That is, it doesn’t expect the player to press left and right at once, the D-Pad generally controls movement in most games, why would you need to press opposite ways at once.  Dance Dance Revolution has “jumps” in more difficult stages, these are sequences where two arrows have to be matched at the same time, as in “jumped on”.  Since the D-pad doesn’t register left+right or up+down, these jumps would never register and were always considered a miss.  Kind of game play breaking in the case of DDR.

I also wanted to add a box to the set up, to replicate the buttons on the front of a real DDR machine used to select songs and options.  Not something important, but it would add to the effect, and if I ever got really ambitious, I could build a whole cabinet someday.

The other major issue, when I built the original design, I didn’t really do any real management of the wires between the controller and the pad.  They kind of strung around on the sides, they were all too long, and the controller itself was permanently attached to the pad, making moving and storing tricky.  I wanted to make the controller bits, detachable.

I’ve since solved all of these problems with some improvements, all somewhat related.  First problem was the triggers not working for jumps.  This was simple but tedious.  I needed to reqire the buttons from the D-Pad to the face buttons (Triangle, Circle, Square, X).  These work just fine when pressed together, lots of games have combinations where you have to press several buttons at once.

Please Parton my Shoddy Soldering

During this process, I also pitched the controller shaped housing and stuffed everything in a generic electrical project box.  I soldered the 4 shoulder buttons to 4 buttons attached to the box lid, to be used to interfacing with the menus.  Problem 2 solved, everything is in a nice box.

IMGP0430

The last bit was to make the controller easily detachable.  There are 4 pads, each with 2 wires, for a total of 8 wires going from the controller to the pad itself.  I was already using CAT-5 cable for the wire, it had 8 wires in it, so I attached an CAT5 end on the controller piece and a CAT5 receptacle to the dance pad.  Now the two were easily separable and securely attachable.

The ultimate test of course, does it all work?

stepmaniaresults

I’ve run several sets of tracks using the new set up and it certainly does work.  My DDR skill needs a lot of improvement to get back up where it was at my peak, but the pad itself works just fine.  Which is sort of the point, because it really is a fun way to get a pretty good workout in a short period of time.

 

 

Share this:

  • Click to share on Facebook (Opens in new window)
  • Click to share on Twitter (Opens in new window)
  • Click to share on Tumblr (Opens in new window)
  • Click to share on Reddit (Opens in new window)
Posted in: My DIY Projects Tagged: Dance Dance Revolution, DDR, DiY, Maker

Fixing my CHIP

February 12, 2016 / Leave a Comment

chiplogoI mentioned getting my CHIPs from NextThing aq bit ago, but I have not really done much with them. I noticed a bit of an issue keeping them powered when I set them up and assumed I had been using a power supply that wasn’t ideal. I believe it was the one off of the Chromecast on the TV, just because it was handy. It turns out, this is not the case, there is actually an issue with the software of the CHIPs that have shipped so far. I don’t beleive it affects all of them but it’s probably a good idea to update anyway.

It’s a pretty simple process, you can review the boot repair process here. The main issue you may have is that it requires you be running Ubuntu (or really just Linux). You can get a live image and load it using a USB drive though, and being familiar with Linux is useful for working with the CHIP itself since, it runs Linux.

I’m already running Ubuntu on my Laptop, so no issues for me there, my issue was actually getting something to short the pins for FEL mode. I didn’t have any breadboard wires handy at the time. I tried a paperclip as suggested but it was too large to stick in the pin holes. Instead I found a piece of wire to strip off. The point is, almost any melat strip would work to conduct between the pins.

You may also want to try flashing the whole image. Details on this process can be found on the NextThing’s website. It’s the same basic process of fixing the boot but you need to do more work yourself instead of just running a pre made fix app.

I’ve been trying to find some good plans and ideas for my CHIPs. There are some good ideas listed here.

I wanted to try turn a USB camera into a Streaming camera, but I can’t locate any of the USB cameras I used to have.

This Web and Bluetooth Sniffing device seemed neat, though once I started looking at it it looks more like it just tracks Wireless APs in the area, I’m more interested in building a network monitor.

This homemade Amazon Echo clone is pretty neat, and seems like an interesting project to work on that involves some hardware set up as well as software.

Share this:

  • Click to share on Facebook (Opens in new window)
  • Click to share on Twitter (Opens in new window)
  • Click to share on Tumblr (Opens in new window)
  • Click to share on Reddit (Opens in new window)
Posted in: CHIP Tagged: CHIP, IOT, Maker, NextThing

Pushing Arduino Data to MySQL via PHP Part 2: The Server

September 24, 2015 / 1 Comment

tempdataIn the last post, I talked about how to send data from the Arduino to the MySQL server.

Today, I’ll cover how I’m receiving and displaying that data on the server side.  I’ll put the code for the webpages into this post but I’ll put everything together in a nice little package at the end of everything.  I mentioned last post that the end trick was to let the server worry about processing the data instead of the Arduino.  I’m running this on my NAS but it could be run on any standard web server with PHP and SQL.

For the purposes of this code, I’ve placed the files in a directory called “temps” on the root of the web server.  If you want to put them elsewhere, such as “temperaturelog” or “home/temps” or wherever, you’d need to alter the code of the Arduino in the previous points to replace the temps directory with the directory you plan to use.  I’m going to assume that the reader has a basic LAMP (Linux, Apache, MySQL, PHP) stack style server and knows the basics of how to create databases and run things on it.  If not you can Google the basic set up, though I may do a quick write up and reference it here eventually.

You’ll need to create a database called “housetemps” and import the linked structure file into it.  (If you know what you’re doing in PHP you can rename housetemps)   This will create a table int he database called “temperature” with the following columns: id, event, sensor, celsius, humidity, datestamp.  This will give you the basic structure needed to run the php code on the server.  A quick rundown of what these values are used for…

  • id – A standard auto incriminating id value for SQL
  • event – Time and date of when the event happened
  • sensor – A text based identifier for each probe.  This example uses one probe but could be altered for more.
  • celsius – The temperature reading, it doesn’t actually have to be Celsius, that’s just the default of the probe.
  • humidity – Humidity reading in percent humidity
  • datestamp – A date only time stamp, used for sorting the data when you review it later.

Now that you have the core database structure set up, the server needs to know the credentials for connecting to the database.  Since this is used by several files, it’s best to put the info in it’s own file and use an include statement int he PHP to add it.

In the “temps” directory create a file dbconnect.php and add int he following code, changing the values listed for the values used when setting up the database…

<?php
$MyUsername = “USERNAME”;  // enter your username for mysql
$MyPassword = “PASSWORD”;  // enter your password for mysql
$MyHostname = “localhost”;      // this is usually “localhost” unless your database resides on a different server

$dbh = mysql_pconnect($MyHostname , $MyUsername, $MyPassword);
$selected = mysql_select_db(“housetemps”,$dbh);
?>

Next you’ll need a way to get data into the table.  This is done using add_data.php, which is called by the Arduino in the code shown previously.

Make a file in the “temps” directory called add_data.php, and add the following code.

<?php
// Connect to MySQL
include(‘dbconnect.php’);

{
$dateget = date(“Y-m-d”);
// Prepare the SQL statement
$SQL = “INSERT INTO housetemps.temperature (sensor ,celsius, humidity, datestamp) VALUES (‘”.$_GET[“serial”].”‘, ‘”.$_GET[“temperature”].”‘, ‘”.$_GET[“humid”].”‘, ‘$dateget’)”;

// Execute SQL statement
mysql_query($SQL);
}

// Go to the review_data.php (optional)
header(“Location: review_data.php”);
?>

The code is pretty straight forward. The first section includes our previously created log on credentials.  The last section forwards the page on to review the data.  The meat is in the middle with the SQL statement.  The line $dateget = date(“Y-m-d”); creates a Year-Month-Day date for sorting later.  The next line creates the SQL query using variables passed via the url, the third part executes this query adding the data to the database.

The final piece of this whole thing is the review_data.php file.  This file displays the results in a nice looking table.

<?php
// Start MySQL Connection
include(‘dbconnect.php’);
?>

<html>
<head>
<title>Arduino Temperature Log</title>
<style type=”text/css”>
.table_titles, .table_cells_odd, .table_cells_even {
padding-right: 20px;
padding-left: 20px;
color: #000;
}
.table_titles {
color: #FFF;
background-color: #666;
}
.table_cells_odd {
background-color: #CCC;
}
.table_cells_even {
background-color: #FAFAFA;
}
table {
border: 2px solid #333;
}
body { font-family: “Trebuchet MS”, Arial; }
</style>
</head>

<body>
<h1>Arduino Temperature Log</h1>

<p>Select Date:
<?php

$sql = “SELECT DISTINCT datestamp FROM temperature”;
$result = mysql_query($sql);

echo “<select name=’datestamp’ onchange=’location = this.options[this.selectedIndex].value;'”;
while ($row = mysql_fetch_array($result)) {
$current = $row[‘datestamp’];
echo “<option value=’review_data.php?dateselect=$current’>$current</option>”;
}
echo “</select>”;
?>

<table border=”0″ cellspacing=”0″ cellpadding=”4″>
<tr>
<!–    <td class=”table_titles”>ID</td> –>
<td class=”table_titles”>Date and Time</td>
<td class=”table_titles”>Sensor Serial</td>
<td class=”table_titles”>Temperature in Celsius</td>
<td class=”table_titles”>Percent Humidity</td>
</tr>
<?php
// Retrieve all records and display them
$SQL = “SELECT * FROM temperature WHERE datestamp LIKE ‘”.$_GET[“dateselect”].”%’ ORDER BY id ASC”;

//Execute the SQL
$result = mysql_query($SQL);

// Used for row color toggle
$oddrow = true;

// process every record
while( $row = mysql_fetch_array($result) )
{
if ($oddrow)
{
$css_class=’ class=”table_cells_odd”‘;
}
else
{
$css_class=’ class=”table_cells_even”‘;
}

$oddrow = !$oddrow;

echo ‘<tr>’;
//       echo ‘   <td’.$css_class.’>’.$row[“id”].'</td>’;
echo ‘   <td’.$css_class.’>’.$row[“event”].'</td>’;
echo ‘   <td’.$css_class.’>’.$row[“sensor”].'</td>’;
echo ‘   <td’.$css_class.’>’.$row[“celsius”].'</td>’;
echo ‘   <td’.$css_class.’>’.$row[“humidity”].'</td>’;
echo ‘</tr>’;
}
?>
</table>
</body>
</html>

The core of this file was lifted from the previously mentioned guide on Tweaking4All.  The problem I had with their results was that it simply displayed an endless list.  I am polling every 15 minutes, so this list tends to grow unwieldy very quickly.  This is where the datestamp marker comes into play.  I added this little chunk of code at the top of the table.

<?php

$sql = “SELECT DISTINCT datestamp FROM temperature”;
$result = mysql_query($sql);

echo “<select name=’datestamp’ onchange=’location = this.options[this.selectedIndex].value;'”;
while ($row = mysql_fetch_array($result)) {
$current = $row[‘datestamp’];
echo “<option value=’review_data.php?dateselect=$current’>$current</option>”;
}
echo “</select>”;
?>

This creates a menu based on unique values of datestamp.  Selecting a value forwards you to review_data.php with a date attached, then review_data.php only shows data that matches that datestamp.  This allows a single day to be viewed easily.  In the future I may add a bit more to this menu, eventually, the list of dates will also become unwieldy in length.  I also plan to run numerous sensors at once with different names so I’ll likely also add a second menu so the list can be sorted down by sensor name.

I’m also looking to add a bit more functionality to the code in the form of a graph, so it will be easier to see trend lines in the data.  The data I have now is from my office, in a well insulated basement room, so the trend lines are rather boring, but when there are several sensors in different rooms in the main area of the house, or even outside, this data becomes more interesting and useful.  I’ll go into this at a later day though…

 

 

Share this:

  • Click to share on Facebook (Opens in new window)
  • Click to share on Twitter (Opens in new window)
  • Click to share on Tumblr (Opens in new window)
  • Click to share on Reddit (Opens in new window)
Posted in: Arduino Tagged: Arduino, Maker, PHP, Projects, SQL, Temperature Project
1 2 3 Next »
Twitter LinkedIn email
Instagram Instagram GitHub
Letterboxd Duolongo Goodreads
Last.fm Elite Dangerous INARA
Lameazoid Logo

Categories

  • ►Feeds (181)
    • Elite Dangerous (4)
    • Letterboxed (177)
  • ►Lifestyle (37)
    • Books (4)
    • Language (1)
    • Music (15)
    • Organizing (5)
    • ►What I Use (10)
      • Photography (2)
      • Software (6)
  • ►Maker (66)
    • Arduino (8)
    • CHIP (5)
    • ►Coding (25)
      • Advent of Code 2020 (12)
    • Hardware (1)
    • Home Security (2)
    • My DIY Projects (6)
    • Raspberry Pi (9)
    • The Basement (6)
    • The Cloud (3)
  • Micro Blog (50)
  • ►Opinion/Editorial (11)
    • Copyright and You (3)
    • Privacy (3)
    • Social Media (2)
  • ►Photos (85)
    • Concerts (7)
    • Fairs (8)
    • Other Photos (12)
    • Outdoor and Nature (4)
    • Zoos (12)
  • ►Technology (35)
    • ►Devices (20)
      • Android (3)
      • PCs (6)
      • Synology NAS (4)
      • Windows Phone (3)
    • ►OS (4)
      • Linux & Open Source (2)
      • Windows (2)
  • Uncategorized (3)

Hosted on…


Help support hosting with our referral link!

3rd Party Feed Syndication:

  • The Suicide Squad, 2021 – ★★★½
  • Spare Parts, 2015 – ★★★
  • Robot Apocalypse, 2021 – ★
  • The Rhythm Section, 2020 – ★★★
  • Snow Black, 2021 – ½

Micro Blog Posts:

  • 2022.07.15 – Daily Games
  • 2022.07.14 – Daily Games
  • 2022.07.13 – Daily Games
  • 2022.07.12 – Daily Games
  • 2022.07.11 – Daily Games

Copyright © 2022 [Blogging Intensifies].

Me WordPress Theme by themehall.com