Це відео не доступне.
Перепрошуємо.
solving the LEGO city train problem (no room for loops!)
Вставка
- Опубліковано 18 сер 2022
- Solving the fundamental incompatibility that LEGO cities have with LEGO trains: no room for a loop!
Check out eggybricks.com ➡️ for lovingly-crafted train instructions and stickers, and sign up for the email list to get behind-the-scenes details and occasional off-the-cuff videos delivered to your inbox!
How to automate LEGO PoweredUp trains and trams, with either Python (Pybricks) or the LEGO PoweredUp app! Specifically, automate your train to fit in a small LEGO city that doesn't have room to hold a closed train track loop.
TL;DR:
Pybricks code for automating your LEGO train or tram to go back and forth forever, stopping at specific spots:
github.com/egg...
PoweredUp code blocks for automating your LEGO train or tram to go back and forth forever, stopping at specific spots:
github.com/egg...
Summary:
In this video, we:
- build the LEGO 60337 Express Passenger Train
- integrate the 88007 PoweredUp Color & Distance Sensor (and MINDSTORMS Robot Inventor Color Sensor) into the train, and
- show how to program it to reverse direction on cue with both Pybricks (no phone required!) and the PoweredUp app
- Mini City Update: finally get to add the train to our city!! 🚊🌆
Details:
To automate your train without using a computer or phone every time you run it, you can use Pybricks. Pybricks is two things: one, special firmware that runs on the hub, and two, a web-based development environment that lets you program the hub in Python, from your computer. Pybricks is fully web-based, so you don't need to download an app: to set it up, you just go to the website code.pybricks.com. The working code we built in the video is here: github.com/egg...
You can also use the first-party LEGO PoweredUp app to automate your train using "Code Blocks." There are some quirks, limitations, and bugs with this right now though. A working version we built to do the same thing shown in this video is here: github.com/egg...
Other helpful resources:
- Pybricks Getting Started: pybricks.com/i...
- @RacingBrick 's PoweredUp code block guide: racingbrick.co...
- @Brickostan 's automation code blocks tutorial: • Lego Powered Up Automa...
The train in the video is LEGO Express Passenger Train 60337. If you want to purchase it, consider using this link (this is an affiliate link, which means when you click the link and make a purchase, we receive a commission, which helps to support the channel!):
bit.ly/lego-express-passenger-train-60337
Links to the code shown in the video, plus the code blocks version if you don't want to use Pybricks:
- Pybricks code to make the train run back and forth continuously, using color sensor: github.com/eggybricks/poweredup-color-sensor/blob/main/pybricks-code-for-60337-express-passenger-train.py
- PoweredUp code blocks version of the same thing: github.com/eggybricks/poweredup-color-sensor/blob/main/PoweredUp%20Code%20Blocks%20for%2060337%20Express%20Passenger%20Train.pdf
Åäö
This is awesome, not many lego channels mixing python coding and city building! I love the way the train comes from behind the modulars on either side too
Wow, this is such a great video! We're really glad you use Pybricks in your city :)
It's you!! Thanks so much, and thanks for making our LEGO move!
@@eggybricks let us know if you think any features are missing and we'll put them on the list!
@pybricks, can I run pybricks firmware while still controlling the hub via remote or cell phone app? Wondering, because while I am interested in the programming aspect and making the trains do specific tasks, my 4 and 6 year old simply want the train to go as fast as possible in a circle.
@@brandonpalmer2338 You can switch back firmware easily using the standard LEGO app.
But better yet.... you could just make a Pybricks program that does exactly what your kids want 😄 For example 1) just full speed or 2) something with the train remote or 3) a program that will just add 10% speed each time you press the button. That way they don't even need a phone/remote.
Can I use Pybricks on an Apple computer/
You could have use the depth sensor for added realism: trains don't just stop on a dime... they roll a bit untill they stop... you could place a small plate in the center of the green plate and let the train slow down when it sees the green plate, and stop when the sensor sees the raised bit.
Don't know if you'd have space for the depth sensor? As think the sensor they used only does colour?
@@JasonHorrocks I suppose you could use two different color codes, one to slow down and one to stop.
Example: put a white at the beginning of the platform and one green at the end. Do for both directions. Include a code to ignore the first white color met and act only when the second is met. Program to restart the train in the same direction after a certain time.
I suppose this video is to show the basics and it's up to you to improve it the way you find most suitable :D
Or have it detect the color and slow down to a stop over a set amount of time
Massive technic fan, have a huge electronics background, never even considered this being possible...
Great effort has been made for the video to explain what is technically a difficult subject into a simple to understand format. Good job!
Awesome! I also have a small city (actually way smaller than yours ~ 4 x 2.5 base plates). This is very inspiring! I can't wait to see the rest of your city updates. Subscribed.
You could improve that program a little so the train doesnt stop as hard as it does right now (maybe looks very good with a bigger layout in the future). Lets say you use a longer indicator. Now you could initiate a reduction of speed every few ms as long as it reads green. When the green indicator is over it could do the usual break but with a bit of tweaking the settings and playing with the length of the indicator you could get a smooth break motion. Really cool job, that one really inspired me!
Or use another colour or three to indicate "slow down"
I used "stop" then "wait" (for how long the want the train to roll) before "brake". This got the train to ease in before the brake is applied
python coding really is the keys to the kingdom, still amazingly popular considering it's been around since the 80's
Nice job! I'm a bit of a copy paste coder, but I love the functionality that Pybricks adds to the Powered Up system. I wouldn't have invested as much in the system without that option. Not just for added functionality but knowing that the official Lego apps will one day be abandoned. Also being able to store code on the hubs themselves is a huge game changer! Thanks for making this video and bringing more attention to Pybricks!
As a suggestion for V2, I'd say put the "current speed" into a variable, and have your colour detection be a switch statement. Then the "Green" case can stop and wait, then re-apply the speed from the variable, the "Yellow" case stops, waits, changes the speed variable to - speed, and sets that speed, and the "Red" case does the same, but with + speed. Then it'll work for tracks with more than one station, and rather than having to push the train to the station when it starts, it can check the sensor and if nothing's detected, start going forward.
This is truly amazing, please keep making these splendid videos. I learned so much with this, and you guys make it so entertaining. I also love what you guys are doing mixing coding and Lego. It’s wonderful, I can’t wait to see more.
This is so cool! Definitely adds a lot of character to your city. When I eventually build my city I’ll keep this in mind!
my kid's duplo train does this. it has 5 colored action bricks. yellow = horn, white = lights, red = stop, blue = gas stop, green = reverse
As someone who's just getting into the hobby, your diagram you show 2:31 is a huge help... on top of the rest of the video of course! Other sources of information online can be severely lacking :-P
Thanks so much, glad it was useful!
I'm really hoping that you two got another microphone, it wasn't all that bad I hope you didn't worry about it, and I hope you had as much fun making this as I did watching it
Really like this setup, but I have issues with your code. It is assuming that the train is between the red and yellow at startup. If it is not, it will run past the yellow and off the track. I would suggest you change your check_for_color to not have a parameter and to have a switch statement to see if it has one of the three command colors. Then depending on what color it sees it can stop or change directions. You will have to add a direction variable to allow the program to remember what direction it was going in the station and continue in that direction after the hold time. In fact, this would allow you to have just two colors (red and green for example). When it hits red it just looks to see what direction it is going, then change to the other.
With this setup, the program will always stop at a reverse point and will not be dependent on a starting position.
Nice change, but what if the train starts at one of the ends then it might be best if they were two different colors
yes, I agree, the code in the video is unnecessarily complex
@@anatoleh1 It's more than good enough for a basic intro. Every code can be refactored and refined later when you learn more ;)
This is really great and has turned the train from a toy that my two kids fight over to control and crash, to one where they work together to get the train to do what they want to do! Excellent intro.
I personally found that the mindstorms sensor was not always 100% reliable when it comes to reading green when using it myself. I dont have the color and distance sensor however I would imagine it would be about the same too. If the train was moving very slowly over the green, or was in a darkened space then this wasnt an issue. To fix the issue, I built an enclosure under the chassis of the train (similar to the one thats removed in order to get the sensor to work originally) and found that its now completely reliable.
I would imagine this would likely result in you fixing the reliability of your color and distance sensor as you mentioned that it was not as reliable as the mindstorms sensor. Whilst I suspect that the shaded areas where you had your coloured plates and the brighter light from the mindstorms sensor were probably the reasons why you didnt experience issues with the mindstorms sensor.
Thanks so much! And really nice debugging and solution - this is a great fix for anyone encountering this issue. Thanks!
It's always amazing to see how your minds work! This tots needs a million views!
You writing code, and then running it on legos is such a cool real world application. I'm happy that you showed the process, keep up the good work :)
Brilliant. Just for realism aesthetics, I would humbly suggest putting tall enough buildings to block both outsides from view so you don't see the train stop at the ends, and have them wait a bit longer at each stop, the ends quite a bit more. That way, it looks like the train keeps going for quite a bit more, and the entering and exiting doesn't dominate the city as much. Movement draws the eye after all. And your city looks so beautiful you want to show off every detail.
It's crazy what some smart people can do with Lego 🤯
Hahaha, as a Lego-fanatic with a physics background working in a company where we are phasing often programming challenges, I can appreciate this video very very much. I somehow expected this to happen on this channel. Great video.
I can imagine the train going forward and back would look even better with a bit smaller train or a bit longer track.
The stopping part at a station would be a great addition to any city.
Another great application would be to use the color sensor to open/close railway barriers.
Thanks! Great point on the size of train versus track - we actually just reduced the size of the train a little bit to better fit the space, like you describe. These are great ideas!
Your science/programming : A+
How it actually looks executed: C-
I feel like, if you were to have the train run on a giant looped track, then, all you would NEED, is the GREEN brick.
Algorithmically, a simpler solution can be created. One color of brick for the "stop at the station" and one "stop and turn around" action.
Y’all are so smart thanks that was very educational
Wow! Clearly I have been living under a rock for the last year or so (that's probably true, for a variety of reasons...). I was unaware of Pybricks until now. Having looked at one or two other videos on the topic it clearly has a great deal of potential. Thanks for opening my eyes to the possibilities.
So happy I found your channel, and especially this video. Looking forward to your next one!
Thanks so much!
This is great! Was looking for this solution awhile back. Can’t wait to see what’s next!
Thanks for taking the time to explain how you did the coding and also explain the differences between the two sensors, excellent work! I'm really tempted to also buy a color sensor and try it out myself now!
I feel like this channel is going to do really well 😸
Got my kid a brio set the other day and now I want something I can make really fun for me too haha.
FANTASTIC video and tutorial - Great work guys!!!
Going to try this out for myself once i buy a city train off your vid!
I am loving this channel and content.
Wow this is amazing! haven't seen any/many lego channels showing working with PY Bricks, hats off to that guys, much appreciation from Pakistan!
This is very cool. First time I've ever seen python and lego integrated.
This is so cool! think alot of people with trolley/tram layouts in their city need this!
Wow, I had no idea these detectors could be read by the hub. This opens up a lot of options! I will have to look into pybricks.
I just stumbled on this and you’ve solved my desire to make the recent trolley move back and forth on an incomplete loop! Thank you.
Not just that, but now I know I can even create “stops” at stations using the same tools!
Of course, I don’t (yet) have the skill/patience to do the coding but now that I have this tutorial I have reason to start learning, and that’s a good thing.
My only problem with this? Well, I went down an eggybricks rabbit hole and need more of your videos! I hope you have more eventually. Notifications are on.
I’ve liked them all. This was obviously the most helpful for me, but the Ninjago Ultimate Judge was really fun and, as a film nut whose first modular was the Palace Cinema, I really enjoyed that video. I’d love to see an update. It’s one of the few modulars I’ve missed some. And it was so heartening to see you modify the screen to a foreign black and white movie!
I hope all remains well with you both.
Thanks so much for the kind words!
Cool. Seen this idea used for a Great Ball Contraption many years ago using Power Functions & an NXT. 2 colors at each end. 1 to slow down & 1 to stop. 4 colors total. But they had sign posts on the side of the tracks for the color. Not down. So, when someone walked by with a certain color shirt, things would go wild. LOL.
To me, it’s perfect for a 3-stop Super-fast Express Route: Like 3 main cities and and you make green for the second stop platform, no colour for passing stations, Red and yellow at the terminal platform to prevent crashing on it
this is super cool. Had no idea that pybricks was a thing!
Thanks so much!
Neat!!! Would love to see more videos from you two :)
This is great - I love a practical programming example and wasn't actually aware of Pybricks. I learned something new and cool, and for that, you get a sub!
Amazing presentation, very clear, and provide supporting that why you chose the sensor and Pybricks. Very easy to follow. I just want to say again....Amazing. thanks
I did not realize that the standard powered up hub was programmable. Way cooler than power functions!
Great idea! I solved the same problem a while ago by having the train slow down before the track ends using a timer, and then bumping into rubber bands at both ends (for "recalibration"). But I was actually thinking of just replacing the whole thing with my own motor + micro controller, mostly because I don't want to deal with those AAA batteries all the time :/
Thank you for this video! Been looking for something like thus for a while! Please don't delete.
Thank you for a great explanation. I have just ordered the colour sensor! Can’t wait until it arrives! 😊
Yeyyyyy second episode so happy , keep up the good work
I'd love to see someone make a tram which have a reversible end station that just runs straight through a city along the roads and then reverses, this is a great way to do it, maybe there would be a way to strip the controller/battery box off uneccesary bulk to hide it better
why do we need three different colors though? IMO two should do the trick.
One color to stop at the station, and the other to reverse direction
This video is amazing and the thing that makes me super happy is that I m getting this Lego train in my birthday! :]
Happy birthday!!
Not now,my birthday starts at july 1, not march 31 :|
Have you seen how the old 4.5 Volt system did it?
The battery box had a switch that was sticking out. When the switch hit an obstacle, it would reverse the current.
Really enjoyed this video - love mixing up code and LEGO! I'm working on using NodeMCU micro controllers and NFC sensors to control the trains in my city and it's been a ton of fun!
Do you really need 3 colors? Just use two. One for stop for a set period of time, and one to reverse direction
This is so cool! It's got me thinking about what sort of things I can automate around my house.
In my childhood, I didn't need batteries to run my Lego train. It had a transformer which was plugged into the 220 V socket. And the train got the electricity from the tracks.
The old 9V track-powered lego trains could also be automated to do this with the classic Mindstorms RCX system! I have the old trains and a Mindstorms RCX, maybe I should try it out. The connector to power the tracks can be connected to the motor output on the RCX. There's no color sensor, but there is a light sensor to detect different brightnesses - or i could use a touch sensor which presses against a tile when the train reaches a certain spot.
your probably not asking for tips about trains but I noticed a problem, that train has airdrag which is pretty bad for trains, and for those kind of lines you should put stuff like metra or amtrak does and a great example is the heartland flyer, runs through some smaller cities but also some bigger ones but its a pretty small line overall
What I'd REALLY like, is for the Train to actually play the sounds that one can hear through the App (like, the Horn, Whistle or Bike Ringing Sounds). Any way for that to be done?
Maybe the intermittent fault of the color sensor has anything to do with two things, 1) the distance of the sensing element to the bricks and 2) providing contrast. Last I mean butting up say...black bricks to the colored bricks. Now the first I learned from an Arduino light sensor that measured varied output values based on distance. The second idea I got from an rpm counter, which stated contrast as a procedure. These ideas might improve consistency. Thank you for making these videos!
the battery packs from 2010 where much better because you could stack more ports on each other
Cool solution! But it's kind of mind-boggling that the color coded plates and detection come standard with the Duplo train 10874, yet for the Lego train you need to come up with your own solution (which, granted, can also be fun).
might consider doing a mini layout on my shelf now...
Awesome video! Excited for all your future videos!
That's so clever, I've never thought of using other PU components to automate a LEGO train. Even though I'm not too experienced with the new Powered Up system (I mostly collect the old 9v trains from the 90's and early 2000's), it does make me want to try a variant of this with my own components. Maybe a system could work like this on 9v?
Omg this is amazing! I am working with this tech now and I love it!
I just completed my first prototype city tram using a modified version of the tram from Lego set 8404. In the past I have had this setup with a Power Functions motor, battery box and IR receiver but as with my other trains, this just goes around and around and the tram generally has a hard time with corners. Using the information from your video, a PoweredUp Hub and train motor along with PyBricks, I was able to implement a much nicer street level light rail line. Many light rail lines do exactly what you suggested in your video in that they are a linear line that just goes back and forth. This works great for LEGO city regardless of the size as it adds a nice and unique bit of motion on the street level. I am interested in implementing some automation to the big rail lines as I think your method would be great to allow trains to pull into stations based on the count of revolutions. I am also interested to know if it would be possible to control the behavior of multiple PoweredUp hubs such that using an external computer, the code would be able to monitor the status of different trains. For example, if train "A" just passed the red plate, then train "B" stops for a specified amount of time to let train "A" pass. It would be really interesting if automation like this could be accomplished as it would provide a greater degree of realism to LEGO train layouts.Thanks again for your wonderful video and the inspiration it provided! You guys are awesome - if you are ever in northern, AL check in with the Tennessee Valley LEGO Club!
Glad this was helpful!!
Funny that you mention automating bigger rail lines - we just finished a new city track layout (w/ automation) that coordinates four trains (with four hubs) to all share one station by monitoring each other's location. If you're interested, we'll have a video on it up in the next few weeks.
Thanks so much and will definitely check in if we're ever nearby!
Definitely need to be a two sided train, like the one that has faces on both ends
A pile of batteries for our toys. It´s the 90s all over again. Don´t get me wrong, I really like your setup and ingenuity. I just can´t watch a video where I´m told that LEGO sells more than one kind of color sensor as well as some robotics stuff and pushes customers more and more towards using apps to play with their toys, and not make fun of the fact that they aren´t even capable of equipping their current product range with USB - rechargable batteries.
This is sooo cool!!! I never new about this!
With Buwizz 3.0 battery and controller we control both Powered up and Lego Mindstorms motors.
This is what I was looking for!!!! Thank you!!!!
Fantastic. I had no idea the poweredup hub was so versatile!
I think the code could be more optimized since the train can be at any random place, while Green is not the first pattern to be observed lol
this is really cool! I didn't know powered up could run programs like that
Bro created the REM
This thing remind me a train toy that my friend has with diferent signals, and when the sensor see that color it stops or reverse or turn on/off headlights and horn
This works so well and it was fascinating to watch the process.
Thank you so much for teaching me how to do this. I really appreciate it. Definitely forwarding this to my nephew too!
This is amazing content. Mixing two of my loves, code and bricks :D
This looks amazing!
This is so amazing and I've been thinking about something like this for awhile now. I will definitely be incorporating some Python to automate my trains!
Great tutorial, thanks a lot!
The PU Sensor is not as good as the Mindstorms/Education sensor. The light with it seems to increase the accuracy. I also coded something similar a while back before I saw your video, and I managed to make it work using just two colours. I just stored a variable for the speed of the motor and modified that every time I saw the colour. You could do more stuff with other colours then if you had more ports available!
So cool!! Awesome work, subscribed! :)
This is great. Would work great with a trolly car and what I've been trying to figure out how to do as I dont have space for a full loop track. Thanks.
UA-cam needs more of your content :)
bro i went here to look at some cool lego train and ended up in coding class
When you buy the train do they provide triple A batteries or do you have to buy seperately
I never knew this stuff goes this hard. That's pretty cool actually. Maybe make a locomotive on both ends ... 🙂
This is great! Lot's of inspiration for my own layout! Thank you!
This is so awesome, I'm trying it out... thank you guys!
Point to point wouldn't work so well for me, think my streamlined steam locomotive with four passenger cars is longer then your whole layout, lol!
Nice! Would be cool if you coded it to accel and decel gradually.
The tracks are on an elevation right? Why not lower the right half behind the buildings, send it backwards, raise it on the right half, and send it across again?
Now I am starting to see why the PU Hub is $50, still feels a little overpriced, but not quite as bad. Might have to pick one up at some point and experiment, have some long term plans to build a "racing" locomotive and would need some sort of way to slow it down before curves.
Great video! Well explained and presented!
Wait.... wait wait wait wait.... lego has freakin power hubs you can program? God damn has their robotics and powered shit gotten good.
I was very pleased when I picked up a Technic "remote control" car set, and it turned out that I could install an app on my phone to program it however I wanted, and re-use the "powered up" brick to build new things. It was cool to learn about Pybricks from this video, too.
This is great, thanks for sharing.
This is fabulous!