I've done this several times and a key point in nurturing interest over disdain in students is to place some additional, personalized learning in the project.
If the student has a mathematical bent, I usually assign a Monte Carlo simullation of pi. It is amazing to see random "dart throws" and an easy calculation converging to pi, and it lends itself to a quick drawing, followed by a quick outline, followed by pseudo code, followed by short coding -- and it usually requires simple debugging to work out whether you need to use "" or "=".
If the student is a tactile learner, find a device project like a Mindstorm kit, so they end up with a physical object to touch and control. And who doesn't need a little self-driving dump truck to distribute handouts up and down the rows?
If they are artistic, perhaps explore pixel edge detection to create a line drawing from a photo. They will come away with keen insight into how images are stored and displayed.
The key is that they use coding to DO SOMETHING THAT THEY PERSONALLY FIND VALUABLE. If you don't do this, then it will be just like forcing them to memorize the multiplication tables or diagramming sentences. Most students aren't inspired to go back to those particular assignments on their own. Our goal is to build internal interest so they will become life-long learners.
One more thing I have done in small classes is to do a team project. (I did one with TI calculators.) you can negotiate who gets what subroutine and do all the preliminary teaching and organizing on the whiteboard and then turn the subroutines over to the students. When they transfer all the subroutines between themselves and see it all run, they feel like they have really done something, since the teacher didn't GIVE it to them. They also have to learn to aggressively test individually and then to debug as a team.