Posts Tagged ‘ arduino

First steps with the Adafruit Trinket

I recently picked up a Adafruit Trinket (3.3v), simply because they’re so cheap (about $8).  I like the idea of a tiny small Arduino-ish board.  Since I’m forgetful, below documents the overall process I got to get it working.

End result:  Franken-servo!

End result: Franken-servo!

Resource Links:

First Steps:

For all the documentation on the web, I really wasn’t sure where to start.  There’s all this talk of installing AVRDUDE, etc, but as it turns out it’s really not needed (if using the Arduino IDE). Here’s the streamline approach I finally took:

  • Setup my pre-existing Arduino IDE for use with the Trinket, following these Adafruit docs.
  • Since I’m on a Mac, I didn’t have to worry about installing any drivers, but the “Mac Arduino IDE” app download they provided didn’t work.  Mac said it was “corrupted”.  So instead I had to use the “Slow Way” example they gave.  And other than a few path differences it worked just fine.

Programming:

  • I was able to successfully run all their examples from the page “Programming with Arduino IDE“.
  • Earlier in the day I had done some servo programming on an Arduino, and I wanted to emulate it on the Trinket.  Thanks to the “Trinket Servo Control” tutorial, and their “Adafruit SoftServo” library, I was able to make it happen.  However, I was unable to create two separate servo objects:  I think I don’t quite grasp the Trinket pinouts.  The above image has two servo’s hooked up to the same pin, so they move the exact same way.

So a successfully first attempt.  Next up, I really need some batteries to make a standalone project with it…

Control your Arduino via Python with your Raspberry Pi

I recently ran across the nanpy library for Python when looking at different internet radio projects using the Raspberry Pi.  It allows you to easily control your Arduino from Python, and it installs on the Pi in a snap:

First, install Arduino:

$ sudo apt-get install arduino

Next, install the nanpy source:  This is needed to later build the new Arduino firmware:

$ cd ~
$ curl -O https://pypi.python.org/packages/source/n/nanpy/nanpy-v0.8.tar.gz
$ tar xvf nanpy-v0.8.tar.gz
$ rm nanpy-v0.8.tar.gz

Now install the required Python libs:

$ sudo pip install nanpy
$ sudo pip install pyserial

Hook up your Arduino to one of the Pi’s USB ports, and create/upload the new firmware (using an Arduino Uno as an example):

$ cd ~/nanpy/firmware
$ export BOARD=uno
$ make
$ make upload

From there, programming my Pi via the Adafruit WebIDE (and with my Arduino hooked up to a breadboard with the required led’s and resistors),  I recreated a few basic Arduino sketches to see how it worked.  It worked as expected, simple and easy.

Here is a port of the basic Arduino Blink sketch:

from nanpy import Arduino as A
led = 13

# SETUP:
A.pinMode(led, A.OUTPUT)

# LOOP:
while True:
    A.digitalWrite(led, A.HIGH); # turn the LED on (HIGH is the voltage level)
    print "blink on"
    A.delay(1000); # wait for a second
    A.digitalWrite(led, A.LOW); # turn the LED off by making the voltage LOW
    print "blink off"
    A.delay(1000);

And a port of the basic Fade sketch:

from nanpy import Arduino as A
led = 9
brightness = 0 
fadeAmount = 5

# SETUP:
A.pinMode(led, A.OUTPUT)

# LOOP:
while True:
    # set the brightness of pin 9:
    A.analogWrite(led, brightness)
    # change the brightness for next time through the loop:
    brightness += fadeAmount
    # reverse the direction of the fading at the ends of the fade: 
    if brightness == 0 or brightness == 255:
        fadeAmount = -fadeAmount
    # wait for 30 milliseconds to see the dimming effect 
    A.delay(30)

Only a few core libraries are currently supported.  To see the list, you can visit this page.

On a side note I should point out I went to great lengths to get this working on my Mac, without a lot of success.  You can check out my Python Wiki post on it, under the “Mac Notes” section.

Refresh your Pi

It seems like I use my Raspberry Pi just often enough to forget everything about how I set it up the previous time.  Unlike an Arduino, it’s possible all sorts of new configuration \ updating will need to take place if it’s sat for a few months.  This post will serve mainly a notepad to myself on what I need to do to get it up and running again, and info on how to do fresh installs.

I’m sure this all can vary widely from user to user and Pi to Pi.

Great Linux/Unix command-line cheat-sheet: Web Site, PDF.

First Time Setup Guides

Just in case you do need to do everything from scratch:

The overall gist is:

  • Format SD
  • Download Linux distro and install on card
  • Once the pi is up and running, via the settings menu:
    • Expand the root partition:  This is only needed for older distro installs.  If you’re using NOOBS, it should be auto-expanded.
    • Set screen overscan (if wanted)
    • Configure keyboard
    • Change password (if wanted)
    • Set locale, timezone
    • Enable ssh & boot behavior
  • Optionally you can then try to make a new user, but I’ve not found a need yet.  And when I do it, I tend to screw it all up permission-wise.
  • Install VNC (so you access the Pi’s gui remotely)

Linux Distros

I’m the last person you want to ask about which distro to use, but the two main one’s I have used are Raseberian, and Occidentalis.  Rasberian is now installed as part of NOOBS, and it’s a much easier install than in the past.

  • NOOBS : From the page:  ”We recommend that first-time Pi users start by downloading and installing our New Out of Box Software (NOOBS) onto a 4GB (or larger) SD card. On first boot, this presents you with a choice of operating systems to install, including Raspbian, Pidora and two flavours of XBMC. Once you have installed an operating system, you can return to the NOOBS interface by holding down shift during boot; this allows you to switch to a different operating system, or overwrite a corrupted card with a fresh install of the current one.”
  • Occidentalis : From the page : “Our distro is based on “Wheezy” but comes with hardware SPI, I2C, one wire, and WiFi support for our wifi adapters. It also has some things to make overall hacking easier such sshd on startup (with key generation on first boot) and  Bonjour (so you can simply ssh raspberrypi.local from any computer on the local network)”

Get into the Pi

It’s been a while, how do I do that?  I forgot where my  surplus usb keyboard is & the wifey is using the spare hdmi cable…

(To do a first-time setup of SSH & VNC, see the post, “Connecting the Mac to the Pi“)

First, SSH:

This will let external machines talk to the Pi.  The primary way I interact with the Pi.
Connect the pi to the network (I use cat5).
There’s a good chance the dynamic ip has changed.  From another computer, access the router and click on the ‘DHCP Client List’ to find the new ip of the Pi.
Or, if you have the Pi plugged into a monitor \ keyboard, you can enter the below command, and look for the “inet addr”

$ sudo ifconfig

Open a shell.  ssh into the Pi:

$ ssh <pi ip address> -l <userName>

Enter password.  Hopefully it lets you in…

This can fail though on a new install.  I get this on my mac:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
etc...

If this happens, lower down in the error it will have this line:

The fingerprint for the RSA key sent by the remote host is

And right below that, is an address.  Copy that address, browse (on the mac) here:

/Users/<userName>/.ssh/known_hosts

Edit that file (known_hosts), and find the section starting with the local ip of your pi.  At the end of that section, add a ‘+’, then paste in the address copied above.

When you try to re-ssh back in, it will ask you if you want to add this new host, and say “yes”.  Enter the password, and you should be good!

Copying files over SSH:

Once you have a ssh connection, you can copy data from one machine to another.

From a terminal on your PC (in my case, a Mac):

Copy data from the Pi to the PC:

$ scp pi@you_pis_ip:/path/to/source/file/on/pi /path/to/destination/file/on/pc

For example:

$ scp pi@192.168.2.27:~/piVid.mp4 ~/macVid.mp4

Copy data from your PC to the Pi:

$ scp /path/to/source/file/on/pc pi@you_pis_ip:/path/to/destination/file/on/pi

For example:

$ scp ~/macVid.mp4 pi@192.168.2.27:~/piVid.mp4

I should note that I’ve not got this to work over SSH from a terminal on the Pi.  But once a ssh connection is open, I can execute these from a terminal on my Mac just fine.

Copying files via SFTP

If you want a more robust solution to copying files to\from the Pi, SSH File Transfer Protocol (SFTP) is a good solution. The post HERE by Trevor Appleton covers how to set it up using FileZilla.  Provides a super easy way via the FileZilla gui to drag & drop files.

Second, VNC:

Once you’ve ssh’d in to the Pi, optionally you can access the desktop via VNC.

If not yet installed, install it:

$ sudo apt-get install tightvncserver

Then start the server:

$ vncserver :1

To start the server.
On your other PC, access the VNC Viewer app.
Set the VNC server address to <pi ip address>:1
Connect:  You should see your Pi’s desktop on your PC.

Update Pi Configuration

Not always needed, but if you need to access the global configuration on the pi, from the shell enter:

$ raspi-config

When done, if a reboot is needed:

$ sudo reboot

Optionally, to safely shutdown the Pi (rather than just unplugging it, which I’m told can be hard on the sd card) :

$ sudo shutdown -h now

Auto Login

Check out the post here:  Raspberry Salad Part 3: Auto-run program on startup

General linux commands

  • ifconfig : network info
  • pgrep <process name> : Return the process id
  • kill <process id> : delete the process
  • lsusb : Get attached usb device info

Setup WiFi

Adafruit has a good overview here.  Note that their section on “Setting up WiFi with the graphic interface” works, but the Pi will only start using WiFi when the gui is up.  If you want wifi to be there at the commandline as soon as the Pi boots, you need to follow their  ”Setting up WiFi with the Command Line” tutorial.

Note, I’ve needed to have the pi connected to a monitor\keyboard\mouse to get this setup properly.   Having the Pi hooked up over lan and ssh’d in seems to override the WiFi with the lan, and I can’t get the IP.  Maybe I’m not smart enough.

Check to see if it’s working:

$ ping google.com

BUUUUT, I’d had problems with loosing connection over wifi.  After getting a tip from this thread, I added this line:

wireless-power off

to

/etc/network/interfaces

But that didn’t help anything.  So then I tried the recommendations from this thread (since it’s based on the chipset of the wifi dongle I got from Adafruit) to:

$ sudo nano /etc/modprobe.d/8192cu.conf

and add this code to it:

# Disable power management
options 8192cu rtw_power_mgnt=0

But after a reboot, it still didn’t work well.  In fact it got even harder to ssh in, it would constantly “Operation timed out”.  So I decided to connect the wifi dongle to my powered usb hub.  When I removed it from the Pi, it was really hot:  Power issues?

After plugging the wifi dongle into the  powered hub, and the hub into the Pi, nothing seemed to be working.  I had to power it on\off twice (over lan).  Bu by the 3rd time the wifi dongle started blinking, apparently recognized.  From there I set the Pi to pinging google. com, and my mac to ping the Pi.  So far, so good, internet radio is streaming.

So it looks like the Pi can’t provide enough, or stable enough power to the wifi dongle over it’s own usb port?   That seems… really annoying.

Setup Camera

This post from raspberrypi.org covers it all.

A really good tutorial covering how you can capture raw  h264 videos, convert them to mp4, the play them on the Pi can be found here: Capturing HD Video With The Pi Camera Module.

And, my own setup guide here: “Playing with the Raspberry Pi’s Camera

Software Update

I use the apt-get package manager.

Update your cache:

$ sudo apt-get update

Search the cache for software:

$ sudo apt-cache search <someString>

Upgrade all the software on the Pi (can take a while… hours…)

$ sudo apt-get upgrade

Install new software:

sudo apt-get install <package>

Remove old software.  remove can leave some dependencies behind, purge deletes it all.

$ sudo apt-get remove <package>
$ sudo apt-get purge <package>

Adafruit WebIDE

The Adafruit WebIDE is a great way to program on the Pi from some other computer over ssh.  All the code is managed in the cloud via Bitbucket.   Setup guide HERE.

The general process is:

Note if you’re ‘refreshing’ an old Pi, the WebIDE may no longer recognize it.  In that case, log into your Bitbucket account, and in the “Manage Account -> Integrated Applications” menu, remove any “Consumers” and “OAut Consumers”, and then follow the setup guide to create a new one.

Packages

Scratch-pad area of different packages used based on projects I’ve done, or learned about, and probably forgotten about.

To get a list of all the packages installed:

$ dpkg -l

This post has a great overview of many packages to install: Linux & Python Packages for my Raspberry Pi

Presuming you have pip installed, you can use this to get a list of all Python packages installed:

$ pip freeze --local

Audio

Thanks to this post, I learned about these first three apps:

Alsamixer

$ alsamixer

Alsamixer is part of the distro, and has a simple command-line interface & gui.  Gives you a simple way to adjust volume, etc.

MPD & MPC

MPD is the “Music Player Daemon”.  From the page it is “an audio player that has a server-client architecture. It plays audio files, organizes playlists and maintains a music database all while using very few resources. In order to interface with it, a separate client is needed.”

One of those clients is MPC.  It is “a minimalist command line interface to MPD, not to be confused with musepack.”

To install the two at once:

$ sudo apt-get install mpc mpd

To add internet stream(s) to play (Let’s play some Groove Salad):

$ mpc add http://ice.somafm.com/groovesalad

To play a specific stream:

$ mpc play 1

MPlayer

I used MPlayer as part of my Raspberry FM internet music streamer.

Install:

$ sudo apt-get install mplayer

Play a stream:

$ mplayer http://streamer-dtc-aa01.somafm.com:80/stream/1018

Lot more MPlayer configuration from this post : “Raspberry Salad Part 2: Raspberry FM

Games

Minecraft Pi

Why wouldn’t you want to play Minecraft on you Pi?

Note, Minecraft Pi doesn’t work for me over VNC:  The application launches, but all I see is a black window.  You need to have the Pi directly connected to a monitor/keyboard/mouse.

FYI, it needs to be ran via the XWindows gui mode, so be sure to launch it first via

$ startx

Open a LXTerminal window:  Download (to your home dir), install (then remove the tar), & run:

$ cd ~
$ wget https://s3.amazonaws.com/assets.minecraft.net/pi/minecraft-pi-0.1.1.tar.gz
$ tar -zxvf minecraft-pi-0.1.1.tar.gz
$ rm minecraft-pi-0.1.1.tar.gz
$ cd mcpi
$ ./minecraft-pi

Python

First off, be sure to get pip installed:

$ sudo apt-get install python-pip

Once that’s installed, you can use pip to pull down all other Python packages needed.  This is preferred to using apt-get, this  post does a pretty good job of explaining why.  That being said, I’ve been unable to use pip to install certain packages (like matplotlib), and apt-get works fine.  However, once installed by apt-get, pip recognizes them.

See what Python packages you have installed:

$ pip freeze

RPi.GPIO

You’ll need this to access the Pi’s GPIO pins in Python:

$ sudo pip install RPi.GPIO

pyserial

$ sudo pip install pySerial

PIL

I’ve been unable to get PIL installed via pip.  But apt-get seems to work:

$ sudo apt-get install python-imaging

scipy

Again, pip fails for some reason.

$ sudo apt-get install python-scipy

OpenCV

This wil install OpenCV, and the Python bindings:

$ sudo apt-get install libopencv-dev python-opencv

Some links:

Other Hardware

Arduino

This Instructable has a really good overview of how to instal all the necessary packages to get your Pi to talk to an Arduino: “Arduino / Raspberry Pi Internet Radio“.

$ apt-get install arduino

And other Python dependencies:

$ sudo pip install nanpy
$ sudo pip install pyserial

4WOC: Week 2

Four Weeks Of Creativity, WEEK 2!

This post will follow my ‘next 7 days of creativity’.  Back to Week 1. Forward to Week 3.

Day 14 : Sunday, Nov 25th, 2013

Kivy : Python app development

I’ve talked about Kivy in the past, but this coming week I’m going to try programming in it in ernest.  From their site, Kivy is an “Open source Python library for rapid development of applications that make use of innovative user interfaces, such as multi-touch apps.”.  They integrate many other Python libraries (like PyGame) into one cohesive whole.  Today I got the latest version installed, and loaded up some of their examples.   The biggest hurdle so far is to get it to launch in debug mode from Wing IDE (my Python development environment of choice):  I can’t seem to track down the custom Python app (I’m on a mac) that Kivy uses (on the PC this would be trivial), so currently no debugging.  I hope to get this worked out in the coming week.

Day 13 : Saturday, Nov  24, 2013

Threat Detection Sensor Mk1!

I picked up a Parallax PIR sensor a few years back at the Bay Area Maker Faire.  Always wanted to see how hard it would be to make a simple motion detector / threat detection system.  Turns out, if you have the right components, it’s really easy.

Here is the prototype in action:  Having detected me, the bright blue threat LED is on, and if you were present, you’d hear the threat audio “shave and a haircut, two bits” playing:

Components:

  • Arduino Uno (I’m sure any Arduino will work)
  • Parallax PIR sensor
  • 8ohm speaker
  • LED of your choice plus resistor (100-200 ohm)
  • Breadboard & connectors
You can download the code I made here:  It’s a mashup of these two example sketches:
Total time:  Little over an hour.
If I had the time and components to take this project further I would:
  • Allow it to be plugged into a wall, on a battery backup (in case the baddies cut the power).
  • Send me a text whenever a threat is detected.
  • Attach a simple camera to snap a picture of the threat for later retrieval.
  • Have it know what time it is when the threat happened.

Day 12 : Friday, Nov 22, 2013

Creative fail.  Completely exhausted after work, feel like I’m coming down with something.  No creativity :(

Day 11 : Thursday, Nov 21, 2013

More 3d printing : My wife has her own business selling the knitted and crocheted items she makes.  I’ve designed and printed out small round ‘chits’ with her initials that she can sew into the items .  Check out her stuff over on Etsy.

Printing in process!

Day 10 : Wednesday, Nov 20th, 2013

I modeled my house in Minecraft.  ’nuff said.  (this actually took more than one day, I just finally finished it)

Day 9 : Tuesday, Nov 19th, 2013

3D Printed ShapeShifter Vase

I ran across a site called http://shapeshifter.io that makes it really easy to create 3d printable items like vases, bowls, etc.  10 minutes later and I had the below vase done.  17h and 15 min later the print finished on my  Makerbot Replicator.

Find out more info and download the model over on Thingiverse.

   

Day 8 : Monday, Nov 18th, 2013

Pickled Peppers!

I picked up 20 jalapeños  at the farmer’s market on Sunday.  Didn’t know what I should do with them.  After searching the web for recipes, I found this one:  Easy Homemade Pickled Jalapeños.   I happened to have all the ingredients and hadn’t ever pickled anything before… ever… so why not?  As you can see from the recipe, it’s quite easy, and it worked for me without a hitch.  That being said, they are hot.  The farmer I bought them from had a smirk when he told me “they’re hot”.  Heck, I like hot things, I can chug Tabasco.  But these are step up, for sure.  I can eat one… then drink a lot of water… then try another… maybe.  I put the end result in a old moonshine mason jar, seemed a fitting end for that glass :)  Whole process took only about an hour.

 

In order:  The ingredients, soaking in the brine, and bottling.

 

BAT Hat project: Updated

Taken me a while to get back to this project, my “Blind Assistance Technology” (BAT) hat:  Little over a year ago, I blogged about using some Ping Sonar sensors to drive vibrating motors, to turn distance into haptic feedback.  Doing some “trials” at work, the biggest comment was “I don’t like having my head vibrated”.

I thought I’d try a different technique: audio.  Rather than vibrating one’s head, you could simply listen to what the sonar had to tell you.  In theory it seems like a great idea, but as usual in practice, it’s not quite what I expected.  All files are available for download at the bottom.

The Goal:

  • Have multiple Ping sensors around your head, translating the distances into different sounds, in stereo:  Would give you spacial wareness based on the stereo sound.

The Reality:

  • Based on the hardware I choose, it’s not in stereo, nor does it update fast enough.

My current hardware configuration is a Arduino Uno mated with an Adafruit Wave Shield, being fed data from three Ping))) sensors, mounted to some brackets I designed and 3d printed on my Makerbot Replicator (in nylon), being powered by 6xAA batteries attached to the back of the hat.

I thought the wave shield was in stereo when I bought it:  It is not.  Don’t get me wrong, it was easy to solder together and worked immediately, so I have no complaints about that aspect of the hardware.  I simply should have read up on the specs better before settling on it.  Secondly, and unless I’m just missing something (which is possible), each wav file needs to complete before the next beings.  This really limis the ‘audio refresh rate’:  You can only get audio updates as fast as the wav files play back… so unless you’re walking pretty slowly, it’s not quite fast enough.

All that being said, the hardware does work:  But doning the crazy-mad-scientist hat, you can walk around your environment with your eyes closed, and it will give you audio cues when you are within 100cm of something (about the length of an arm):  Is says the letters “F”, “L”, & “R” based on if you’re in range of something.  And to speed up the audio, I detect for multiple directions at once, and made combo audio file sto play back.  Like “F L R”, “F L”, etc.

I generated all the audio via this AT&T site, that does text to speech:    AT&T Natural Voices Text-to-Speech Demo
It saves out all the audio in the exact format the wave shield wants, making that aspect really easy.

The Future:

I think the next step will be swapping out the Arduino\Wave Shield for a Raspberry Pi:  By using PyGame, I can use stereo audio, and play multiple sounds at once.  My hope is to use actual “pinging” sounds rather than speech.  We’ll see what happens…

Downloads: