Better 3D Graphics On The Arduino

There are cheap LCDs available from China, and when plugged into an Arduino, these displays serve as useful interfaces or even shinier baubles for your latest project. [Michael] picked up a few of these displays in the hope of putting a few animated .GIFs on them. This is an impossible task with an ATMega microcontroller – the Arduino does not have the RAM or the processing power to play full-screen animations. It is possible to display 3D vector graphics, with an updated graphics library [Michael] wrote.

The display in question uses the ILI9341 LCD driver, found in the Adafruit library, and an optimized 3D graphics driver. Both of these drivers have noticeable flicker when the animation updates, caused by the delay between erasing a previous frame and when a new frame is drawn.

With 16-bit color and a resolution of 320×240 pixels, there simply isn’t enough memory or the processing power on an ATMega microcontroller to render anything in the time it takes to display a single frame. There isn’t enough memory to render off-screen, either. To solve this problem, [Michael] built his render library to only render pixels that are different from the previous frame.

Rendering in 3D presents its own problems, with convex surfaces that can overlap themselves. To fix this, [Michael]’s library renders objects from front to back – if the pixel doesn’t change, it doesn’t need to be rendered. This automatically handles occlusions.

In a demo application, [Michael]’s LCD and Arduino can display the Stanford bunny, a low-poly 3D face, and geometric object. It’s not a video game yet, but [Michael] thinks he can port the classic game Spectre to this platform and have it run at a decent frame rate.

Video of the demo below.

Continue reading “Better 3D Graphics On The Arduino”

Code Craft-Embedding C++: Hacking the Arduino Software Environment

The Arduino software environment, including the IDE, libraries, and general approach, are geared toward education. It’s meant as a way to introduce embedded development to newbies. This is a great concept but it falls short when more serious development or more advanced education is required. I keep wrestling with how to address this. One way is by using Eclipse with the Arduino Plug-in. That provides a professional development environment, at least.

The code base for the Arduino is another frustration. Bluntly, the use of setup() and loop() with main() being hidden really bugs me. The mixture of C and C++ in libraries and examples is another irritation. There is enough C++ being used that it makes sense it should be the standard. Plus a good portion of the library code could be a lot better. At this point fixing this would be a monumental task requiring many dedicated developers to do the rewrite. But there are a some things that can be done so let’s see a couple possibilities and how they would be used.

Continue reading “Code Craft-Embedding C++: Hacking the Arduino Software Environment”

Hackaday Links: December 20, 2015

If you don’t have a Raspberry Pi Zero right now, you’re not getting one for Christmas. Who would have thought a $5 Linux computer would have been popular, huh? If you’re looking for a new microcontroller platform you can actually buy, the Arduino / Genuino 101 is available in stores. This was released a few months ago, but it still looks pretty cool: DSP, BTLE, and a six-axis sensor.

If you don’t know [David], the Swede, you should. He’s the guy that launched a glider from a high altitude balloon and is one of the biggest advocates of tricopters. Now he bought an airplane wing for his front yard. It was an old Swedish air force transport aircraft being broken up for scrap. Simply awesome.

Chocolate chips. Now that the most obvious pun is out of the way, here’s how you make DIP8 cookie cutters.

[Barb] is over at the Crash Space hackerspace in LA, and she has a YouTube channel that goes over all her creations. This week, it’s a layered wood pendant constructed out of many layers of veneer. Take note of the 3M 77 spray glue used for the lamination and the super glue used as a clear, hard finish.

Star Wars was released and we have a few people digging through the repertoire to see what [John Williams] lifted for the new movie. Here’s musical Tesla coils playing the theme for the Force.

Flickr gives you a full gigabyte of storage, but only if you upload JPEGs, GIFs, and PNGs. That doesn’t prevent you from using Flickr as your own cloud storage.

We know two things about [Hans Fouche]: he lives in South Africa and he has a gigantic 3D printer. His latest creation is an acoustic guitar. It may not sound great, but that’s the quality of the recording. It may not play great, but he can fix that with some acetone vapor. It would be very interesting to see 3D printing used in a more traditional lutherie context; this printer could easily print molds and possibly even something to bend plywood tops.

Starting in 1990, [deater] would make a yearly Christmas-themed demo on his DOS box. You can really see the progression of technology starting with ANSI art trees written in BASIC, to an EGA graphical demo written with QBASIC to the last demo in 96 made with VGA, and SoundBlaster effects written in Turbo Pascal and asm.

Netflix and Chill – and Socks?

Waking up to spoilers in the last episode after falling asleep during the first episode of a Netflix binge-watching session ranks right up there on the list of first-world problems. Luckily there’s a solution in the form of a pair of Netflix enabled socks, which looks like a pretty neat wearable IoT project.

To be sure, calling these socks Netflix enabled is a bit of a stretch. Aside from the sock designs, which are based on popular Netflix original series, there’s nothing about the electronics that’s specific to the popular streaming service. These socks, with their Arduino Pro Trinket and accelerometer, detect when you stop moving and send an IR signal to do your bidding – pause the movie, kill the TV, or whatever. The electronic side of the build is pretty approachable – it’s just a couple of modules soldered together. The fiber arts side of the project might be a little outside the wheelhouse of the typical hardware hacker, but you can either team up with someone who knits – an experienced knitter, as socks are not a beginner’s pattern – or just slip the felt-clad hardware into your favorite comfy socks. We’d be a bit concerned about ESD protection for the hardware in the wooly environment, though.

“Netflix and chill” is the current version of last century’s “Watching the submarine races,” and as such the need for special socks or a custom Netflix switch for the occasion is a bit puzzling. Still, the underlying wearables idea is pretty good, with plenty of possibilities for expansion and repurposing.

Continue reading “Netflix and Chill – and Socks?”

Reading Smart Cards from a PLC (with a Little Arduino Help)

If you’ve spent any time on a factory or plant floor, it is a good bet you’ve run into PLCs (Programmable Logic Controllers). These are rugged computers that do simple control and monitoring functions, usually using ladder logic to set their programs. [plc4u] wanted to connect a smart card reader to an Allen Bradley PLC, so he turned to an Arduino to act as a go-between.

The Arduino talks to a USB card reader using a USB host shield. Then it communicates with the PLC using an RS232 link and the DF1 protocol that most Allen Bradley PLCs understand. You may not need a smart card, but once you know how to communicate between an Arduino and the PLC, you could do many different projects that leverage other I/O devices and code available on the Arduino and connects to existing PLC installations. Just remember that you’ll probably need to ruggedize the Arduino a bit to survive and be safe to the same level as a PLC (which might include a NEMA enclosure or even an explosion-proof box).

Continue reading “Reading Smart Cards from a PLC (with a Little Arduino Help)”

Code Craft – Embedding C++: Templates

The language C++ is big. There is no doubting that. One reason C++ is big is to allow flexibility in the technique used to solve a problem. If you have a really small system you can stick to procedural code encapsulated by classes. A project with a number of similar but slightly different entities might be best addressed through inheritance and polymorphism.

A third technique is using generics, which are implemented in C++ using templates. Templates have some similarities with #define macros but they are a great deal safer. The compiler does not see the code inserted by a macro until after it has been inserted into the source. If the code is bad the error messages can be very confusing since all the developer sees is the macro name. A template is checked for basic syntax errors by the compiler when it is first seen, and again later when the code is instantiated. That first step eliminates a lot of confusion since error messages appear at the location of the problem.

Continue reading “Code Craft – Embedding C++: Templates”

ATtiny Does 170×240 VGA With 8 Colors

The Arduino is a popular microcontroller platform for getting stuff done quickly: it’s widely available, there’s a wealth of online resources, and it’s a ready-to-use prototyping platform. On the opposite end of the spectrum, if you want to enjoy programming every bit of the microcontroller’s flash ROM, you can start with an arbitrarily tight resource constraint and see how far you can push it. [lucas][Radical Brad]’s demo that can output VGA and stereo audio on an eight-pin DIP microcontroller is a little bit more amazing than just blinking an LED.

[lucas][RB] is using an ATtiny85, the larger of the ATtiny series of microcontrollers. After connecting the required clock signal to the microcontroller to get the 25.175 Mhz signal required by VGA, he was left with only four pins to handle the four-colors and stereo audio. This is accomplished essentially by sending audio out at a time when the VGA monitor wouldn’t be expecting a signal (and [lucas][Rad Brad] does a great job explaining this process on his project page). He programmed the video core in assembly which helps to optimize the program, and only used passive components aside from the clock and the microcontroller.

Be sure to check out the video after the break to see how a processor with only 512 bytes of RAM can output an image that would require over 40 KB. It’s a true testament to how far you can push these processors if you’re determined. We’ve also seen these chips do over-the-air NTSC, bluetooth, and even Ethernet.

Continue reading “ATtiny Does 170×240 VGA With 8 Colors”