Jump to content

infinitr

New Members
  • Posts

    4
  • Joined

  • Last visited

Everything posted by infinitr

  1. Hello all. Great thread. I've been working on this project as well, off and on over the last few years. I've experimented with several methods, including an LED flasher similar to that described above (which is awesome btw). Ultimately, I wanted complete control of the robot, so I designed a completely custom circuit board that interfaces with an Arduino to allow for that. The board interfaces with the existing motors and turn sensors, but bypasses the original optical sensor. However, it also allows you to connect your own buttons, sensors, LEDs, etc to create new methods of interaction. This is a fairly extensive mod, but the board fits in the same location as the original one. I've also upped to voltage slightly by fitting one additional cell. Perhaps the trickiest part is that these robots are old, and they require maintenance from time to time. However, the project has been successful and InfinitROB was born. I've been creating some new experiences, and have even built new accessories for it. The new interactions have been my primary focus. However, one of the challenges that often gets mentioned is the ability to play Gyromite on a modern monitor or hdtv. You can read about the challenge that this is above. I've come up with a few solutions, one optical like the original and one that circumvents the timing restrictions all together. While the optical is most similar to the original, it is still somewhat prone to error and differences in sensor sensitivity. The latter method uses an NES game pad connected directly to ROB, which can then pass commands both to ROB and to the game, making it able to control Gyromite like the original controls. ROB still operates with a second NES controller connected to a USB adapter. It's a slightly different approach, but it works without the fussiness of refresh rates and such. I have a ton of information, though I am still working on all this. So far I have built a complete robot with both original and new accessories, as well as a second development board. I've built the complete schematic, circuit board, and all of the code which I am currently cleaning up a bit. I also have the 3D models for accessories including a spinner holder (to place it in alternate positions), gyro holder/button, as well as an arcade button grid that ROB can interact with. I hope that some of you enjoy this. I've worked hard on it and am pretty proud. I hope to demo an entirely new ROB experience shortly, which is near completion.
  2. Thank you Pioneer4x4 for the development and for sharing information. While I haven't been using an Atari for this, I have been working on a R.O.B. project off and on over the last few years that was in part inspired by this thread. I don't want to hijack, but I felt that it was relevant since the R.O.B. community is fairly niche. I call my version InfinitROB. However, instead of relying on the original electronics, I have completely redesigned the logic board, based on Arduino, and have reprogrammed and extended the abilities of the robot. Here are a few demo videos...one of basic operation and one working with Gyromite on an LED monitor. This is quite an extensive modification, so while it has a lot of abilities, it's a considerable build to get to this point. While I'm here, might as well add that I miss our Atari 800. Cheers!
  3. Thanks for the reply. The lines digitalWrite(13, HIGH); delay(delayTime); Turn the LED light on digitalWrite(13, LOW); delay(delayTime); Turn the LED light off In the Arduino world, setting a pin HIGH and LOW is similar to flipping a power switch on and off. 13 happens to be the number of the pin that I am switching. The Arduino has several pins (Digital Input/Outputs) that can be used to control various devices such as lights, circuits, motors, etc. I'm loading the 0's and 1's into an array, and then using a loop to cycle through the values. If it's a 0, the LED light turns off. If it's a 1, the LED light turns on. Then I am using the delay to tune the timing between the 0's and 1's to try to match the rate necessary to communicate with ROB. Effectively, it's the equivalent to a black screen and a white screen, except rather than flashing a screen I am just flashing an LED light at ROB. I'm definitely interested in whatever you can provide...I'm not so much interested in gaining anything from it other than cracking the code and bringing this technology back to life.
  4. Hello, I had to bring this thread back to life. I am trying to wake up a R.O.B. and found this. There is some good info here that I was able to get some use out of, though not yet a consistent result. I'm taking a little different approach. I went on the notion that the refresh rate of current monitors is the issue. So I decided to try to use an Arduino to pulse an LED in the eye of R.O.B. using the info posted here. Note that the LED needs to be pointed directly into the eye. I used a yellow one, but don't have a lot of info about the other colors yet. It works, but there are still some issues I am not sure how to solve. I was able to sort of tune the delays using an analog potentiometer until the robot responded. The initialization part seems to work fairly well as the LED on his head flashes, and sometimes he will make a move but it is not usually what I expect. The timing of the delays may be the issue, and there is likely a better use of a timer to get consistent pulses. I hope if anyone knows AVR or Arduino they can chime in and help tighten this up. He is responding though so there is a possibility to give an input that will use an LED to pulse the correct signals. This is what I have right now, it's a bit messy because I am just hacking back and forth. Keep in mind there are a few different delay variables that I was experimenting with because I noticed that a delay at half the rate for the action section was causing motions. Again I am not sure if this is just a result of the timer being off Any further help is appreciated. int potPin0 = A0; // select the input pin for the potentiometer int potPin1 = A1; // select the input pin for the potentiometer int ledPin = 13; // select the pin for the LED int delayTime =30; // variable to store LED delay 1 int delayTime2 = delayTime/2; // variable to store LED delay 2 int delayBetween = 0; // variable to store a delay between Init and Action void setup() { Serial.begin(9600); // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); } void loop() { RobMove(); //delayTime = analogRead(potPin0); //delayTime2 = analogRead(potPin0); //delayBetween = analogRead(potPin0); Serial.print("Delay 1: "); Serial.println(delayTime); Serial.print("Delay 2: "); Serial.println(delayTime2); Serial.print("Delay Between: "); Serial.println(delayBetween); Serial.println(""); delay(2000); } ///FUNCTIONS void RobMove () { bool Init[] = {0,0,0,1,0}; bool Action[] = {1,0,1,0,1,0,1,1}; //Initialization for (int i=0;i<sizeof(Init);i++){ if (Init[i]==0){ digitalWrite(13, LOW); delay(delayTime); } else{ digitalWrite(13, HIGH); delay(delayTime); } } //delay(delayBetween); //Action for (int i=0;i<sizeof(Action);i++){ if (Action[i]==0){ digitalWrite(13, LOW); delay(delayTime2); } else{ digitalWrite(13, HIGH); delay(delayTime2); } } //Reset LED OFF digitalWrite(13, LOW); } //Other test functions void RobCalibrate() { delayTime = 30; delayTime2 = 18; //delayTime2 = analogRead(sensorPin); //Serial.println(delayTime2); //---------------- digitalWrite(13, LOW); delay(delayTime); digitalWrite(13, LOW); delay(delayTime); digitalWrite(13, LOW); delay(delayTime); digitalWrite(13, HIGH); delay(delayTime); digitalWrite(13, LOW); delay(delayTime); //----------------- digitalWrite(13, HIGH); delay(delayTime2); digitalWrite(13, LOW); delay(delayTime2); digitalWrite(13, HIGH); delay(delayTime2); digitalWrite(13, LOW); delay(delayTime2); digitalWrite(13, HIGH); delay(delayTime2); digitalWrite(13, LOW); delay(delayTime2); digitalWrite(13, HIGH); delay(delayTime2); digitalWrite(13, HIGH); delay(delayTime2); //------- } void RobTest() { delayTime = 30; // delayTime = analogRead(sensorPin); //Serial.println(delayTime); //---------------- digitalWrite(13, LOW); delay(delayTime); digitalWrite(13, LOW); delay(delayTime); digitalWrite(13, LOW); delay(delayTime); digitalWrite(13, HIGH); delay(delayTime); digitalWrite(13, LOW); delay(delayTime); //----------------- digitalWrite(13, HIGH); delay(delayTime); digitalWrite(13, LOW); delay(delayTime); digitalWrite(13, HIGH); delay(delayTime); digitalWrite(13, LOW); delay(delayTime); digitalWrite(13, HIGH); delay(delayTime); digitalWrite(13, LOW); delay(delayTime); digitalWrite(13, HIGH); delay(delayTime); digitalWrite(13, HIGH); delay(delayTime); //------- }
×
×
  • Create New...