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
WEEK 1 - Principles & Practices
WEEK 2 - Learning basics of html & git
WEEK 3 - Computer aided design
WEEK 4 - Computer controlled cutting
WEEK 5 - Electronics Production
WEEK 6- 3D Printing and scanning
WEEK 7 - Electronics Design
WEEK 8 - Computer controlled cutting
WEEK 9 - Embedded programming
WEEK 10 - Moulding & Casting
WEEK 11 - Input Devices
WEEK 12 - Output Devices
WEEK 13 - Applications & Implications
WEEK 14 - Networking & Communications
WEEK 15 - Mechanical Design
WEEK 16 - Interfacing & Application programming
WEEK 17 - Machine Design
WEEK 18 - Wild card week
WEEK 19 - Invention, Intellectual property, and Income
Final project
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
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:
.
.
2. Revolve the surface with revolve command:
.
.
3. Make a plane at an angle with the origin ,draw spheres on this plane. Mirror the same sphere at the other side
.
.
4. Subtract the two bodies from the main body
.
.
5. Draw a nose as below by drawing a rhombus and circle and then using the 'loft' command.;
.
.
6. Shift the nose to required position by move command;
.
.
7. Draw the eye brow as below;
.
.
8. Mirror the eye brows and draw circle for eyes. Final sketch is obtained as below:
.
.
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
.
.
.
Custom 3d printer configurations
.
.
.
.
Custom 3d printer by akhil joseph
.
.
.
OUTPUT 3D OBJECT- with minor issues the printing came out to be fine
.
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
.
.
.
.
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.
.
.
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
.
.
.
.
.
ESP 8266 WIFI Module after soldering
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
.
.
.
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
}
}
.
.
.
.
Testing of neopixel ring
.
.
.
.
Since the eye design came out to be fine, i decided to laser cut the wings and supports
.
.
.
.
.
Assembled wing parts
.
.
.
Assembled owl without front body
.
.
.
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!");
}