Play Pong with ultrasonic sensors and a Raspberry Pi | HackSpace magazine

Day three of our Pong celebration leads us here, to HackSpace magazine’s ultrasonic hack of Eben’s Code the Classics Pong tribute, Boing!

If you haven’t yet bought your copy of Code the Classics, you have until 11:59pm GMT tonight to get £1 off using the discount code PONG. Click here to visit the Raspberry Pi Press online store to secure your copy, and read on to see how you can use ultrasonic sensors to turn this classic game into something a lot more physical.

Over to the HackSpace magazine team…

Code the Classics is an entertaining book for a whole bunch of reasons, but one aspect of it that is particularly exciting to us makers is that it means there are some games out there that are really fun to play, but also written to be easy to understand and have high-quality game art to go along with them. Why does this excite us as makers? Because it makes them ideal candidates for testing out novel DIY games controllers!

Pong

We’re going to start right at the beginning of the book (and also at the beginning of computer game history) with the game Pong. There’s a great chapter on this seminal game in the book, but we’ll dive straight into the source code of our Boing! tribute game. This code should run on any computer with Python 3 (and a few dependencies) installed, but we’ll use a Raspberry Pi, as this has GPIO pins that we can use to add on our extra controller.

Download the code here by clicking the ‘Clone or download’ button, and then ‘Download ZIP’. Unzip the downloaded file, and you should have a directory called Code‑The‑Classics-master, and inside this, a directory called boing-master.

Open a terminal and navigate to this directory, then run:

python3 boing.py

If everything works well, you’ll get a screen asking you to select one or two players – press SPACE to confirm your selection, and have a play.

Hacking Code the Classics

So that’s how Eben Upton designed the game to be played. Let’s put our own spin on it. Games controllers are basically just sensors that take input from the real world in some way and translate that into in-game actions. Most commonly, these sensors are buttons that you press, but there’s no need for that to be the case. You can use almost any sensor you can get input from – it sounds trite, but the main limitation really is your imagination!

We were playing with ultrasonic distance sensors in the last issue of HackSpace magazine, and this sprung to mind a Pong controller. After all, distance sensors measure in one dimension and Pong bats travel in one dimension.

Last issue we learned that the main challenge when using the cheap HC-SR04 sensors with 3.3V devices is that they use 5V, so we need to reduce their output to 3.3V. A simple voltage divider does the trick, and we used three 330Ω resistors to achieve this – see Figure 1 for more details.

There’s support for these sensors in the GPIO Zero Python library. As a simple test, you can obtain the distance with the following Python code:

import gpiozero
import time
sensor = gpiozero.DistanceSensor(echo=15,trigger=14)

while True:
    print(sensor.distance)

time.sleep(0.1)

That will give you a constant read-out of the distance between the ultrasonic sensor and whatever object is in front of it. If you wave your hand around in front of the sensor, you’ll see the numbers changing from 0 to 1, which is the distance in metres.

So far, so straightforward. We only need to add a few bits to the code of our Boing! game to make it interact with the sensor. You can download an updated version of Boing! here, but the changes are as follows.

Add this line to the import statements at the top:

import gpiozero

Add this line to instantiate the distance sensor object at the end of the file (just before pgzrun.go()):

p1_distance = DistanceSensor(echo=15,trigger=14,queue_len=5)

We added the queue_len parameter to get the distances through a little quicker.

Finally, overwrite the p1_controls function with the following:

def p1_controls():
    move = 0
    distance = p1_distance.distance
    print(distance)
    if distance < 0.1:
        move = PLAYER_SPEED
    elif distance > 0.2:
        move = -PLAYER_SPEED
    return move

This uses the rather arbitrary settings of 10 cm and 20 cm to define whether the paddle moves up or down. You can adjust these as required.

That’s all there is to our ultrasonic Pong. It’s great fun to play, but there are, no doubt, loads of other versions of this classic game you can make by adding different sensors. Why not see what you can come up with?

Code the Classics

Today is the last day to get £1 off Code the Classics with the promo code PONG, so visit the Raspberry Pi Press online store to order your discounted copy before 11:59pm GMT tonight.

You can also download Code the Classics as a free PDF here, but the book, oh, the book – it’s a marvellous publication that deserves a physical presence in your home.

The post Play Pong with ultrasonic sensors and a Raspberry Pi | HackSpace magazine appeared first on Raspberry Pi.



Source: Raspberry Pi – Play Pong with ultrasonic sensors and a Raspberry Pi | HackSpace magazine

Phoronix Test Suite 9.4 Released With More Features For Open-Source, Cross-Platform Automated Benchmarking

Phoronix Test Suite 9.4-Vestby is now available as one of our largest updates in recent years for our open-source, cross-platform automated benchmarking framework. Almost wanting to rebrand it as Phoronix Test Suite 10, sticking to conventional versioning the Phoronix Test Suite 9.4 release brings numerous result viewer improvements, a lot of polishing to the PDF result exporting, various Microsoft Windows support improvements, new statistics capabilities, some useful new sub-commands, and much more as the latest quarterly feature release.

Source: Phoronix – Phoronix Test Suite 9.4 Released With More Features For Open-Source, Cross-Platform Automated Benchmarking

[$] A look at "BPF Performance Tools"

BPF has exploded within the Linux world
over the last few years, growing
from its networking roots into the go-to tool for running custom
in-kernel programs. Its role seems to expand with every kernel release
into diverse areas such as security and device control. But none of that
is the focus of a relatively new book from Brendan Gregg, BPF
Performance Tools
; it looks, instead, at how BPF provides visibility into
the guts of the kernel. Finding performance bottlenecks of
various sorts on (generally large) production systems is an area where BPF
and the tool set that has grown up around it can excel; Gregg’s book
describes that landscape in great depth.

Source: LWN.net – [$] A look at “BPF Performance Tools”

Intel Continues Bring-Up Of New Gateway SoC Architecture On Linux, ComboPHY Driver

Besides all the usual hardware enablement activities with the usual names by Intel’s massive open-source team working on the Linux kernel, one of the more peculiar bring-ups recently has been around the “Intel Gateway SoC” with more work abound for Linux 5.7…

Source: Phoronix – Intel Continues Bring-Up Of New Gateway SoC Architecture On Linux, ComboPHY Driver