Cheap second-hand hardware is usually a fertile ground for hacking, and it looks like these digital classroom aids are no exception. [is0-mick] writes in to tell us how he managed to hack one of these devices, a Smart Reponse XE, into an Arduboy compatible game system. As it turns out, this particular gadget is powered by an ATmega128RFA, which is essentially an Arduino-compatible AVR microcontroller with a 2.4GHz RF transceiver tacked on. This makes it an extremely interesting platform for hacking, especially since they are going for as little as $3 USD on eBay.
There’s no USB-Serial converter built into the Smart Response XE, so you’ll need to provide your own external programmer to flash the device. But luckily there’s a labeled ISP connector right on the board which makes it pretty straightforward to get everything wired up.
Of course, getting the hardware working was slightly more complicated than just flashing an Arduino Sketch onto the thing. [is0-mick] has provided his bootloader and modified libraries to get the device’s QWERTY keyboard and ST7586S controlled 384×160 LCD working.
Playing games is fun, but when his friend [en4rab] sent him the Smart Response XE to fiddle with, the goal was actually to turn them into cheap 2.4 GHz analyzers similar to what was done with the IM-ME. It seems they’re well on their way, and [is0-mick] invites anyone who might be interested in filling in some of the blanks on the RF side to get involved.
/* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
Contact information
-------------------
Kristian Lauszus, TKJ Electronics
Web : http://www.tkjelectronics.com
e-mail : kristianl@tkjelectronics.com
*/
#ifndef _Kalman_h
#define _Kalman_h
class Kalman {
public:
Kalman() {
/* We will set the varibles like so, these can also be tuned by the user */
Q_angle = 0.001;
Q_bias = 0.003;
R_measure = 0.03;
bias = 0; // Reset bias
P[0][0] = 0; // Since we assume tha the bias is 0 and we know the starting angle (use setAngle), the error covariance matrix is set like so - see: http://en.wikipedia.org/wiki/Kalman_filter#Example_application.2C_technical
P[0][1] = 0;
P[1][0] = 0;
P[1][1] = 0;
};
// The angle should be in degrees and the rate should be in degrees per second and the delta time in seconds
//Throttle val = TxVal[1] / 10; val = map(val, 1, 179, 30, 179); val = constrain(val, 1, 165); // scale it to use it with the servo (value between 0 and 180) servo[0].write(val); // sets the servo position according to the scaled value
//Vee tail
//Left Elevator Joy 1 Y TxVal[4] val = (YawTarg + YawTrim) + (PitchTargCentred + PitchTrim); val = constrain(val, 15, 165); val = map(val, 0, 179, 135, 45); // scale it to use it with the servo (value between 0 and 180) servo[1].write(val); // sets the servo position according to the scaled value
//Right Elevator Joy 1 Y TxVal[4] val = (YawTarg + YawTrim) - (PitchTargCentred + PitchTrim); val = constrain(val, 15, 165); val = map(val, 0, 179, 135, 45); // scale it to use it with the servo (value between 0 and 180) servo[2].write(val); // sets the servo position according to the scaled value
//Left Flaperon val = 90 + (RollTargCentred + Flaps) + RollTrim; val = constrain(val, 15, 165); val = map(val, 0, 179, 165, 15); // scale it to use it with the servo (value between 0 and 180) servo[3].write(val); // sets the servo position according to the scaled value
//Right Flaperon val = 90 + (RollTargCentred - Flaps) + RollTrim; val = constrain(val, 15, 165); val = map(val, 0, 179, 165, 15); // scale it to use it with the servo (value between 0 and 180) servo[4].write(val); // sets the servo position according to the scaled value
//Joy 2 x nose Wheel val = (TxVal[6] / 10); val = map(val, 0, 179, 55, 125); servo[5].write(val); // sets the servo position according to the scaled value
}
14% Clark Y more or les given the limitations of the Coroplast
About
Planet Arduino is, or at the moment is wishing to become, an aggregation of public weblogs from around the world written by people who develop, play, think on Arduino platform and his son. The opinions expressed in those weblogs and hence this aggregation are those of the original authors. Entries on this page are owned by their authors. We do not edit, endorse or vouch for the contents of individual posts. For more information about Arduino please visit www.arduino.cc
You are currently browsing the archives for the 2.4GHz category.