It's been mentioned a couple times already, but I would recommend actually writing a program that either a) interests you, or (b) would find useful. As you said you want to work on a large or practical project, write something that you would actually use. (And maybe you'll end up with something you want to share with the rest of the world!)
In my case, I had assignments during my university chemistry classes which required data analysis, however the instructions for the analysis either, a) involved a ridiculous procedure or b) was too tedious that building a tool would have been better suited. As any programmer who hates busy work would do, I ended up making a couple tools that fulfilled the need of the two separate assignments.
Later on, when I had some time (read: session breaks), I ended up merging the two tools together to make a larger application, which I continue to add features to this day.
Perhaps the pitfall of my project was that as the program began to grow in size, the codebase became messier and the lack of good design principles led to a ugly mess. I'd recommend looking into books or articles on design patterns to get a good feel for what patterns to use under certain conditions and how.
In your case, you probably would have some practical needs to fulfill by starting your own project, say, a text editor that has version control features. Or, perhaps a cooking recipe appication. There are quite a few good suggestions that the other posters have mentioned, so find something that you'd want to work on, and get working at it :)