Rpi Media Server | Testing video playback from external data source [Documentation]

So first we need to make sure I can output video files from a usb source.

I’ll be using “usbmount” and omxplayer, to get these packages make sure you’re pi’s setup correctly and run the following commands:

Note: make sure no storage devices are plugged into the usb port when you install “usbmount”

Once those are installed you can start trying to play videos off of the usb drive (eventually the thumb drive  will be replaced with a large hdd

I’ll be using filezilla to transfer to and from the pi.

Check out the video below to see omxplayer in action:

Edit: The upload failed and I forgot to check on it. Come back soon for the video.

I’m choosing to debug my Pi over composite. The reason being is because I’m going to be working a lot with video outputs, and I don’t have a second hdmi ready monitor. I’m going to be using the EasyCAP usb video capture card. This will also give me the ability to record what i’m seeing as well. This 100% better / much more efficient than buying a second monitor and filming on it. Of course when this is ready for implementation, it will be plugged into a television with HDMI so the picture will be amazing.

Rpi Media Server | [Declaration]

The goal of this is to become independent from cable TV while still being able to do all of the same things we would with a cable service – I.E still consume content in the living room on the television.

It should also improve upon the experience. I want to be able to stream content from the Pi to any capable device. That list includes but is not limited to:

I’ll be working on this post most of today, so they’ll be a few posts coming.

Plane | 3 Functional Parts and Other Ideas [Documentation]

I’ve still got no idea what i’m going to name it.  If you’ve got an idea in for the name, feel free to leave it in the comments. Actually on that note, If you’re reading this PLEASE leave a comment. I’ve had A LOT of bot traffic lately so i’m starting to really crack down on who’s a real reader or a bot.

So as you can see in the video above, I’ve gotten all 3 components working. I can use either joystick axis to control either the left or right servo independently. The potentiometer controls the value that is sent to the esc. As you can see by the code the esc signal is just a servo.write command. The controller code is identical to the last “Plane” post with the exception that the code mapped from the pot goes to 170 instead of 225. This is because I switched from a analogWrite() to a servo.write() signal.

Vehicle Code:

I’ve also been starting to think about how i’m going to take this thing to the next stage. The parts list still exists here: https://docs.google.com/spreadsheet/ccc?key=0AqD_oicSxsvmdFlPU1VPSkt6aHpoa0hqSEgwdDE2RGc  if you want to check out what i’ve done so far. I’m starting to consider materials to make the body out of. Right now the main contendor is making a frame out of aluminum dowels welded together. I’ve got a friend who can weld aluminum so assembling the frame won’t be an issue. If I go with this option, i’ll be able to cleanly mount things to the vehicle itself, and not have to worry about things splitting or cracking. It will also be heavier than if I were to go with an all foam body.

I’ve also been considering what i’m going to get for a camera for this thing. As one of the goals for this was to be able to take really nice areal videos. I’ve tentatively landed on a camera called the HackHD. The thing that’s most attractive about it is that it can do 1080p video capture AND composite video output at the same time. This is great because my original plan was to have 2 cameras – one for HD video capture, and one to transmit back to my computer. The only problem is it’s price. I could easily just hack one of those HD keychain cameras to make it operable via micro controller – but I would need to use two cameras which could be cheaper after all but powering two separate cameras would be pretty difficult.

I need to wirelessly communicate with the vehicle as well. If you look through some of the videos on my old youtube channel you can see a little RC tank that communicated via bluetooth, so I’ve got a shred of experience with homebrew wireless. Again, I’ve tentatively landed on a solution. I’ve concluded that using an Xbee system would be the most flexible while maintaining stability. It can be used as a long-range serial TxRx pipe which is what i’m prototyping with now, so the whole code’s built around that. I’d be using the XBee 1mW Wire Antenna – Series 1 (802.15.4) for the transmitter, as it’s easy to power and has an omnidirectional antenna with a range of 1 mile. While I may not be flying a mile away, I’d like to have the flexibility. I could fly in the woods, in the snow, or in the fog. To connect the xbee to the Arduino I’d probably use the SainSmart XBee USB Adapter because it’s got the UART broken out. I could use the same board to connect it to the pc as well. I could make the whole system work for around 72 dollars, which is a little high but I really want it to work well.

I’ll cover powering it in another post, but I think the next thing I get is going to be the wireless stuff. I’ve been thinking a lot about how i’m going to proto a moving vehicle, I’m thinking of some kind of fan-boat thing. Or a 3 wheeled fan propelled car.

New!

www.youtube.com/thesupertechchannel is officially going away. I will be removing all videos pertaining to content that is hosted on this website, and re-upload them to my new channel at www.youtube.com/esological. They will be reinstated on this site as well.

The why here is irrelevant. This change will slow me down a bit a first – I know i’ll be losing 90% of my audience by this change. Over time however, this change is one that needed to happen. thesupertechchannel was created in a time where I really didn’t know what content I wanted to make. I was a kid in middle school with a laptop and a copy of Sony Vegas. My analytics show that >= 50% of my views are found via search engine anyways so as long as I market myself better or at least as consistently as I did in days past, it won’t take me long to get to the point where I get ~ 100 views per video again.

I will also be able to analyze where my traffic is coming from better with this change. Hopefully I’ve some audience from this website,  and now that i’ve implemented changes in the back end of the operation of this site to be able to see where views are coming  from, I’ll be able to tailor content style to whatever posts get me the most traffic – what viewers want.

Woo!

also: minecraft, www.esologic.com:25565

Plane | Functioning Plane Output Simulator [Research]

So here are all 3 prongs of the plane code thus far. This sends data to the visual basic program, then to the visual basic program where it gets interpreted and then sent to the plane simulator Arduino. Where it is written to servos and and led.

Arduino Controller:

Arduino Vehicle:

Visual Basic:

https://esologic.com/source/plane/Round_1/vehicle_companion/

Just download those files and you should be able to open them in the vb studio.

Spitting incoming serial data arduino and visual basic

UPDATED CODE HERE


Hello! as you can probably tell, my last post was written in a fury of incoherency, but I needed to get the code out there so it is what it is.

The main focus of this post is to showcase the arduino program. The visual basic in the video is very simple, and there will be much more on that later.

This below program will take a string of characters fed to the arduino and split them into usable parts. This is a very valuable tool for working with serial and arduino. It’s pretty well commented, but if you have any questions, PLEASE leave a comment. I’d love to see some conversation here.

So for example if you inputted

[code]
123,456.
[/code]

it would output

[code]
123|separator|456
[/code]

to the lcd, or the serial monitor if you tweaked the code.

Now for the code in the video. The only different part about this is that it writes the two values to the servos.

const char EOPmarker = ‘.’; //This is the end of packet marker
char serialbuf[32]; //This gives the incoming serial some room. Change it if you want a longer incoming.

#include // we’ll need this for subString
#define MAX_STRING_LEN 20 // like 3 lines above, change as needed.

#include //we’ll need this for the lcd
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //pins for the lcd, I set it up using the ladyada tutorial.

#include
Servo left_servo;
Servo right_servo;

int left_servo_pos;
int right_servo_pos;
void setup(){
lcd.begin(16, 2);
left_servo.attach(2);
right_servo.attach(3);
Serial.begin(9600); //changing this to other speeds has not been tested using this meathod
}

void loop() {
if (Serial.available() > 0) { //makes sure something is ready to be read
lcd.clear(); //clears for incoming stuff, won’t clear if there isin’t data to be read
static int bufpos = 0; //starts the buffer back at the first position in the incoming serial.read
char inchar = Serial.read(); //assigns one byte (as serial.read()’s only input one byte at a time
if (inchar != EOPmarker) { //if the incoming character is not the byte that is the incoming package ender
serialbuf[bufpos] = inchar; //the buffer position in the array get assigned to the current read
bufpos++; //once that has happend the buffer advances, doing this over and over again until the end of package marker is read.
}
else { //once the end of package marker has been read
serialbuf[bufpos] = 0; //restart the buff
bufpos = 0; //restart the position of the buff

left_servo_pos = atoi(subStr(serialbuf, “,”, 1));
lcd.write(“Left Servo:”);
lcd.write(subStr(serialbuf, “,”, 1)); //witres the first bit of content before the first comma (or other seperator) to the lcd
left_servo.write(left_servo_pos);

lcd.setCursor(0, 1);

right_servo_pos = atoi(subStr(serialbuf, “,”, 2));
lcd.write(“Right Servo:”); //this signifies that the first seperation has occured
lcd.write(subStr(serialbuf, “,”, 2)); //same thing as 2 lines above, but with the second parts. this can be repeated
right_servo.write(right_servo_pos);
}
}
}

// below is just function logic, which I do not fully understand. but it works.
char* subStr (char* input_string, char *separator, int segment_number) {
char *act, *sub, *ptr;
static char copy[MAX_STRING_LEN];
int i;

strcpy(copy, input_string);

for (i = 1, act = copy; i <= segment_number; i++, act = NULL) {

sub = strtok_r(act, separator, &ptr);
if (sub == NULL) break;
}
return sub;
}

//esologic.com
//Thanks to http://arduino.cc/forum/index.php?topic=119429

Splitting Strings Arduino

UPDATED CODE HERE


 

Hello!

Today I ordered parts for the proto phase of the plane.

This is a bit of code i’ve found that’s usefully for splitting strings in the arduino C

Plane | Project [Declaration]

Ever since I posted this back in January I’ve been collecting ideas and information on how to make something like the craft pictured in the video and related ones.

The tenative parts list can be found here, but there’s an analog accelerometer, an esc + brushless motor combo, and a battery array so far.

As for wireless, that’s the one area of this project that I’ve done no research on at all. I’m probably going to use a long range bluetooth serial connection, or an xbee serial connection. No matter what it’s going to be serial, as that’s what I’m most familiar with.

So far I’ve proto’d the controller and written the framework for the visual basic program and some of the controller arduino side of the program.

Here’s the video of what I’ve done so far, as you can see the trackbar visualizes reallly nicely. and i’m using the split function and my knowledge of arrays to separate x and y resistance values from the joystick:

http://youtu.be/qTN9DqKTL9M

 

As you can probably also tell, there’s no name for the project yet, if you think of something let me know!

 

Research Link Repo:

http://www.open-electronics.org/mma7455l-three-axis-digital-output-accelerometer/

http://hackaday.com/2012/02/10/using-a-cheap-accelerometer-with-arduino-comes-with-a-catch/

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1263756306 //Wii as accelerometer.

PiScanner | Project Execution [Demonstration/Distribution]

I should preface this by saying that it is no where near as polished as it could be. But it works, and the objects taken by the camera are recognizable. Eventually, if I have the funding, I will upgrade the Camera.

There are many elements to this project. There really isn’t a great place to start with this project, so well start with the fritzing schematic and a list of materials needed.

You will need:

2 Attiny85’s
16 wires
a breadboard
a 100k ohm resistor
a 330 ohm resistor
a raspberry pi
PIR motion detector
the cables for interfacing with the raspberry pi
an isp programmer for the attiny’s

So let’s look at this schematic:

When motion is detected, the signal pin on the motion detector gets pulled low. at this point the 3.3v attiny pulls pin 1 high, sending a signal into the rpi (it’s 3.3v so it’s safe for the broadcomm) and illuminating an LED so the user can see that motion is being detected.

The raspberry pi then sends a signal to the 5v attiny indicating that motion has indeed been detected. Once this occurs, the 5v attiny pulls the 5v pin going to the webcam high. I had to integrate this step of turning the webcam on via the attiny because there is a hardware misconfiguration that causes the software i’m using to take the picture hang. Turning the camera off and on each time a picture needs to be taken gets rid of this problem, because the camera always takes the first picture after being turned on.

At this point a picture is taken and moved to a flash drive. They could be moved wherever, but a flashdrive works the best for now, as I will be deploying this system in a place where there isn’t internet (in my garage)

Now time for source codes!

Software wise you will need:

The Arduino IDE

Python (I’m using Geany on the raspberry pi)

fswebcam which you can obtain by running

On your raspberry pi.

This is the source for the 3.3v attiny85

This is the source for the 5v attiny85

This is the python source, you will need to install this to make it work though.

This is the Fritzing document.

Here’s a sample image from the camera. It is looking at the breadboard.

PiScanner – GPIO output | Documentation [Research]

I will need to illuminate the “subjects” that I will be capturing. In order to do this, I will eventually need to set some pin high. Weather it be that it sets of a camera flash or turns on some lights for a second, it will need to happen down the line.

 

Like all of my “research” I mostly googled around / plugged in code until something worked. I came back with these links:

http://www.youtube.com/watch?v=q_NvDTZIaS4

https://docs.google.com/file/d/0B2-00drKdqF0V09YSHgxcTEtelk/edit

http://hackaday.com/2012/06/17/using-the-gpio-pins-on-a-raspberry-pi/

 

Basically you need to install the Raspberry Pi GPIO, Import and use the RPi GPIO

1. Download the library:

$ wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.2.0.tar.gz#md5=0fc4bfa6aabc856b0b75252a40ac75cc

2. unzip the file:

$ sudo tar -zxvf RPi.GPIO-0.2.0.tar.gz

you can remove the .tar.gz at that point

3. get into the directory you just created:

$ cd  RPi.GPIO-0.2.0

4. The devs included a great install script with this package, run it to install with:

$ sudo python setup.py install

Now you should see a bunch of text in the command line. I have no idea why, but my first run of this command didn’t “take” but I ran it again and now it works great.

 

To use this, you need to know what pins correspond to pins on the RPi. You can google this yourself.

 

Now we get writing code. I’m using a graphical python editor called geaney which comes pre-loaded with squeeze.

 

To blink pins 11 and 13, use and run this python script.

You can see the plaintext version of that script here.

 

Essentially i’m trying to mimic things I’ve done with an Arduino for some time.

Maybe later today (if I can somehow find a 100ohm resistor) I’ll work on using inputs. I have a PIR motion sensor with me, but I neglected to bring the proper resistor to use it. I do have tack switches and resistors for those, which I could use to mimic the motion detector, but I don’t think that would be as cool.