This might not be considered a robot project but it's close. It is a 3D printed Dalek that plays sound bites and animates it arms and head while it plays them. A button press triggers the sound bite. The lights also blink periodically . It is controlled by a Picaxe 14M2. The sound is from a DV-SV17F sound module. I learned about the sound module on this forum from erco. My code is derived from his example code. I also used his leds across the speaker output idea for a modulated lighting effect. Thanks erco. The motor is turned on and off through a mosfet. It is powered by 3 AA batteries. The project has 4 leds. Two 3mm leds wired in series are blinked periodically by the Picaxe. Two other 1206 SMD leds are modulated from the speaker output. One SMD led and one 3mm led are glued into each of the little lights in the dome. It's a hack but I like the effect. The SMD parts were used because of limited room in the lights on top the head. The project started when a friend asked if I could make a Dalek with blinking lights.
I designed the circuit board in EasyEDA Pro which is free. I made the circuit board on my 3018 CNC using isolation routing. All the files are on Thingiverse including zip files that hold the EasyeEDA design file and Gerber files.
www.thingiverse.com
Here is a link to the Youtube video of build:
Here is a shorter demo video:
I muted the sound when the sound bites are playing because of copyright concerns. I didn't mute the sound on a couple of earlier videos on building it if you want to know what it sounds like.
All the files are on Thingiverse but I'll post the code and schematic here.

I designed the circuit board in EasyEDA Pro which is free. I made the circuit board on my 3018 CNC using isolation routing. All the files are on Thingiverse including zip files that hold the EasyeEDA design file and Gerber files.
Animated Dalek With Sound by Rick100
Youtube demo video. Due to copyright concerns the audio is muted when the Dalek sound bytes are playing. Sorry.https://youtu.be/Ek8lwxzZ4EEYoutube build video. Due to copyright concerns the audio is muted when the Dalek sound bytes are playing.https://youtu.be/JBPH7Tg9V7IThis is my 1/10 scale...
Here is a link to the Youtube video of build:
Here is a shorter demo video:
I muted the sound when the sound bites are playing because of copyright concerns. I didn't mute the sound on a couple of earlier videos on building it if you want to know what it sounds like.
All the files are on Thingiverse but I'll post the code and schematic here.

Rich (BB code):
'Dalek Picaxe program
'DY-SV17F MP3Player
#Picaxe 14M2
#no_data
symbol TX = C.4 ;transmit commands to player leg 3
symbol BUSY_PIN = pinB.1 ;busy pin from player leg 12
symbol MOTOR_POWER = C.1 ;leg 6
symbol PUSH_Button = pinB.2 ;the push button switch leg 11
symbol HEAD_LEDS = B.5 ;leds on head leg 8
symbol BAUD_FREQ = M8
symbol BAUD = T9600_8 ;baud rate for dfplayer
symbol FILES_COUNT = 24
symbol FLASH_RATE = 30
symbol arg = w1 ;b3:b2
symbol arg.lsb = b2
symbol arg.msb = b3
symbol checksum = w2 ;b5:b4
symbol checksum.lsb = b4
symbol counter = b6
symbol led_interval = b7
pullup %00011100 'enable pullup on B.4 , B.3 , B.2 for pb switch
low MOTOR_POWER 'make pin output and turn off power to player
gosub setUpPlayer
arg = 1
gosub playFile 'play file 1 on startup
if PUSH_BUTTON = 0 then 'if button is held down at power on then play all the files
gosub playAll
endif
counter = 1
led_interval = 0
main: 'main loop for checking push button and playing file
do while PUSH_BUTTON = 1 'wait in this loop for button press
if led_interval = FLASH_RATE then
low HEAD_LEDS 'leds on
led_interval = 0
endif
inc led_interval
nap 3 'save power for 144 mSeconds
high HEAD_LEDS 'leds off
loop
arg = counter
gosub motorOn
gosub playfile
gosub motorOff
inc counter
if counter > FILES_COUNT then
counter = 1 'reset the counter
endif
goto main
playAll:
for counter = 1 to Files_COUNT
arg = counter
gosub playFile
pause 2000
next
pause 1000
return
'----------------------subroutines----------------------
motorOn:
high MOTOR_POWER
return
motorOff:
low MOTOR_POWER
return
setUpPlayer:
setFreq BAUD_FREQ
pause 10
serout TX,BAUD,($AA,$1A,$01,$02,$C7)'SET eq 2 ROCK loudest
gosub waitBusy
serout TX,BAUD,($AA,$13,$01,30,$DC )' volume 30
gosub waitBusy
setFreq MDEFAULT
return
playFile:
; play the file in arg
; the checksum is the 8 lowest bits of 5 bytes
checksum = $AA + $07 + $02 + arg.msb + arg.lsb ;add the bytes that make up the checksum
setFreq BAUD_FREQ
pause 10
serOut TX, BAUD, ( $AA, $07, $02,arg.msb, arg.lsb, checksum.lsb )
arg = 0
gosub waitBusy
setFreq MDEFAULT
return
waitBusy:
pause 500 ; give time for busy pin to be valid
do While BUSY_PIN = 1 ' busy pin is high when playing
pause 100
loop
return
Last edited: