In my next project it will be very helpful to monitor the speed of my dc motor. How can I accomplish this?
In addition to the cornucopia of methods that burst forth from Russell's answer you could consider to add yet another to that rich bounty- if you have sufficient off time in your maximum PWM duty cycle you may be able to harness the back EMF of the motor itself as a tachometer signal. This has the advantage of being sensorless. It can be a suitable method for motors that are permanent magnet or that have a separate field winding. There must be sufficient time for the energy stored in the rotor inductance to die down, after which you can simply sample the voltage with an ADC.
A detailed description of this method can be found here. The back EMF is proportional to the RPM of the motor, and of the same polarity as the applied voltage (assuming a PM type or fixed field voltage) when measured at the terminals.
There are so many possible ways that the best way depends on the details.
Pulse per revolution from mechanical or magnetic or optical switch or ... .
Triggers could be "cam or bump", magnet, slot or mark or light or ... .
Or several pulses per revolution using either multiple sensors or multiple triggers.
Extending to ...
Tachometer track - series of marks or slots or magnetically variable permeability disk or ...
Small alternator/generator attached to shaft (often known as a tachometer).
Once you have one or multiple pulses per revolution you can
count the number over a given period, or
measure the time between them, or
trigger a fixed length pulse per input pulse (known as a retriggerable monostable) so that the mean DC level out is a measure of speed.
Where the output is a period you need to take the reciprocal to get speed. A basic microcontroller such as an Arduino can do this easily. THese can be obtained for as little as $US2.85 each if you buy 10 or $US4.50 each if you buy one.
Get a few friends to buy one too and get 10! [No, I have no relationship with them except as a happy customer]