Un Arduino no puede generar directamente una señal sinusoidal ya que no dispone de DAC, sin embargo hay una forma bastante interesante para generar ese tipo de señales con bastante precisión y con muy pocos componentes externos. El truco reside en utilizar las salidas PWM (Pulse Width Modulation) para generar unos picos de tensión que varian en el tiempo según la frecuencia deseada, para luego aplicar un pequeño filtro paso bajo que limpie la onda digital generada. Dicho filtro es muy sencillo de realizar ya que tan sólo se necesitan unas pocas resistencias y condensadores. La frecuencia que podemos generar va en un rango desde cero a 16 KHz con una resolución de una millonésima parte de un Herzio, lo cual no está nada mal! Se puede conservar una distorsión relativamente baja (menos de 1%) para frecuencias no superiores a 3 KHz.
Os dejo un interesante enlace que lo explica todo al detalle a continuación...
Enlace: Arduino DDS Sinewave Generator