62 comments

[ 2.8 ms ] story [ 35.0 ms ] thread
When I was young I always enjoyed playing with Mindstorms. It was my first experience programming. For me it was amusing that I could build some robot with Lego and make it retrieve a ball from our living room.

Sadly jumping from the block oriented programming to "real" programming of the Hitachi H8 microcontroller was not very straight forward, so I kind of hit a wall in that regard. Maybe this collaboration will act as a better gateway to "real" programming.

I have somewhat mixed feelings about this. On the one hand, block-based "programming" does allow children/newbies to construct something that works. On the other hand, almost nothing usable is being programmed this way. So I'd say it's more or less fine as a kind of introduction to general rules of programming, but the sooner you get to the actual code, the better.

That said, microcontroller programming is something very specific in the sense that the same thing might (and often is) programmed in a completely different way on another device, so basically a large part is just getting to know your hardware. Fortunately, these days several abstraction layers are available for people who need them, from MicroPython to FreeRTOS.

I think it's more about teaching kids/newbies to think in a programming way. That can be language agnostic. You're essentially trying to achieve something "complex" using simple instructions. At a basic level that's a great way to learn programming. As the problems get more complex it becomes obvious why paradigms & architectures exist, and your programming skills can improve.
I think that's the thing? Block programming languages come from folks who write "CS education" literature as opposed to the "new programming languages" literature. They're turing complete, because curriculums require teaching the use of if statements and for loops, but that's about it.

If I actually wanted to use a block language at my day job I'd want affordances for larger, more complex programs. Compiler or JIT, copy/paste, zooming in and out of parts of programs (ala Prezi or something), integration with source control diff tools, C extensions / integration with existing code, console output, file I/O, etc.

Whilst it was never completed, as funding for the program was diverted elsewhere, I worked on a team at a university using Blockly [0] compiling it to Lua, and parsing from Lua back into our specific runtime set of Blockly functions.

It could do absolutely everything that Lua could do. We also added a kind of multifile support, using tabbed views to reimplement libraries on the browser side of things (compiling into separate Lua files).

The idea was that educators at both ends of the spectrum could convert to and from the same visual representations. The primary school classes the uni were running could use blocks, and slowly move to normal Lua, one feature at a time, all the way up to the first and second year ICT programs for higher ed.

Because it could compile to Lua, we could use git and a whole bunch of other tools that already exist. There was an experimental C/asm.js branch to add in FFI support, but that was deemed too time-costly whilst the rest still had a bunch of edge-cases.

And then, unfortunately, the whole program got yanked. But about that time it was close approaching what I would consider "useable" for actual real work.

[0] https://github.com/google/blockly

Sounds like a wonderful tool for fundamental CS courses and projects. I remember assignments like creating a Cesar Cipher using Java, being distracted by tangential stuff like what the static keyword means and importing libraries. That language was a lot to take in, just tuning-out the noise from what I needed to learn. Something like half the class did not take the second course. Most of the thrash had little to do with the assignments themselves. Being able to toggle between a visual representation of the program and the code helps students' comprehension of the core concepts immensely. That much is obvious when you work with kids on Lego robotics projects. I could imagine a tool set like that, with the flexibility to build something like a console blackjack game. It would quickly become a standard for teaching secondary school programming courses. Hopefully someone else will take up that torch before my own kids are looking at learning how to program.
I think you should have a look at the projects we have written that support this launch.

https://projects.raspberrypi.org/en/pathways/lego-intro

They're exclusively written in Python, some of them using Bluetooth for remote control, some using pollution APIs to display data and also TensorFlow for image recognition.

Depends what you mean by “usable.” Are you going to ship it in military hardware? No. But I built a block based program connected to a motor that gave kids a candy if they guessed the number that the computer was thinking of in less than 6 guesses. A 4 year old invented binary search within 10 minutes.
If memory serves, a decade ago LabView was fairly involved in the robotics-education space, as a "real" block-based language that industry actually used and that kids could theoretically graduate from teaching languages into. Only kids I saw using it were those whose parents used LabView at the day job from an industrial background though.
Block based programming allows people to make working applications these days. See: Mendix, Labview, Betty Blocks and many many others besides.

PLCs have historically used ladder diagrams, which are also not 'code'. I've seen Excel spreadsheets that you would have been hard pressed to replicate using code.

Programming in its very essence is telling a machine what to do, what form that comes in isn't all that relevant, and code is just one of those forms.

'actual code' is not a requirement for programming.

This is true to a certain extent. Certainly, large problems get awkward pretty quickly using the Scratch model. However, I found this Code.org version of Minecraft[0] interesting. You primarily use the Scratch like interface, but then you can click a button, and see how your legos translated into Javascript.

[0] https://studio.code.org/s/aquatic/lessons/1/levels/1

Luckily now we have Arduino that hides all the nasty stuff from users. There are 2 basic blocks: unit and loop. Adding repeating code blocks into loop block isn’t that hard. Jumping from Mindstorms to Arduino shouldn’t be a big difference.
My 9 year old son gets this so for any adult it shouldn't be a huge hurdle. Arduino is a very nice little platform.
IMO: It's slightly easier for small children to learn to program than adults. I'd imagine anyone here shouldn't have an issue but saying a kid gets it isn't quite right.
> Sadly jumping from the block oriented programming

Jesus, that is what I call a trip down memory lane! I wonder what happened to my RCX.

I started programming in normal languages before I did a mindstorms based project for a robotics lab at university. Going in the other direction is just as jarring because of how limited the block based system felt. It's also just a clunky IDE compared to a text editor...
The leJOS alternate firmware for the RCX was my first introduction to Java. It was amazing how complete the support was given the small footprint. It even implemented Java's threads system.
Wow. This is a pretty big deal.

There have been third party hubs to pilot Lego Technic motors for a while now, but this HAT is a lot cheaper than any of them (TBF it doesn't work the same either, with no battery, button or physical casing etc.), works with the latest batch of motors, has official blessing, and the RPi is also a lot more extensible and flexible on every aspect.

This is a no brainer purchase for anyone trying to do more things with Lego Technic in my opinion.

The Build HAT is not compatible with LEGO Mindstorms (EV3) because the plug system is different. The Build HAT/SPIKE™ Prime system uses LPF2 plugs whereas the Mindstorms system uses RJ12 plugs.
It can't be long, until Lego start to change the brick size.
That's already happened, twice even.

There is 'duplo' and there is 'Modulex':

https://www.newelementary.com/2017/11/old-bricks-what-are-mo...

Duplo is Lego-compatible. A 2x4 Lego brick fits exactly onto 1x2 Duplo studs. A Duplo brick is 2x the height of a Lego brick, and a Duplo plate is 1x the height of a Lego brick.

It's fun to build large structures quickly with Duplo then detail them with Lego!

There are even ways to connect Modulex bricks to regular Lego, some people have figured out some interesting tricks.

Which allows you to take that strategy to the next level.

There was also Lego "Quatro", double the size of Duplo, for very young toddlers.

Only sold from 2004–2006, but still in high demand on the used market. Interlocks with Duplo and regular Lego.

Oh cool, never knew about that one. I do have one more to add but it's mostly technics warmed over, which is 'Znap', clearly aimed at the same market as 'Knex', which Lego at some point saw as a competitor. Since then they've come their senses, the Znap line was ugly and highly impopular, leading to being discontinued after only a year.
What if I told you there is another plug type, that might still be sold with some old sets somewhere, and is still supported by a bunch of third party hubs (that for a long time were more advanced in many ways than Lego's own system ...)

Lego's stewardship of all this was a mess, and I'm super glad they open the system to officially blessed third parties.

There's also all the various rail/train systems, some of which are compatible with some variants ...
I would have loved this as a kid... And when my son grows up I think we will have a lot of fun building things with this.
I've been playing around with the Lego and Raspberry pi combination on and off through the years [1], with the goal of building a standalone tracked vehicle (pi on board) that can move around my apartment. There were various ways to do this already, mainly by using off the shelf motor controller boards and later the third party Bluetooth motor bricks. This was all for the old "power functions" system though, Lego has since revamped their lineup with a lot of new parts that all use a different connector. I'm really looking forward to getting one of these.

[1] https://www.colorfulwolf.com/blog/tag/raspberry-pi/

Lego has the bad habit of not extending their 'systems' thinking to their electrical and electronic components. New connectors are introduced rather willy-nilly and supply voltages and communications protocols change with potentially every model year.

This allows them to quickly follow trends but it is totally contrary to the mechanical interface which is backwards compatible for over 60 years.

The same goes for the train sets, the track width is more or less the same for ever but the track interconnects and the way the trains are powered have changed often.

Fortunately for the trains there is a solution (subset of track, only use the old 12V system for the track it will also support battery powered trains giving a reasonably broad coverage), but for the electronics and the various motors the situation is quite a bit more complex. Note how the article essentially limits compatibility to a single one of the 10 or so systems that Lego has over the years used to connect electrical components.

Anybody remember the very old style electrical interconnect plates?

Someone ought to cook up a compatibility kit that allows you to connect older and newer stuff at will.

Here are the projects we have launched to support the release of the new hardware.

https://projects.raspberrypi.org/en/pathways/lego-intro

Feedback would be very gratefully received.

Does it work with PoweredUp hubs and motors ? (https://www.lego.com/en-fr/product/technic-hub-88012)
You should already be able to drive poweredup hubs from the r.pi via bluetooth. There's a few libraries out there and incomplete but official documentation on the protocol[1]

I assume this will work with the poweredup motors. The poweredup motors and sensors all use the same pinout, cable and serial protocol.

[1] https://lego.github.io/lego-ble-wireless-protocol-docs/index...

First time I've seen the STEAM acronym (Science, Technology, Engineering, Arts and Math). Described as:

"While these initiatives are a wonderful start into the exploration of these four areas of study, the critical process of creativity and innovation is missing. Students in STEM programs may have more experiential learning opportunities, but they are limited to only science, technology, engineering and math. Our economy requires so much more than an understanding of these areas – it requires application, creation and ingenuity. STEM alone does not foster these essential nutrients."[1]

It reads weirdly for me, because the people I know in STEM are some of the most creative people I know. Very much my own biased opinion, but adding Arts into STEM seems to ironically exclude art from the other subjects, and gives a space for all those art-focused people (I sometimes avoid at hack-a-thons because they don't like coding things) to feel included rather than encouraging them to learn STEM?

1. https://artsintegration.com/what-is-steam-education-in-k-12-...

I agree that adding arts in there is kind of assuming that otherwise all these boring STEM people wouldn't have any way to create things. Which seems backwards. There's a huge creation component in STEM, especially in engineering, as if you aren't creating something, you aren't doing engineering.

I don't know if I agree with the second point about excluding arts people, it sounds like you want them to be forced to learn STEM, which I don't agree with. Let people let what they want to learn, but STEM by definition could not exist without creativity.

I don't mind STEAM, but I am biased as a designer who knows how to code and I think it leans into things a lot of kids are interested in making like videogames that have an art element to them.

There is also "STEAMS" STEAM + Sport, which makes no sense to me.

IMO, it's an attempt for people to not feel like they're being left out. It happens any time a group of people self-select and self-promote. Other people who aren't in that group change the group and claim they were ostracized and they're essential.

Eventually, it includes literally everyone and means nothing at all.

The first I recall seeing the STEAM acronym was John Maeda's efforts to popularize it in the early 2010s e.g. https://scholarship.claremont.edu/steam/vol1/iss1/34/

His focus at the MIT Media Lab was teaching artists and designers to program, and my understanding is that he continued that as the president of RISD, so it definitely was not intended as an acronym to convince art/design folks they didn't need to learn STEM.

I also never personally interpreted the attempted inclusion of Art as implying a lack of creativity in the other domains any more than the inclusion of Math implied a lack of mathematical aptitude in the other domains.

Does it provide PID speed control for the motors? Or any other form of closed loop speed control.
Can you attach move than one of these? It only has 4 ports.
Cute, but the Legos are crazy expensive. What you save by using a Pi, you lose by buying Legos.
The "Prime" set they reference in the article looks awesome but it's over £300! A motor alone seems to be about £50.For schools maybe this is reasonable, not so much for individuals.
Yes, the quality is great, but with limited budget you can learn so much more from buying cheap robotic components from AliExpress.
I have several thousand dollars of LEGO bricks (or actually my son does), and I've probably only paid a couple hundred dollars for everything.

There are people all over that don't know the value of LEGO bricks and will sell the incredibly cheap. Check garage sales and Facebook marketplace and you will find deals quick.

What kind of motors do they use? Stepper motors, DC motors, ...?
The motors that connect to the Build HAT are servo motors with integral absolute encoders. Encoder resolution is one degree. Power is 7V DC ish.
What would be the ideal age to start introducing my son to these kinds of projects? At what time can they start programming? I don't want to start too early.
Give him normal LEGO now if you haven't already.
He loves LEGO.
Legos are great. My son was lego fanatic and he did learn some programming on mindstorm (rcx) and did some c like programming on it as well (not quite c it was called). He also learned basic from books and old tandy computers. I taught (volunteer) arduino, rpi and occasionally scratch classes at my local library pre-covid and I would say lots of kids can program at 8, and quite a few a bit younger but even with scratch being able to use a keyboard and mouse as opposed to touch screen is really important. An of course being able to read/write. I think just having fun computer things around the house that are not video games is good. Scratch is actually pretty awesome I think for learning programming, and then stuff that actually moves is really cool. I was also lucky in that my father in law actually had a robot company (ibm pc, basic programming, lots of cables) and he sent us one to play with when he as maybe 8 or 9? But there are so many choices today. Good Luck!
Sadly, LEGO keeps discontinuing great and simple systems like this and replacing them with "smart" versions that you have to use a phone with, since they don't want to ship remotes anymore. Giving an 8 year old a phone to play with their LEGO sets kinda defeats the point(they'll want to play Minecraft instead, from personal experience).

There's not even any features like Mindstorms that offer customization/programming, it's literally just a clunky touchscreen remote that doesn't pair with the model half of the time. I guess phones on the box sell better.

It is not the simple system which everyone misses ... because that has no roadmap to a STEM usage ... it is the lack of generic purpose (brickable :) ) remote control to work without smart phone which is the key problem.

For example, a simple remote is super easy to do. A complex behavior config (like steering boxes) or calibration modules could be small plugins into a remote so you keep it with your instruction/set. They could be also remotely programmed and injected there.

SO many ideas how to do this correctly with the original LEGO mindset.

The Raspberry Pu side stearing the project gives me hope it will come out better than the past initiatives.

The real ugly part with the smartphone requirements is it targets pretty recent OS versions (too old hand me downs are out of the picture), and outside of the top end education hubs ($200+) there is no obvious way export/import/backup the programs.

Having a kid invest time to make anything a bit complex on them is a recipe for disaster.

(comment deleted)
Does anyone know if these work with the sensors and motor in LEGO Boost and WeDo 2.0? They're not included in the compatability list, but do have the LPF2 connector. I'm guessing they'll work, bu tnot sure.
I played around with the second generation Mindstorms in college, it was pretty fun even for 20 year old me.

I still have the bricks, motors and sensors! (I even still have the RCX and the weird infrared thing you use to program it). This is going to be a fun project for my daughter and me, especially since the Pi is way more flexible than the RCX.