DIY • Do it Yourself • Weekend Projects • BIG Projects • LITTLE Projects
How Do I Share My How-To?
It's really pretty easy, pictures and videos of the steps it takes to complete your project are stored on YouTube and picasaWeb. Once your "final" video is stored on YouTube, your project will show in the listings on the site. All this is controlled by our Creator's Tools. Basically, you start a project by writing up the project idea.
Step 1. Sign up for a free Creator's Account to gain access to the Creator's Tools.
Step 2. Login
Step 3. Push the "Create New Project" button on the Creator's Tools. Make a name (you can change it later) for your project. And describe your plans to use as notes to guide the creation of the steps.
Step 4. When you've finished providing all the steps to your project, shooting the videos and saving to google video via the Creator's Tool Panel, you are ready to write the introductory paragraph with an interesting story of how you did it, or how you do it in the case of a professional services presentation.
Step 5. Last but not least create and upload the video (to YouTube) which is the video that will be used to summarize the project. If you were building a robot, this final video would show the robot running around, doing fun things that will inspire others to create their version of your project.
That's it... Watch the views and ratings for your project pile up along with the sales commissions! Or get a customer because you showed how you remodel a house.
FAQ About Becoming A Creator
Q. Why would I go to all that work, building something, then put it on a website like C What I Can Do? What's the point?
A. Actually, there are a couple of forms for a reward:
You get rated as an author. Lots of good ratings looks good on your resume.
You Make Money!
YOU Make Money when someone buys a part from You, and builds it into Their Version of your project. And, if YOU have a basement full of red leds and build a red led project - we'll send you customers who are inspired to build your blinking light device. If you sell PC boards, you may link to your own sales. Or sell your own kit online through your e-Bay store.
The same with books! We encourage project builders to make books. In fact, CwhatIcanDo is a great place to get rated as an author. 'Betcha get a better deal from your publisher...
Of course, it is possible that your project won't make you any money, because someone built something even cooler than yours (maybe even inspired by your project.) Maybe you just want to show your version of another project... It's done in the spirit of the web: Sharing ideas. And it's fun building a project on your own.
Roboteer`s Guide to BeagleBone Black ... 32293 Views
Author's name: weRbots
I feel like I`ve combed the earth for the "just right" combinations of features, ease of use, intrinsic power to do exciting things.
It felt like the world was stuck with Arduinos and PICs, slowly crawling along the speed and power lines of typical controllers. An 80mHz chip is Awesome in it`s power and capabilities for robot control, but always coming up short when I want to build "My Ultimate Robot." (For home use, of course.)
So the Beagle Bone, specifically the Black, or BBB as them that use it tend to call it is priced just a smidgen higher than an Arduino Uno, but holy smokes, I think I`m glad I waited a while.
Arguably, not long enough though, dealing with one of these things is no walk in the park. Either things will go smooth as butter on bread, or, you have my experience!
In other words, I`m saying BBB is not for everyone, certainly not for the faint of heart, that`s for sure.
So I figured I`d chronicle my dealing with the BBB, from fumbling not to touch anything metal when you remove it from the anti-static bag, to actually making some things that we, as robo-hackers and modders can "graduate" to.
Basic Hookup
You can only "hookup" one more thing, a serial port to what is called a debugging port. That`s the only thing missing here.
This BBB is hooked up to an HDMI monitor and old 720p TV set. It works just fine.
But, not just "out of the box." In fact, some things worked out of the box, then stopped abruptly.
I hooked mine up first through a connection to a PC which allowed me to hook it up to Ethernet and ping websites and all that sort.
Then I hooked it up to HDMI with no Ethernet and it tended to work.
What did work first was cloud9... That was very nice, I could play around right on my own webserver page (even only command line processing on the BBB).
After I moved it again to run from a PC, everything that had originally run "out of the box", was finished. Kaput!
I couldn`t even connect. I was only a little discouraged, because via the command line and through a browser connected to the URL, I could bang around with the BBB like a champ.
Oh, and the SSH didn`t work at all, although I did get an enticing login when I ran Gate One SSH client, again right from the browser... Pretty cool.
But what kept me searching the internet and moving forward. I`m not a total noob to linux, but I`ve never been great at it. I mostly rely on others to keep the packages organized, I`m gonna run someone`s linux who`s done all the work. I install as workstation or server.
Well, now I`m starting to like this little black $45 Linux device. I`m digging in the documentation and reading the forums, so I`m beginning to like what I see. This might just be what I`m looking for, the ultimate robot controller seemingly endless in it`s robotic potential.
How I got Help to Get Going
I don`t know who was the biggest help, but they helped me, in the following order:
After digging around, finding this out piece-by-piece, I stumbled on this jewel, and I treasure it...
Some quick-start things to do for developing on the BBB Posted by shabaz on May 22, 2013 6:18:58 AM
While I was prepared to work out a complex map of functions, pins, etc. I discovered this: Autonomous Rugged Maze Navigating Robot by Andy Darter and Luke Kaufman, final project for a Senior Design Course at Wyoming, Electrical and Computer Engineering Department.
That should do it. Should you run into issues on your unit:
Skip down to (5) to see the solution to ssh_exchange_identification: Connection closed by remote host. http://osdir.com/ml/beagleboard/2013-05/msg00350.html
First of all I needed to decide what I wanted in my "total robot."
Here is where some research on i-Robot robotic sweeper has many things I want/need.
I test my bots on a deck. So here is Minimum:
Must Have edge detection exotic is better. Sonar Detectors so SPI bus, Definitely I2C, I want ADCs checking battery power, I want a tricolor LED to reflect system condition from a distance.
I want to PWM at least two drive motors. I want to be able to drive minimum two, perhaps four servos and maybe more for arms/legs/etc...
I want LEDs for running lights...
I want outdoor level Pong((( ultrasounds. I want to be able to accommodate four different IR sensors for close-up recognition.
I want an electromagnetic pickup to guide the robot along a wire loop exciting the loop with HF or LF detecting it by riding along with the most sensor strength, while still avoiding obstacles.
I want RF remote control for "calling" the robot to "find" me.
Voila! Our Roboteer`s Guide to BeagleBone Black P8
I churned through the drawings on the beaglebone`s own website to put together a proposed "Robot Builder`s Pin Guide to Beagle Bone Black (Cape compatible pin guide.)
How could we expect anyone to understand the situation of the poor lonely robot builder with a mostly improvised R&D budget?
We couldn`t, so here`s our First Pass...
Regarding every output a robot-builder would/could want. Yes, someday we`ll just buy a robot "chip" but for now, we can probably buy a robot like beagle-bone with a standardized Cape Layout.
The FINAL place I arrived, showed how to use bonescript to do analog stuff (input and output) and other things. https://github.com/jadonk/bonescript is the place to get yourself "crackin."
One more note on this proposed P8 and P9, when you start experimenting ie: blinky lights, you won`t have built a thing to change the mode for most pins, so Use the FIRST listing as a guideline, the first listing is what we are going to get when we initialize, since your first project will be simple like blinkies, and you will use the standard boot up. That means the P8 and P9 pins are marked fairly clearly, you have to pay attention, or the editor, I used Cloud9.
Roboteer`s Guide to BeagleBone Black P9
I don`t yet know how to put the pins in the various modes that produce such a map, but that will come soon as this project moves on from here.
From the users manual from beagle bone (black) I found several tables as I`ve shown here. I am a bit jarred to not have the SPI bus.
I struggled for a moment, till I finally had to actually read all the words. I find the following:
"There are some signals that have not been listed here. Refer to the processor documentation for more information on these pins and detailed descriptions of all of the pins listed. In some cases there may not be enough signals to complete a group of signals that may be required to implement a total interface."
OK, then... The layout as shown here is the One we are going with. BTW: I`ve never used the SPI. I just want it to be available.
Summary of potential for Robotic Applications
As-Is Out of the box, here`s what a robot guy gets. No software has run as yet:
P9 Connections Default Analog In: 6 Digital In Out: 18 i2c: 1 SPI: 1-
P8 Connections Default Digital In Out: 14
I`ve not used the SPI in a robot, so I can live without it. But right now, out of the box, you can drive a lot of blinky lights with a total of 32 gpio`s at your service, I am sure we`ll start finding these things running LED arrays as displays.
There is, out of the box, a single i2c bus, and that will be fine. I love using i2c with microprocessors ever since using a fancy schmancy Ultrasound setup. Boy did that work well...
More analog in`s than you can shake a stick at, that`s very cool.
Note what is missing relative to the infamous Arduino, and even the little picAxe? PWMout or Analog Out on the Arduino. Missing!
Software Makes it Go
I used cloud9, but you can also write code using telnet on another machine.
The code is very simple, but it`s a beginning!!!
////////////////////////////////////////////////// // fire up bonescript var b = require(`bonescript`);
// I started with best intentions from fade.js from BBB docus // Then I added pins var awPin = "P8_13"; // original pin var bwPin = "P8_19"; // original pin var led1 = "P9_14"; // added all these LEDs jumping around a bit var led2 = "P9_16"; var led3 = "P9_23"; var led4 = "P9_24"; var led5 = "P9_26"; var led6 = "P9_30"; var ledL = "P9_11"; var ledR = "P8_26";
// this function sets the pins high and turns them off function unblink(){ b.digitalWrite(ledL, b.HIGH); b.digitalWrite(ledR, b.HIGH); b.digitalWrite(led3, b.HIGH); b.digitalWrite(led4, b.HIGH); b.digitalWrite(led5, b.HIGH); b.digitalWrite(led6, b.HIGH); }
// when the pin goes low, the LED lights up function blink(){ b.digitalWrite(ledL, b.LOW); b.digitalWrite(ledR, b.LOW); b.digitalWrite(led3, b.LOW); b.digitalWrite(led4, b.LOW); b.digitalWrite(led5, b.LOW); b.digitalWrite(led6, b.LOW); }
What`s Next
Now I have to develop, mostly find other`s work and put it together into a simple "plug in" piece of software (I think, in Bone javascript.) But, I may have to write some C++ (scary, but I can hack my way through someone`s code - assuming I am able to find supporting code.
Now that I`m digging around, I`m finding C libraries for the beaglebone.
Oh yes, here`s a tip you`ll likely need or at least want. How to find out the IP number of your BBB. Open a terminal window. At the prompt enter lsconfig, if you remembered to plug into a network, you will be assigned an IP number. Write it down, cuz when you hookup to your beagleboard from your own network, you`ll need the IP number.
So this first brush with the BBB has been kinda fun. I`ve learned a bit more about linux. I think I`m going to like applying this thing to robots I builld, for the extra expense, the features sure seem worth it.
Software development is easy, but I fear in the end I`ll be using other devices for things that have to run smoothly. But. I can also add cameras and software for image recognition. I just can`t wait to get going with the next project using beagle bone black, I may even get another one...
Yes, I will keep you posted...
Pinouts From Power Up
Here`s a list manufactured by my own little javascript routine, allowing the BBB to create a list of Pinouts with the details of how they are setup.
pin = P8_3, name = GPIO1_6 mux = 1, pullup = pullup, slew = fast options = gpmc_ad6,mmc1_dat6,NA,NA,NA,NA,NA,gpio1_6
pin = P8_4, name = GPIO1_7 mux = 1, pullup = pullup, slew = fast options = gpmc_ad7,mmc1_dat7,NA,NA,NA,NA,NA,gpio1_7
pin = P8_5, name = GPIO1_2 mux = 1, pullup = pullup, slew = fast options = gpmc_ad2,mmc1_dat2,NA,NA,NA,NA,NA,gpio1_2
pin = P8_6, name = GPIO1_3 mux = 1, pullup = pullup, slew = fast options = gpmc_ad3,mmc1_dat3,NA,NA,NA,NA,NA,gpio1_3
pin = P8_7, name = TIMER4 mux = 7, pullup = pullup, slew = fast options = gpmc_advn_ale,NA,NA,NA,NA,NA,NA,mmc1_sdcd
pin = P8_8, name = TIMER7 mux = 7, pullup = pullup, slew = fast options = gpmc_oen_ren,NA,NA,NA,NA,NA,NA,gpio2_3
pin = P8_9, name = TIMER5 mux = 7, pullup = pullup, slew = fast options = gpmc_ben0_cle,NA,NA,NA,NA,NA,NA,gpio2_5
pin = P8_10, name = TIMER6 mux = 7, pullup = pullup, slew = fast options = gpmc_wen,NA,NA,NA,NA,NA,NA,gpio2_4
pin = P8_11, name = GPIO1_13 mux = 7, pullup = pulldown, slew = fast options = gpmc_ad13,lcd_data18,mmc1_dat5,mmc2_dat1,eqep2B_in,pr1_mii0_txd,pr1_pru0_pru_r30_15,gpio1_13
pin = P8_12, name = GPIO1_12 mux = 7, pullup = pulldown, slew = fast options = gpmc_ad12,lcd_data19,mmc1_dat4,mmc2_dat0,eqep2a_in,pr1_mii0_txd2,pr1_pru0_pru_r30_14,gpio1_12
pin = P8_13, name = EHRPWM2B mux = 7, pullup = pulldown, slew = fast options = gpmc_ad9,lcd_data22,mmc1_dat1,mmc2_dat5,ehrpwm2B,pr1_mii0_col,NA,gpio0_23
pin = P8_14, name = GPIO0_26 mux = 7, pullup = pulldown, slew = fast options = gpmc_ad10,lcd_data21,mmc1_dat2,mmc2_dat6,ehrpwm2_tripzone_input,pr1_mii0_txen,NA,gpio0_26
pin = P8_15, name = GPIO1_15 mux = 7, pullup = pulldown, slew = fast options = gpmc_ad15,lcd_data16,mmc1_dat7,mmc2_dat3,eqep2_strobe,pr1_ecap0_ecap_capin_apwm_o,pr1_pru0_pru_r31_15,gpio1_15
pin = P8_16, name = GPIO1_14 mux = 7, pullup = pulldown, slew = fast options = gpmc_ad14,lcd_data17,mmc1_dat6,mmc2_dat2,eqep2_index,pr1_mii0_txd0,pr1_pru0_pru_r31_14,gpio1_14
pin = P8_17, name = GPIO0_27 mux = 7, pullup = pulldown, slew = fast options = gpmc_ad11,lcd_data20,mmc1_dat3,mmc2_dat7,ehrpwm0_synco,pr1_mii0_txd3,NA,gpio0_27
pin = P8_18, name = GPIO2_1 mux = 7, pullup = pulldown, slew = fast options = gpmc_clk,lcd_memory_clk_mux,NA,mmc2_clk,NA,NA,mcasp0_fsr,gpio2_1
pin = P8_19, name = EHRPWM2A mux = 7, pullup = pulldown, slew = fast options = gpmc_ad8,lcd_data23,mmc1_dat0,mmc2_dat4,ehrpwm2A,pr1_mii_mt0_clk,NA,gpio0_22
pin = P8_20, name = GPIO1_31 mux = 2, pullup = pullup, slew = fast options = gpmc_csn2,gpmc_be1n,mmc1_cmd,pr1_edio_data_in7,pr1_edio_data_out7,pr1_pru1_pru_r30_13,pr1_pru1_pru_r31_13,gpio1_31
pin = P8_21, name = GPIO1_30 mux = 2, pullup = pullup, slew = fast options = gpmc_csn1,gpmc_clk,mmc1_clk,pr1_edio_data_in6,pr1_edio_data_out6,pr1_pru1_pru_r30_12,pr1_pru1_pru_r31_12,gpio1_30
pin = P8_22, name = GPIO1_5 mux = 1, pullup = pullup, slew = fast options = gpmc_ad5,mmc1_dat5,NA,NA,NA,NA,NA,gpio1_5
pin = P8_23, name = GPIO1_4 mux = 1, pullup = pullup, slew = fast options = gpmc_ad4,mmc1_dat4,NA,NA,NA,NA,NA,gpio1_4
pin = P8_24, name = GPIO1_1 mux = 1, pullup = pullup, slew = fast options = gpmc_ad1,mmc1_dat1,NA,NA,NA,NA,NA,gpio1_1
pin = P8_25, name = GPIO1_0 mux = 1, pullup = pullup, slew = fast options = gpmc_ad0,mmc1_dat0,NA,NA,NA,NA,NA,gpio1_0
pin = P8_26, name = GPIO1_29 mux = 7, pullup = pullup, slew = fast options = gpmc_csn0,NA,NA,NA,NA,NA,NA,gpio1_29
pin = P8_27, name = GPIO2_22 mux = 0, pullup = pulldown, slew = fast options = lcd_vsync,gpmc_a8,NA,pr1_edio_data_in2,pr1_edio_data_out2,pr1_pru1_pru_r30_8,pr1_pru1_pru_r31_8,gpio2_22
pin = P8_28, name = GPIO2_24 mux = 0, pullup = pulldown, slew = fast options = lcd_pclk,gpmc_a10,pr1_mii0_crs,pr1_edio_data_in4,pr1_edio_data_out4,pr1_pru1_pru_r30_10,pr1_pru1_pru_r31_10,gpio2_24
pin = P8_29, name = GPIO2_23 mux = 0, pullup = pulldown, slew = fast options = lcd_hsync,gpmc_a9,NA,pr1_edio_data_in3,pr1_edio_data_out3,pr1_pru1_pru_r30_9,pr1_pru1_pru_r31_9,gpio2_23
pin = P8_30, name = GPIO2_25 mux = 0, pullup = pulldown, slew = fast options = lcd_ac_bias_en,gpmc_a11,pr1_mii1_crs,pr1_edio_data_in5,pr1_edio_data_out5,pr1_pru1_pru_r30_11,pr1_pru1_pru_r31_11,gpio2_25
pin = P8_31, name = UART5_CTSN mux = 0, pullup = disabled, slew = fast options = lcd_data14,gpmc_a18,NA,mcasp0_axr1,NA,NA,NA,gpio0_10
pin = P8_32, name = UART5_RTSN mux = 0, pullup = disabled, slew = fast options = lcd_data15,gpmc_a19,NA,mcasp0_ahclkx,mcasp0_axr3,NA,NA,gpio0_11
pin = P8_33, name = UART4_RTSN mux = 0, pullup = disabled, slew = fast options = lcd_data13,gpmc_a17,NA,mcasp0_fsr,mcasp0_axr3,NA,NA,gpio0_9
pin = P8_34, name = UART3_RTSN mux = 0, pullup = disabled, slew = fast options = lcd_data11,gpmc_a15,NA,mcasp0_ahclkr,mcasp0_axr2,NA,NA,gpio2_17
pin = P8_35, name = UART4_CTSN mux = 0, pullup = disabled, slew = fast options = lcd_data12,gpmc_a16,NA,mcasp0_aclkr,mcasp0_axr2,NA,NA,gpio0_8
pin = P8_36, name = UART3_CTSN mux = 0, pullup = disabled, slew = fast options = lcd_data10,gpmc_a14,ehrpwm1A,mcasp0_axr0,mcasp0_axr0,pr1_mii0_rxd1,uart3_ctsn,gpio2_16
pin = P8_37, name = UART5_TXD mux = 0, pullup = disabled, slew = fast options = lcd_data8,gpmc_a12,NA,mcasp0_aclkx,NA,NA,uart2_ctsn,gpio2_14
pin = P8_38, name = UART5_RXD mux = 0, pullup = disabled, slew = fast options = lcd_data9,gpmc_a13,NA,mcasp0_fsx,NA,NA,uart2_rtsn,gpio2_15
pin = P8_39, name = GPIO2_12 mux = 0, pullup = disabled, slew = fast options = lcd_data6,gpmc_a6,pr1_edio_data_in6,eqep2_index,pr1_edio_data_out6,pr1_pru1_pru_r30_6,pr1_pru1_pru_r31_6,gpio2_12
pin = P8_40, name = GPIO2_13 mux = 0, pullup = disabled, slew = fast options = lcd_data7,gpmc_a7,pr1_edio_data_in7,eqep2_strobe,pr1_pru1_pru_r30_7,pr1_pru_pru1_r30_7,pr1_pru1_pru_r31_7,gpio2_13
pin = P8_41, name = GPIO2_10 mux = 0, pullup = disabled, slew = fast options = lcd_data4,gpmc_a4,pr1_mii0_txd1,eQEP2A_in,NA,pr1_pru1_pru_r30_4,pr1_pru1_pru_r31_4,gpio2_10
pin = P8_42, name = GPIO2_11 mux = 0, pullup = disabled, slew = fast options = lcd_data5,gpmc_a5,pr1_mii0_txd0,eqep2b_in,NA,pr1_pru1_pru_r30_5,pr1_pru1_pru_r31_5,gpio2_11
pin = P8_43, name = GPIO2_8 mux = 0, pullup = disabled, slew = fast options = lcd_data2,gpmc_a2,pr1_mii0_txd3,ehrpwm2_tripzone_input,NA,pr1_pru1_pru_r30_2,pr1_pru1_pru_r31_2,gpio2_8
pin = P8_44, name = GPIO2_9 mux = 0, pullup = disabled, slew = fast options = lcd_data3,gpmc_a3,pr1_mii0_txd2,ehrpwm0_synco,NA,pr1_pru1_pru_r30_3,pr1_pru1_pru_r31_3,gpio2_9
pin = P8_45, name = GPIO2_6 mux = 0, pullup = disabled, slew = fast options = lcd_data0,gpmc_a0,pr1_mii_mt0_clk,ehrpwm2A,NA,pr1_pru1_pru_r30_0,pr1_pru1_pru_r31_0,gpio2_6
pin = P8_46, name = GPIO2_7 mux = 0, pullup = disabled, slew = fast options = lcd_data1,gpmc_a1,pr1_mii0_txen,ehrpwm2B,NA,pr1_pru1_pru_r30_1,pr1_pru1_pru_r31_1,gpio2_7
pin = P9_21, name = UART2_TXD mux = 7, pullup = pullup, slew = fast options = spi0_d0,uart2_txd,i2c2_scl,NA,NA,NA,NA,gpio0_3
pin = P9_22, name = UART2_RXD mux = 7, pullup = pullup, slew = fast options = spi0_sclk,uart2_rxd,i2c2_sda,NA,NA,NA,NA,gpio0_2
pin = P9_23, name = GPIO1_17 mux = 7, pullup = pulldown, slew = fast options = gpmc_a1,gmii2_rxdv,rgmii2_rctl,mmc2_dat0,gpmc_a17,pr1_mii1_txd3,ehrpwm0_synco,gpio1_17
pin = P9_24, name = UART1_TXD mux = 7, pullup = pullup, slew = fast options = uart1_txd,mmc2_sdwp,d_can1_rx,i2c1_scl,NA,pr1_uart0_txd_mux1,NA,gpio0_15
pin = P9_26, name = UART1_RXD mux = 7, pullup = pullup, slew = fast options = uart1_rxd,mmc1_sdwp,d_can1_tx,i2c1_sda,NA,pr1_uart0_rxd_mux1,NA,gpio0_14
pin = P9_27, name = GPIO3_19 mux = 7, pullup = pulldown, slew = fast options = mcasp0_fsr,NA,mcasp0_axr3,mcasp1_fsx,NA,pr1_pru0_pru_r30_5,NA,gpio3_19
pin = P9_28, name = SPI1_CS0 mux = 2, pullup = pulldown, slew = fast options = mcasp0_ahclkr,NA,mcasp0_axr2,spi1_cs0,NA,NA,NA,gpio3_17
pin = P9_29, name = SPI1_D0 mux = 0, pullup = pullup, slew = fast options = mcasp0_fsx,NA,NA,spi1_d0,mmc1_sdcd,NA,NA,gpio3_15
pin = P9_30, name = SPI1_D1 mux = 7, pullup = pulldown, slew = fast options = mcasp0_axr0,NA,NA,spi1_d1,mmc2_sdcd,NA,NA,gpio3_16
pin = P9_31, name = SPI1_SCLK mux = 0, pullup = pulldown, slew = fast options = mcasp0_aclkx,NA,NA,spi1_sclk,mmc0_sdcd,NA,NA,gpio3_14
If the P9 list seems short, it`s only because of all the reserved pins for HDMI framing. I wanted to keep HDMI and see what pins that would leave for robot making.
It's Easy To:
C - What - I - Can - Do
• Sign up - Get ID and Password
• Plan and Create a Project That Someone Might Enjoy and May Even Want to Build
• Link to your creation on your favorite social networking site or blog.
• Become famous! Because your projects get a lot of Hits!
No parts list with this project. Scan the 'Junkbox Reviewer' below! Find projects by clicking on their parts. Got something in your junkbox? Here's your spot to find something fun to make or build!
Junk Box Reviewer
Itching To Start Building A DIY Do It Yourself Project? Got Some Parts of Your Own in your JunkBox? Find projects by Surfing' the Parts List!