symp
Symp
TECHGEEK RC HOBBYIST WANDERLUST

Joel George Alex

Basic Info About Me

symp

Hi, It's me Joel george Alex.I am an Electrical Engineer graduated from Mahatma gandhi University and currently employed in Kerala startup mission as Junior Engineer. I am a tech enthusiast and find fabacademy as my best opportunity to mingle with techgeeks and expand my knowledge.

  • Name

    Joel george alex

  • Age

    25 Years

  • Country

    India

  • Hometown

    Kottayam, Kerala

Student Agreement

The Fab Academy is responsible for:

  • Teaching principles and practices of digital fabrication
  • Arranging lectures, recitations, meetings, and events for the class
  • Evaluating and providing feedback on student work
  • Offering clear standards for completing assignments
  • Certifying and archiving student progress
  • Supervising class preparation
  • Reviewing prospective students, instructors, and labs
  • Providing central staff and infrastructure for students, instructors, and labs
  • Fund-raising for costs not covered by student tuition
  • Managing and reporting on the program’s finances, results, and impacts
  • Publicizing the program
  • Promoting a respectful environment free of harassment and discrimination
  • I am a Fab Academy student, responsible for:

  • Attending class lectures and participating in reviews
  • Developing and documenting projects assigned to introduce and demonstrate skills
  • Honestly reporting on my work
  • Working safely
  • Leaving workspaces in the same (or better) condition than I found them
  • Participating in the upkeep of my lab
  • Ensuring that my tuition to cover local and central class costs is covered
  • Promoting a respectful environment free of harassment and discrimination
Signed by committing this file in my repository,
Joel George Alex

Week Assignments

Weekly Assigments for the class of Fabacademy 2019

symp

WEEK 1 - Principles & Practices

symp

WEEK 2 - Learning basics of html & git

symp

WEEK 3 - Computer aided design

symp

WEEK 4 - Computer controlled cutting

symp

WEEK 5 - Electronics Production

symp

WEEK 6- 3D Printing and scanning

symp

WEEK 7 - Electronics Design

symp

WEEK 8 - Computer controlled cutting

symp

WEEK 9 - Embedded programming

symp

WEEK 10 - Moulding & Casting

symp

WEEK 11 - Input Devices

symp

WEEK 12 - Output Devices

symp

WEEK 13 - Applications & Implications

symp

WEEK 14 - Networking & Communications

symp

WEEK 15 - Mechanical Design

symp

WEEK 16 - Interfacing & Application programming

symp

WEEK 17 - Machine Design

symp

WEEK 18 - Wild card week

symp

WEEK 19 - Invention, Intellectual property, and Income

Final project

symp

VTOL PLANE (VERTICAL TAKEOFF AND LANDING PLANE)

Vertical takeoff and landing (VTOL) aircraft include fixed-wing aircraft that can hover, take off and land vertically, as well as helicopters and other aircraft with powered rotors, such as tiltrotors. My intention is to replicate the design and build a bicopter VTOL with two number of propellers at the sides. The angle of the rotor will be controlled by a tilting mechanism. The tilting mechanism will be having a servo motor and BLDC motor combined by a 3D printed structure.

Advantages : Requires only small area for take off and landing. Could land at our point of interest. Longer flight times

Disadvantages : Complex design

.

Requirements for the project

  • Design of Structure -Foam sheet, 3D printed internal airfoil structure,internal aluminium reinforcement
  • Tilting mechanism with servo motor and BLDC motor assembly
  • Flight control board,electronic speed controller for BLDC motor
  • BLDC motor,servo motor, Propellers

.

Alternate project

symp

I have an alternate project in my mind, an owl running on google assistant/alexa, which works as our personal assistant by interacting with each other. The design details are mentioned in week 6

.

.

OWL ASSISTANT - MEDUSSA

.

My first task was to design the shape of the head that will look similar to an owl, i used the awesome fusion 360 for the same

.

1. Draw an arc with support lines as below:
symp

.

.

2. Revolve the surface with revolve command:
symp

.

.

3. Make a plane at an angle with the origin ,draw spheres on this plane. Mirror the same sphere at the other side
symp

.

.

4. Subtract the two bodies from the main body
symp

.

.

5. Draw a nose as below by drawing a rhombus and circle and then using the 'loft' command.;
symp

.

.

6. Shift the nose to required position by move command;
symp

.

.

7. Draw the eye brow as below;
symp

.

.

8. Mirror the eye brows and draw circle for eyes. Final sketch is obtained as below:
symp

.

.

9. Open the cura software and load the .stl file

.

In an earlier week i had printed an owl that with the ultimaker 2+, but since i decided to reduce the size there was a need to 3d print the same with reduced size.But to my fate the 3d printer ultimaker just failed at the moment of printing. Since none of the other printers were working fine, i had decided to print it on the custom printer made by fab colleague akhil josephakhil joseph . The features i liked most about the printer is that it was made within 600 dollars and he had incorporated features like power fail resume support which i haven't seen in any high cost printers. He is also trying to add features such as giving different colours at different stages of printing,and also producing sounds for the same. Since i had no other option i decided to give it a try.

.

.

A grass hopper somehow managed to malfunction our ultimaker

.

symp

.

.

Custom 3d printer configurations

.

symp

.

symp

.

.

Custom 3d printer by akhil joseph

.

symp

.

.

OUTPUT 3D OBJECT- with minor issues the printing came out to be fine

.

symp

Next step was to have a body that could accomodate the head and to have movements that could mimic the wing movements. I have tried somany designs like below for the same

.

symp

.

.

symp

.

But the issue was that i was not able to get satisfaction with the wing movements. So i decided to have a solution for the same. Later on googling i found out that the strandbeest mechanism can mimic any kind of living creature movements, so i decided to give it a try.

.

symp

.

I added some wings and tested the overall look on a basic structure, i simulated the same as below

.

The movement seemed fine, so i decided to work on the same, like giving outer body,wings,base for the body, front body , back body to support the wing structure

.

.

Processes involved in designing the owl

.

Next step was to design the board for making the owl work. Since i needed to use IFTT and alexa for triggering actions i needed something to communicate with internet. So i decided to make a wfi module with esp8266 chip . I designed the same on eagle as below

.

symp

.

.

symp

.

.

ESP 8266 WIFI Module after soldering

.

.

symp

.

symp

.

.

symp

.

.

symp

.

.

symp

.

.

symp

.

.

symp

.

.

symp

.

.

Neopixel ring after soldering in vinyl cut pcb

.

Next step was to have make neopixel ring inorder to paste it to the eye. I used vinyl pcb for making the same. I drew it on eagle using neopixel library

.

.

symp

.

Below program was tested for checking the circuit using FTDI pins

.

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// Released under the GPLv3 license to match the rest of the
// Adafruit NeoPixel library

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

// Which pin on the Arduino is connected to the NeoPixels?
#define PIN 14 // On Trinket or Gemma, suggest changing this to 1

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 6// Popular NeoPixel ring size

// When setting up the NeoPixel library, we tell it how many pixels,
// and which pin to use to send signals. Note that for older NeoPixel
// strips you might need to change the third parameter -- see the
// strandtest example for more information on possible values.
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels

void setup() {
  // These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
  // Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // END of Trinket-specific code.

  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
}

void loop() {
  pixels.clear(); // Set all pixel colors to 'off'

  // The first NeoPixel in a strand is #0, second is 1, all the way up
  // to the count of pixels minus one.
  for(int i=0; i<NUMPIXELS; i++) { // For each pixel...

    // pixels.Color() takes RGB values, from 0,0,0 up to 255,255,255
    // Here we're using a moderately bright green color:
    pixels.setPixelColor(i, pixels.Color(0, 150, 0));

    pixels.show();   // Send the updated pixel colors to the hardware.

    delay(DELAYVAL); // Pause before next pass through loop
  }
}

.

symp

.

.

.

Testing of neopixel ring

.

.

symp

.

.

Since the eye design came out to be fine, i decided to laser cut the wings and supports

.

symp

.

.

symp

.

.

Assembled wing parts

.

symp

.

.

Assembled owl without front body

.

symp

.

.

Sample program for testing the neo pixel eye

.

#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

#define WIFI_SSID "KERALA STARTUP MISSION FABLAB"
#define WIFI_PASS "INNOVATE@KTIZ"

#define MQTT_SERV "io.adafruit.com"
#define MQTT_PORT 1883
#define MQTT_NAME "joelgeorgealex"
#define MQTT_PASS "415cc6fc28b94af7a36ef066ed310b65"

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

// Which pin on the Arduino is connected to the NeoPixels?
#define PIN        14 // On Trinket or Gemma, suggest changing this to 1

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 6 // Popular NeoPixel ring size

// When setting up the NeoPixel library, we tell it how many pixels,
// and which pin to use to send signals. Note that for older NeoPixel
// strips you might need to change the third parameter -- see the
// strandtest example for more information on possible values.
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 50 // Time (in milliseconds) to pause between pixels


//Set up MQTT and WiFi clients
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS);

//Set up the feed you're subscribing to
Adafruit_MQTT_Subscribe onoff = Adafruit_MQTT_Subscribe(&mqtt, MQTT_NAME "/f/onoff");


void setup()
{
  Serial.begin(9600);

  //Connect to WiFi
  Serial.print("\n\nConnecting Wifi... ");
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
  }

  Serial.println("OK!");

  //Subscribe to the onoff feed
  mqtt.subscribe(&onoff);

  pinMode(14, OUTPUT);
  //  digitalWrite(14, HIGH);


  // END of Trinket-specific code.

  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
}
int flag = 0;


void loop()
{
  MQTT_connect();

  //Read from our subscription queue until we run out, or
  //wait up to 5 seconds for subscription to update
  Adafruit_MQTT_Subscribe * subscription;
  while ((subscription = mqtt.readSubscription(5000)))
  {
    //If we're in here, a subscription updated...
    if (subscription == &onoff)
    {
      //Print the new value to the serial monitor
      Serial.print("onoff: ");
      Serial.println((char*) onoff.lastread);

      //If the new value is  "ON", turn the light on.
      //Otherwise, turn it off.
      if (!strcmp((char*) onoff.lastread, "ON"))
      {

        do {
          if ((subscription = mqtt.readSubscription(5000))) {
            if (subscription == &onoff)
            {
              //Print the new value to the serial monitor
              Serial.print("onoff: ");
              Serial.println((char*) onoff.lastread);

              //If the new value is  "ON", turn the light on.
              //Otherwise, turn it off.
              if (!strcmp((char*) onoff.lastread, "OFF"))
              {
                flag = 1;
                pixels.setPixelColor(1, pixels.Color(255, 0, 0));
                pixels.setPixelColor(2, pixels.Color(255, 0, 0));
                pixels.setPixelColor(3, pixels.Color(255, 0, 0));
                pixels.setPixelColor(4, pixels.Color(255, 0, 0));
                pixels.setPixelColor(5, pixels.Color(255, 0, 0));
                pixels.setPixelColor(0, pixels.Color(255, 0, 0));

                pixels.show();   // Send the updated pixel colors to the hardware.
                Serial.println("Stop Dance");
                break;

              }
            }
          }
          pixels.clear(); // Set all pixel colors to 'off'

          // The first NeoPixel in a strand is #0, second is 1, all the way up
          // to the count of pixels minus one.
          for (int i = 0; i < NUMPIXELS; i++) { // For each pixel...

            // pixels.Color() takes RGB values, from 0,0,0 up to 255,255,255
            // Here we're using a moderately bright green color:
            pixels.setPixelColor(i, pixels.Color(0, 150, 0));

            pixels.show();   // Send the updated pixel colors to the hardware.

            // delay(DELAYVAL); // Pause before next pass through loop
            if (!strcmp((char*) onoff.lastread, "OFF")) {

              flag = 1;
              Serial.println("Stop Dance");
              break;
              if ((subscription = mqtt.readSubscription(5000))) {
                if (subscription == &onoff)
                {
                  //Print the new value to the serial monitor
                  Serial.print("onoff: ");
                  Serial.println((char*) onoff.lastread);

                  //If the new value is  "ON", turn the light on.
                  //Otherwise, turn it off.
                  if (!strcmp((char*) onoff.lastread, "OFF"))
                  {
                    flag = 1;
                   
                    pixels.setPixelColor(1, pixels.Color(255, 0, 0));
                    pixels.setPixelColor(1, pixels.Color(0, 0, 0));
                    pixels.setPixelColor(2, pixels.Color(255, 0, 0));
                     pixels.setPixelColor(2, pixels.Color(0, 0, 0));
                    pixels.setPixelColor(3, pixels.Color(255, 0, 0));
                    pixels.setPixelColor(3, pixels.Color(0, 0, 0));
                    pixels.setPixelColor(4, pixels.Color(255, 0, 0));
                    pixels.setPixelColor(4, pixels.Color(0, 0, 0));
                    pixels.setPixelColor(5, pixels.Color(255, 0, 0));
                    pixels.setPixelColor(5, pixels.Color(0, 0, 0));
                     pixels.setPixelColor(0, pixels.Color(255, 0, 0));
                     pixels.setPixelColor(0, pixels.Color(0, 0, 0));


                    pixels.show();   // Send the updated pixel colors to the hardware.

                    pixels.show();   // Send the updated pixel colors to the hardware.
                    Serial.println("Stop Dance");
                    break;

                  }
                }
              }
            }
            delay(DELAYVAL);
          }

        }
        while (!strcmp((char*) onoff.lastread, "ON"));
      }

      else
      {
        Serial.println("Stop Dance");
      }
    }
  }

  // ping the server to keep the mqtt connection alive
  if (!mqtt.ping())
  {
    mqtt.disconnect();
  }
}


/***************************************************
  Adafruit MQTT Library ESP8266 Example

  Must use ESP8266 Arduino from:
    https://github.com/esp8266/Arduino

  Works great with Adafruit's Huzzah ESP board & Feather
  ----> https://www.adafruit.com/product/2471
  ----> https://www.adafruit.com/products/2821

  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Tony DiCola for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 ****************************************************/

void MQTT_connect()
{
  int8_t ret;

  // Stop if already connected.
  if (mqtt.connected())
  {
    return;
  }

  Serial.print("Connecting to MQTT... ");

  uint8_t retries = 3;
  while ((ret = mqtt.connect()) != 0) // connect will return 0 for connected
  {
    Serial.println(mqtt.connectErrorString(ret));
    Serial.println("Retrying MQTT connection in 5 seconds...");
    mqtt.disconnect();
    delay(5000);  // wait 5 seconds
    retries--;
    if (retries == 0)
    {
      // basically die and wait for WDT to reset me
      while (1);
    }
  }
  Serial.println("MQTT Connected!");
}
	

.

.

symp

.

.

Project video

.