Dependencies:   mbed Motor mbed-rtos

Useless Robot

Useless Robot Overview

Project by Austin Bartmess and Jeremy Deremer

This is a robot developed on an ARM Microcontroller (LPC 1768). It uses a servo, two DC motors both powered by an external power source, nine red LEDs, two RBG LEDs, a speaker, a toggle switch and a transistor.

The goal of this robot is to stay off. However, the user can turn it on without harm. It attempts to stay off via turning a toggle switch off with an arm attached to a servo. If the robot is turned on too much, it will progressively get angry. It starts by not smiling and changing eye colors. Following that, the robot will frown and yell at the user. Finally, the robot will drive around randomly while screaming and looking angry via its LEDs.

Required Parts

  • mbed Microcontroller x1
  • USB to mini USB cable x1
  • Servo x1
  • H-Bridge Breakout Board x1
  • DC Motors x2
  • DC Motor Wheels x4
  • Red LEDs x9
  • RGB LEDs x2
  • 0.5W Speaker x1
  • Toggle Switch x1
  • BJTransistor x1
  • Jumper Cables Kit x1
  • Breadboard x2

Pinout and Connections

MbedH-BridgeDC MotorsServoTransistorSpeakerLEDsBarrel JackToggle Switch
GNDGND(-)Emitter(-)GND(-)(-)
Vu
VinVm(+)(+)
VoutVcc, /STBY(+)
p5AIN1
p6AIN2
p10LED+
p11LED+
p12LED+
p15Control
p21PWMA
p22Collector
p23Blue
p24Green
p25Red
p26Control
AO1(+)
AO2(-)

/media/uploads/jderemer3/capture.png

Demo Clip

Source Code

Import program4180_FinaProject

Committer:
jderemer3
Date:
Wed Apr 26 20:21:54 2017 +0000
Revision:
0:4931c25e1cf7
Child:
1:0402db7e91f5
v1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jderemer3 0:4931c25e1cf7 1 #include "mbed.h"
jderemer3 0:4931c25e1cf7 2 #include "rtos.h"
jderemer3 0:4931c25e1cf7 3 #include "RGBLed.h"
jderemer3 0:4931c25e1cf7 4 #include "uLCD_4DGL.h"
jderemer3 0:4931c25e1cf7 5
jderemer3 0:4931c25e1cf7 6 DigitalOut led1(LED1);
jderemer3 0:4931c25e1cf7 7 DigitalOut led2(LED2);
jderemer3 0:4931c25e1cf7 8 DigitalOut led3(LED3);
jderemer3 0:4931c25e1cf7 9 DigitalOut led4(LED4);
jderemer3 0:4931c25e1cf7 10
jderemer3 0:4931c25e1cf7 11 // RGBLed myRGBled(p21,p22,p23); //RGB PWM pins
jderemer3 0:4931c25e1cf7 12
jderemer3 0:4931c25e1cf7 13 Serial bluemod(p28,p27);
jderemer3 0:4931c25e1cf7 14 PwmOut red(p21);
jderemer3 0:4931c25e1cf7 15 PwmOut green(p22);
jderemer3 0:4931c25e1cf7 16 PwmOut blue(p23);
jderemer3 0:4931c25e1cf7 17
jderemer3 0:4931c25e1cf7 18 uLCD_4DGL uLCD(p9, p10, p11);
jderemer3 0:4931c25e1cf7 19
jderemer3 0:4931c25e1cf7 20 Thread t1; // Arm Response
jderemer3 0:4931c25e1cf7 21 Thread t2; // LED Color
jderemer3 0:4931c25e1cf7 22 Thread t3; // Speaker Music / Audio
jderemer3 0:4931c25e1cf7 23 Thread t4; // Motor Control
jderemer3 0:4931c25e1cf7 24
jderemer3 0:4931c25e1cf7 25 Mutex lk_LCD;
jderemer3 0:4931c25e1cf7 26
jderemer3 0:4931c25e1cf7 27 void rgb_t3() {
jderemer3 0:4931c25e1cf7 28
jderemer3 0:4931c25e1cf7 29 while (true) {
jderemer3 0:4931c25e1cf7 30
jderemer3 0:4931c25e1cf7 31 }
jderemer3 0:4931c25e1cf7 32 }
jderemer3 0:4931c25e1cf7 33
jderemer3 0:4931c25e1cf7 34 void lcd_t1() {
jderemer3 0:4931c25e1cf7 35 while (true) {
jderemer3 0:4931c25e1cf7 36 for (int i = 0; i < 10; i++)
jderemer3 0:4931c25e1cf7 37 {
jderemer3 0:4931c25e1cf7 38 lk_LCD.lock();
jderemer3 0:4931c25e1cf7 39 uLCD.locate(2,2);
jderemer3 0:4931c25e1cf7 40 uLCD.printf("\n Hello World! \nCount by one is %d!\n", i);
jderemer3 0:4931c25e1cf7 41 lk_LCD.unlock();
jderemer3 0:4931c25e1cf7 42 Thread::wait(1000);
jderemer3 0:4931c25e1cf7 43 }
jderemer3 0:4931c25e1cf7 44 }
jderemer3 0:4931c25e1cf7 45 }
jderemer3 0:4931c25e1cf7 46
jderemer3 0:4931c25e1cf7 47 void lcd_t2() {
jderemer3 0:4931c25e1cf7 48 while (true) {
jderemer3 0:4931c25e1cf7 49 for (int j = 0; j < 20; j += 2)
jderemer3 0:4931c25e1cf7 50 {
jderemer3 0:4931c25e1cf7 51 lk_LCD.lock();
jderemer3 0:4931c25e1cf7 52 uLCD.locate(4,4);
jderemer3 0:4931c25e1cf7 53 uLCD.printf("\n Hello World! \nCount by two is %d!\n", j);
jderemer3 0:4931c25e1cf7 54 lk_LCD.unlock();
jderemer3 0:4931c25e1cf7 55 Thread::wait(2000);
jderemer3 0:4931c25e1cf7 56 }
jderemer3 0:4931c25e1cf7 57 }
jderemer3 0:4931c25e1cf7 58 }
jderemer3 0:4931c25e1cf7 59
jderemer3 0:4931c25e1cf7 60
jderemer3 0:4931c25e1cf7 61
jderemer3 0:4931c25e1cf7 62 int main() {
jderemer3 0:4931c25e1cf7 63 // myRGBled.write(0.0, 0.0, 0.0);
jderemer3 0:4931c25e1cf7 64 char bred=0;
jderemer3 0:4931c25e1cf7 65 char bgreen=0;
jderemer3 0:4931c25e1cf7 66 char bblue=0;
jderemer3 0:4931c25e1cf7 67 red = green = blue = 0;
jderemer3 0:4931c25e1cf7 68
jderemer3 0:4931c25e1cf7 69 t3.start(rgb_t3);
jderemer3 0:4931c25e1cf7 70 t1.start(lcd_t1);
jderemer3 0:4931c25e1cf7 71 t2.start(lcd_t2);
jderemer3 0:4931c25e1cf7 72
jderemer3 0:4931c25e1cf7 73 while (true) {
jderemer3 0:4931c25e1cf7 74 if (bluemod.getc()=='!') {
jderemer3 0:4931c25e1cf7 75 if (bluemod.getc()=='C') { //color data packet
jderemer3 0:4931c25e1cf7 76 bred = bluemod.getc(); // RGB color values
jderemer3 0:4931c25e1cf7 77 bgreen = bluemod.getc();
jderemer3 0:4931c25e1cf7 78 bblue = bluemod.getc();
jderemer3 0:4931c25e1cf7 79 if (bluemod.getc()==char(~('!' + 'C' + bred + bgreen + bblue))) { //checksum OK?
jderemer3 0:4931c25e1cf7 80 red = bred/255.0; //send new color to RGB LED PWM outputs
jderemer3 0:4931c25e1cf7 81 green = bgreen/255.0;
jderemer3 0:4931c25e1cf7 82 blue = bblue/255.0;
jderemer3 0:4931c25e1cf7 83 }
jderemer3 0:4931c25e1cf7 84 }
jderemer3 0:4931c25e1cf7 85 }
jderemer3 0:4931c25e1cf7 86 led1 = !led1;
jderemer3 0:4931c25e1cf7 87 Thread::wait(500);
jderemer3 0:4931c25e1cf7 88 }
jderemer3 0:4931c25e1cf7 89 }