I'd suggest a contract that he has to sign and stick to if he wants to remain under your roof.
Firstly, add up what he is using in your house and put a value on each service (food, washing, electricity etc). If he doesn't do his own washing and cleaning then he has to pay for the services, if he does them he gets them for free. Also, as you are doing use a base rent line, a certain % of his pay capped. You can also add other conditions to his contract, such as finding a better job and working more hours.
He will kick up a fuss about it so i would suggest two things, don't tell him that if he does his own chores he can save money, use it as a bargaining chip. It will make him feel like your moving to meet him and make it feel fairer. Secondly, price up how much he would have to fork out if he was not sponging off you, include rent, bills etc, oh, and don't forget the CSA
If you can make him realise that he has it easy at yours then he should start to respect it a bit more. If he doesn't agree to it, I would do one of 2 things. Buy a damaged 360 online and replace it with his, "oh dear, now what you going to do?" or kick him out. When he wants to come back he can do so only if he agrees to and signs the contract.
You are doing the right thing, don't consider yourself to be failing at all, some kids are just useless until they either grow up or get a shock.
Edit: where does he work? Try speaking to his boss on the quiet and enquiring if the boss can make him do more hours?