Sahil Parikh
Published

Voice Controlled Scooter Lights and Garage Door

Wireless voice controlled garage door opener and animated turn signals.

IntermediateFull instructions provided4 hours3,595
Voice Controlled Scooter Lights and Garage Door

Things used in this project

Hardware components

Relay (generic)
×1
Arduino Nano R3
Arduino Nano R3
×1

Story

Read more

Code

ScootSendProtowtlightsIns.ino

Arduino
No preview (download only).

garage_door.ino

Arduino
/*
  Getting Started example sketch for nRF24L01+ radios
  This is a very basic example of how to send data from one node to another
  Updated: Dec 2014 by TMRh20
*/

#include <SPI.h>
#include "RF24.h"
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define PIN 2
int b = 5;
int c = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(256, PIN, NEO_GRB + NEO_KHZ800);
/****************** User Config ***************************/
/***      Set this radio as radio number 0 or 1         ***/
bool radioNumber = 0;

/* Hardware configuration: Set up nRF24L01 radio on SPI bus plus pins 7 & 8 */
RF24 radio(9, 10);
/**********************************************************/

byte addresses[][6] = {"1Node", "2Node"};

// Used to control whether this node is sending or receiving
bool role = 0;
void off()
{
  Serial.println("OFF");
  for (int i = 0; i < 256; i ++)
    strip.setPixelColor(i, 0, 0, 0, 0);
  strip.show();
}
void offp()
{
  Serial.println("pOFF");
  for (int i = 48; i < 256; i ++)
    strip.setPixelColor(i, 0, 0, 0, 0);
  strip.show();
}

void redLight(uint32_t c, uint8_t wait)
{

  for (uint16_t i = 0; i < 48; i++) {
    strip.setPixelColor(i, c);
    //strip.show();
    //delay(wait);
    //strip.setPixelColor(i+q, 0);

  }
}
void turnl()   //RGB (255,255,0)= Yellow
{
  strip.setPixelColor(255 - 11, b, b, 0, 0);
  strip.setPixelColor(225 + 11, b, b, 0, 0);
  strip.setPixelColor(221 - 11, b, b, 0, 0);
  strip.setPixelColor(195 + 11, b, b, 0, 0);
  strip.setPixelColor(187 - 11, b, b, 0, 0);
  strip.setPixelColor(163 + 11, b, b, 0, 0);
  strip.setPixelColor(157 - 11, b, b, 0, 0);
  strip.setPixelColor(129 + 11, b, b, 0, 0);
  strip.setPixelColor(127 - 11, b, b, 0, 0);
  strip.setPixelColor(255 - 10, b, b, 0, 0);
  strip.setPixelColor(225 + 10, b, b, 0, 0);
  strip.setPixelColor(221 - 10, b, b, 0, 0);
  strip.setPixelColor(195 + 10, b, b, 0, 0);
  strip.setPixelColor(187 - 10, b, b, 0, 0);
  strip.setPixelColor(163 + 10, b, b, 0, 0);
  strip.setPixelColor(157 - 10, b, b, 0, 0);
  strip.setPixelColor(129 + 10, b, b, 0, 0);
  strip.setPixelColor(127 - 10, b, b, 0, 0);
  for (int i = 0; i < 12; i ++)
  {
    strip.setPixelColor(255 - i, b, b, 0, 0);
    strip.setPixelColor(225 + i, b, b, 0, 0);
    strip.setPixelColor(221 - i, b, b, 0, 0);
    strip.setPixelColor(195 + i, b, b, 0, 0);
    strip.setPixelColor(187 - i, b, b, 0, 0);
    strip.setPixelColor(163 + i, b, b, 0, 0);
    strip.setPixelColor(157 - i, b, b, 0, 0);
    strip.setPixelColor(129 + i, b, b, 0, 0);
    strip.setPixelColor(127 - i, b, b, 0, 0);

    strip.setPixelColor(257 - i, 0, 0, 0, 0);
    strip.setPixelColor(223 + i, 0, 0, 0, 0);
    strip.setPixelColor(223 - i, 0, 0, 0, 0);
    strip.setPixelColor(193 + i, 0, 0, 0, 0);
    strip.setPixelColor(189 - i, 0, 0, 0, 0);
    if (i > 1)
    {
      strip.setPixelColor(161 + i, 0, 0, 0, 0);
      strip.setPixelColor(159 - i, 0, 0, 0, 0);
      strip.setPixelColor(127 + i, 0, 0, 0, 0);
      strip.setPixelColor(129 - i, 0, 0, 0, 0);
    }

    strip.show();
    delay(80);

  }
}

void turnr()   //RGB (255,255,0)= Yellow
{
  strip.setPixelColor(240 + 11, b, b, 0, 0);
  strip.setPixelColor(238 - 11, b, b, 0, 0);
  strip.setPixelColor(210 + 11, b, b, 0, 0);
  strip.setPixelColor(204 - 11, b, b, 0, 0);
  strip.setPixelColor(180 + 11, b, b, 0, 0);
  strip.setPixelColor(172 - 11, b, b, 0, 0);
  strip.setPixelColor(146 + 11, b, b, 0, 0);
  strip.setPixelColor(142 - 11, b, b, 0, 0);
  strip.setPixelColor(112 + 11, b, b, 0, 0);
  strip.setPixelColor(240 + 10, b, b, 0, 0);
  strip.setPixelColor(238 - 10, b, b, 0, 0);
  strip.setPixelColor(210 + 10, b, b, 0, 0);
  strip.setPixelColor(204 - 10, b, b, 0, 0);
  strip.setPixelColor(180 + 10, b, b, 0, 0);
  strip.setPixelColor(172 - 10, b, b, 0, 0);
  strip.setPixelColor(146 + 10, b, b, 0, 0);
  strip.setPixelColor(142 - 10, b, b, 0, 0);
  strip.setPixelColor(112 + 10, b, b, 0, 0);

  for (int i = 0; i < 12; i ++)
  {
    strip.setPixelColor(240 + i, b, b, 0, 0);
    strip.setPixelColor(238 - i, b, b, 0, 0);
    strip.setPixelColor(210 + i, b, b, 0, 0);
    strip.setPixelColor(204 - i, b, b, 0, 0);
    strip.setPixelColor(180 + i, b, b, 0, 0);
    strip.setPixelColor(172 - i, b, b, 0, 0);
    strip.setPixelColor(146 + i, b, b, 0, 0);
    strip.setPixelColor(142 - i, b, b, 0, 0);
    strip.setPixelColor(112 + i, b, b, 0, 0);

    strip.setPixelColor(178 + i, 0, 0, 0, 0);
    strip.setPixelColor(174 - i, 0, 0, 0, 0);
    strip.setPixelColor(144 + i, 0, 0, 0, 0);
    strip.setPixelColor(144 - i, 0, 0, 0, 0);
    strip.setPixelColor(110 + i, 0, 0, 0, 0);
    if (i > 1)
    {
      strip.setPixelColor(238 + i, 0, 0, 0, 0);
      strip.setPixelColor(240 - i, 0, 0, 0, 0);
      strip.setPixelColor(208 + i, 0, 0, 0, 0);
      strip.setPixelColor(206 - i, 0, 0, 0, 0);
    }

    strip.show();
    delay(80);

  }
}
void setup() {
  Serial.begin(115200);

#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  radio.begin();

  // Set the PA Level low to prevent power supply related issues since this is a
  // getting_started sketch, and the likelihood of close proximity of the devices. RF24_PA_MAX is default.
  radio.setPALevel(RF24_PA_LOW);

  // Open a writing and reading pipe on each radio, with opposite addresses
  if (radioNumber) {
    radio.openWritingPipe(addresses[1]);
    radio.openReadingPipe(1, addresses[0]);
  } else {
    radio.openWritingPipe(addresses[0]);
    radio.openReadingPipe(1, addresses[1]);
  }

  // Start the radio listening for data
  radio.startListening();
  strip.begin();
  strip.show();
}

void loop() {




  /****************** Pong Back Role ***************************/


    unsigned long got_time;
unsigned long rec=2;
    if ( radio.available()) {
      // Variable for the received timestamp
      while (radio.available()) {                                   // While there is data ready
        radio.read( &got_time, sizeof(unsigned long) );             // Get the payload
      }

      radio.stopListening();                                        // First, stop listening so we can talk
      radio.write( &rec, sizeof(unsigned long) );              // Send the final one back.
      radio.startListening();                                       // Now, resume listening so we catch the next packets.
      Serial.print(F("Sent response "));
      Serial.println(got_time);
      if (got_time == 49)
      {
        digitalWrite(2, HIGH);
      }
      switch (got_time) {
        case 49:
          //do something when var equals 1
          analogWrite(4,255);
          delay(2000);
          digitalWrite(4,0);
          Serial.println("door");
          delay(2000);
          break;
        case 50:
          //do something when var equals 2
          turnl();
          break;
        case 51:
          //do something when var equals 2
          offp();
          break;
        default:
          // if nothing else matches, do the default
          // default is optional
          break;
      }
      got_time=0;
    }
  




  /****************** Change Roles via Serial Commands ***************************/

  if ( Serial.available() )
  {
    char c = toupper(Serial.read());
    if ( c == 'T' && role == 0 ) {
      Serial.println(F("*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK"));
      role = 1;                  // Become the primary transmitter (ping out)

    } else if ( c == 'R' && role == 1 ) {
      Serial.println(F("*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK"));
      role = 0;                // Become the primary receiver (pong back)
      radio.startListening();

    }
  }


} // Loop

Credits

Sahil Parikh
2 projects • 9 followers
I'm a junior​ in Mechanical Engineering at Penn State
Contact

Comments

Please log in or sign up to comment.