Rahix' Blog

I want to announce the release of a project that I have been working on in the past months: profirust is a PROFIBUS-DP compatible communication stack written in Rust!

On my quest to dive deeper and deeper into the industrial automation world, it was inevitable for me to explore the various fieldbus protocols at some point. Especially for supporting my increasingly complex machinery, I wanted to look into a robust and scalable fieldbus solution. PROFIBUS uses purple cabling so naturally I felt like this was the option I had to choose.

As there are few to no existing open-source projects implementing a fully capable PROFIBUS communication stack, this looked like a promising niche to fill and an interesting challenge to attempt solving.

GitHub

crates.io

Documentation

Read more...

Accompanying the release of profirust, a PROFIBUS-DP compatible communication stack, I want to provide an introduction to PROFIBUS in general.

While PROFIBUS is quite dated at this point, there are still massive amounts of PROFIBUS installations in service around the world. It's also quite interesting to dig into this bus protocol from a historical perspective — to understand where modern industrial protocols originate from.

Read more...

This is the next article in the series about our "Flower Machine".

For a fully automatic process, the "raw materials" must also be fed into the machine completely automatically. For the Flower Machine, this means feeding small paper squares one at a time. The obvious storage format is a stack of paper - but how do you pick a single piece of paper from a stack?

Feeding paper reliably was probably the hardest challenge in the Flower Machine project. In this post, I will present all the details it took to get the paper-feeding mechanism working.

Image of paper in-feed

Read more...

This is the next article in the series about our "Flower Machine".

Just a quick one: Let's talk about some of the mechanical design elements in the Flower Machine project.

Image of the Flower Machine's pick&place arm

Read more...

This is the next article in the series about our "Flower Machine".

Back in the first post about the flower machine, we talked about what it is doing. It is time to introduce how it actually works. There are already some posts about very specific topics like pneumatics or the logic controller. Before writing more posts like these, I think it is a good idea to look at the bigger picture.

Image of flower machine CAD model

Read more...

Something not (quite) Flower Machine related for once. I got myself a WAGO 750 remote I/O station with a 750-303 PROFIBUS coupler. This post is documentation how I got it working with the open-source PROFIBUS-DP stack pyprofibus.

Image of the WAGO 750 remote I/O station

Read more...

This is the next article in the series about our "Flower Machine".

Of course a machine like this would be useless without any brain to control it. The industrial solution is called a PLC (Programmable Logic Controller). However a real PLC has a number of deal-breakers for us: It is expensive, full of proprietary software, and 99% of the time programming it is windows-only.

Thus I set out to build an alternative: Meet the Poppy Logic Controller - a custom PLC-like device which mimics the real thing, but on a budget.

In this post, I will go over the hardware side. A future post about the software/firmware will follow. You can also find all hardware design files and firmware sources on GitHub: https://github.com/Rahix/Poppy-Logic-Controller

Image of the Poppy Logic Controller

Read more...

This is the next article in the series about our "Flower Machine".

Pneumatics means using compressed air to perform mechanical work. Our Flower Machine actually works using pneumatics only! But why would you choose pneumatics? And what components are needed? In this blog post, we will give an overview of pneumatics and their relationship with automating manufacturing.

Image of some pneumatics

Read more...

Hey, I am back! Well, we are back. That's because this post is written not only by me but also by my lovely girlfriend Lena.

We've been busy with a shared project over the last months. It started back in December when we both really wanted to dive into the topic of pneumatics. We searched for a small project we could build. Well, in the end we didn't manage to keep it small. In this and following blog posts, we will present where this lead us...

Image of flower machine

Read more...

port-expander
2021-12-15 rust embedded 4 min read

I have recently(!) released port-expander, a small crate to make access to I²C port-expanders as easy as possible.

GitHub

crates.io

Read more...

I often open pavucontrol to adjust the volumes of different applications relative to each other. Sometimes music is too loud, sometimes Jitsi sessions are too silent. However, it is annoying to switch context ever so often just to open the mixer, change volume, close again. As I am always looking to challenge myself with some useful projects reaching beyond just writing software, this felt like a great opportunity: I built myself a small mixing desk to control PulseAudio streams with hardware faders.

Pavu Mixer is what this resulted in. The project is fully free and open-source, including the hardware. It can all be found on GitHub: https://github.com/rahix/pavu-mixer

Picture of Pavu Mixer

In this blog entry, I'm going to detail parts of the journey and the architecture of the project.

Read more...

ravedude
2021-03-06 rust embedded avr 4 min read

ravedude is a tool I created to seamlessly run Rust code on AVR microcontrollers with nothing more than the usual cargo run. This is very much inspired by the great cargo-embed tool!

GitHub

crates.io

Read more...

git-tricks(7)
2021-02-28 13 min read

NAME

git-tricks - A collection of tricks/tips for using git efficiently

SYNOPSIS

git push . origin/master:master, git commit --fixup, and many more!

DESCRIPTION

This is a random list of nice git features/tricks that I have found to be very useful but which a lot people don't seem to know about.

Read more...

Many people who have written C code for Arduino have at least heard of the millis() function at some point. It returns the number of milliseconds since the program started running.

In avr-hal (a Rust library for AVR microcontrollers) there currently is no equivalent for it. Instead of waiting on someone to add that, let's see what it takes to build our own!

Read more...

shared-bus
2018-10-10 rust embedded 8 min read

This is a blog post accompanying the release of shared-bus. shared-bus is a small crate to allow sharing a bus between multiple devices. The current implementation is limited to i2c but extension to other bus protocols is easily possible.

GitHub

crates.io

Original Issue

Read more...

First Post
2018-09-03 2 min read

Hello there! This is my blog. This post serves the purpose to demonstrate the markdown/markup abilities:

Markdown

There is support for emph, bold and monospace.

Notes

This is a note.

Read more...

The following post is a short description of an algorithm to generate a semirealistic city road network:

Read more...

SVG Paths
2015-07-16 procedural-generation 4 min read

In modern HTML you can embed SVGs directly into your DOM. This allows for pretty visuals, using the powers of both css and svg. One use that I have had on multiple occasions is path animations.

Read more...

This is an old post of mine about procedurally generating spaceships:

Read more...