Hi,
My name is Fenil and this website will be the documentation of my journey through the Fab Academy course which consists of multiple assignments and a final project. A little introduction about me, I am from Gujarat, India. My area of interests includes eating and sleeping, been doing that of 22 years and still look forward to it every single day! I am doing the Fab Academy course from Vigyan Ashram. I was doing Bachelor of Commerce and completed my college in March 2020. For a long time I had interest in makingthingsI come across. I used to watch a lot of Do it yourself videos online and try to replicate them. I then found this guy called Shane who makes all kind of stuff, like he thinks of an idea and then proceeds to actually make it happen. I was highly motivated and wanted to achieve that kind of skills. However, I didn't have proper knowledge or resourse to execute any project on my own so it would take longer period of time than one would require(not to mention all the frustration). I talked to my sister about this and she recommended me to enroll for the Fab Academy course and so, here i am, experiencing the glimpse of digital fabrication in the hope that I will have a better, broader approach for my future projects.
For my final project, i decided to continue the project i was working on earlier. The old project had a lot of things to improve and since i
decided to continue working on that project, it was
going to cover a lot of aspect of the fab academy like electronics production, electronics design, embedded programming, networking and
communication, interface and application programming, 3d printing, laser cutting and so on. I'll explain about the final project im detail
In public places like bus station/railway station, i have observed a lot of times that due to wear and tear, the taps/faucets starts to leak
and due to the ignorance or the lack of communication, lots of water is already wasted before someone repair/replaces the tap,
Also a lot of times, people leave the taps fully or partially open after using it,
So i wanted to make a device that not only indicates when there is running water but also gives you the data about how much water is already
being wasted.
In July 2017, i participated in a program called "Startup weekend" where you had to pitch an idea and work on that idea in a group and
there will be judges to select best of the ideas and all of this within 72 hours. My idea didn't get selected, however i decided to work onto
the idea. I had the ieda but no knowledge how to execute it so i shared the idea with my friend, Mithilesh Barasara and he help me with making
custom PCB and programming. I'll explain in brief what work was done on the project at that time,
We had to differenciate between usage and leakage of water and for that we used a LDR sensor. Near the washbasin, we need to install a LDR sensor
(receiver) on one end and on the other end install a light(transmitter). When someone is using the tap, they'll be standing in between the LDR sensor
and the light and hence the reading of the LDR sensor will be low and when no one is standing in between the LDR sensor and the light, the light
will fall onto the LDR sensor and
the readings of the LDR sensor will be high. We used these high and low values to detect human presensre.
To detect the running water, we were checking the resistivity/DC conductivity of one of the digital pin with the help of a 10KOhms and 15KOhms
resistors in this arrangement,
So we had to attach something that has two electrodes onto the screw connectors and when the water falls onto that two electrodes, the
resistivity will decrease/conductivity
will increase and vice-a-versa.
We used separate LED's that will turn on after the stream and drop exceeds certain value and separate push button to turn them off.
We used a LCD without I2C module to display the data in the form of stream and drops.
We used a Arduino Nano as the microcontroller. Here is how our PCB looked like,
This is the code we used,
you can copy the code from here too.
Here is a brief explaination about how the code works:
The microcontroller checks the DC conductivity/resistivity every 80/100 miliseconds. Since we were using the digitalRead
,if the
two electrodes get connected with the water the readings of that digital pin will be high and vice-a-versa. When checking if the readings
of that digital pin is high, the microcontroller will start increasing the value of "m".
If the value of "m" is constantly increasing without breaking or we can say that if the state of the digital pins is constantly HIGH then the
microcontroller will increment "+1" in stream after the value of "m" reaches 80. If the value of "m" stops increasing in between or we can say
that if the state of the digital pin is sometimes HIGH and sometimes LOW then the microcontroller will increment "+1" in drop after the
value of "m" reaches 150. Basically the
digital pin 7(input pin of the two resistor) checks every 80-100 miliseconds if there the two electrodes of the screw connectror is connected.
If it is connected, esp32 will start increasing
the value of "m" by +1 every 80-100 miliseconds.
There is line for reset cycle which is set to 90 which only afftects the situation of stream, so after incrementing +1 in the stream the value of
"m" will be 0 again. The new cycle of "m" will again start increasing after the value of reset cycle has reached 90.
The above three situation will occur only if the vlaue of the LDR sensor/photoresistor is above a certain value. Let say when you flash a light
onto the LDR, the value reaches above 200 and when there is no light, the value is around 80. So the value "m" will only increase if the value is
above 200 otherwise only the reset cycle will be in action. Since the value of "m" won't increase, there will be no incrementing in drop
or stream.
When the incremented value of drop and stream reaches a certain number, the microcontroller will turn on the LED dedicated to drop and stream
and we can turn it off without resetting, with the help of two push button dedicated to drop and stream.
Here is the PCB and the code in action,
For some reason the LCD is not working now and also the LDR is giving strange readings so i temporarily set the value of photoresistor to >10
so that microcontroller will increase the value of "m"
With everything ready and functioning all i had to do was attach two electrodes onto the screw connector that can detect the running water, especially
in the form of drops. I came up with an idea to use two piece of mesh wire and separate them with a thin sheet of MDF and connect
them onto the screw connector. When i tested it, the water either doesn't make any contatct between the two mesh wire or when it does, it gets
stuck between the mesh wire and the contact won't break until given external jerk.
We don't want the water to get stuck between two mesh wire or the microcontroller will keep incrementing +1 in the stream even if there is no
running water. So i had to find something that had two electrodes which will be connected when the water falls onto the it and also the
water should not get stuck on that. Figuring that out was
way less intriguing so i stopped working on that one and took a new project thinking i will work
onto the two electrodes later. AFter my other project was completed I took a break for a while and then joined the Fab Acacdemy. So here
is all the things i did with the continuation of detecting water leakage project project during my fab academy journey,
In the first assignment of Principles and Practices where we had to decide our potential final project, I pitched the same problem statement
to my instructors. Here were my expectations from the final project,
- it should give separate data of leaking drops and stream.
- the data should show how much water is wasted from the leak(calculated measurement). INstead of just showing numbers for drop and stream,
it should show give data like X amount of water is wasted in form of drop/stream or the water is being wated for X amount of time.
- The data for drop and stream should be sent through wifi, either on the thrid part website like firebase/thingiverse or on the custom made
application.
During the output device week, after exploring a lot of output devices i decided to use 0.96 inch oled in my final project to show the data of
drops and stream. I also decided to use a LED and buzzer to give instant feedback if the incremented value of drop and stream exceeds a certain
value and also assign separate push button so that one can turn the LED/buzzer off.
During the input device week, i tried using PIR motion sensor and ultrasonic sensor to detect the human presense. I also tried using step
response and Control Board with LM393 Voltage Comparator with the printed circuit board with comb like pattern that i designed, to detect
the running water.
Since i wanted to send the data of the the drops and stream through wifi, I decided to use esp32. However
my local instructor suggested me that I don't need an IC with in-built wifi to sent the data, i can instead use a wifi module esp8266-01 with
any IC.
With all the components decided, next step was to select the IC which was compatible for my final project. During the output device week i had
make a board with attiny44 IC where i was not able to use the LCD and i was not even able to complie the code of OLED with attiny1614 board selected
so i knew what IC i was NOT going to use. After exploring this page a bit i decided to use attiny1614 IC for my final project:
http://academy.cba.mit.edu/classes/embedded_programming/index.html . I didn't thought very thoroughly before selecting the IC, all i
considered was 14 number of pins and 16KB flash memory and thought it would be enough since there were a lot of documentations regarding
people using this IC.
It was during the Input device week that i designed my final project board. I had tried all the devices that i was going to use in my final
project with Arduino UNO but i still hadn't decided whether i wanted to use the PIR motion sensor or ultrasonic sensor to detect the human
presense or whether i wanted to use step response or Control Board with LM393 Voltage Comparator to detect the running water. So while designing
the schematic, i gave the provision for step response as well as the Control Board with LM393 Voltage Comparator. I assigned four pins
to detect the human presense so that i can use either of the PIR sensor or ultrasonic sensor. Here is how my schematic looked like,
Here is how my board looked like,
Here is how my final project board looked like after milling,
Here is how my final project board looked like after soldering,
during testing all the components, i accidentally removed two header pins along with the traces. So i had to short the traces of the UPDI pin
onto the unwanted copper pad and soldered a screw connector there,
After the final project board was ready, it was time to make a programmer through which i can program my final project board. I first tried
to make the programmer with SAMD11C ic but i was not able to install the bootloader. I then decided to make another programmer with FT230XS
ic which is pre-programmed. Here is how my programmer looked like,
You'll find more details about designing the board in input device week's tab.
After the final project board and the programmer was ready, it was time to upload a program to see if both the board works and then test
all the components. I uploaded a example code-blink from the arduino IDE and it was uploaded successfully in the first try,
With the final project board and programmer working i started testing all the components,
Here is the code i used to display text in the OLED with the attiny1614 board,
you can copy the code from here too.
and here is the outcome of the code,
I tested ultrasonic sensor and PIR sensor one by one. However i found the PIR sensor to be very unreliable. It sometimes detect even the
slightest of the movement instantly and sometimes it just won't give any feedback. Sometimes after detecting the movement, it will give some
feedback very late so i was more comfortable with selecting the ultrasonic sensor as the device to detect the human presense.
Here is the code i used for the ultrasonic sensor in action with attiny1614,
you can copy the code from here too.
and here is the outcome of the code,
In the step response there are two electrodes. A series of pulses is sent through the TX electrode and the RX electrode will be connected
between two resistors, one for pull-up and the other for pull-down and to an analog input.It can be used to calculate the value
of force, weight, resistance. You can read more about step response from here: http://fabacademy.org/2020/labs/leon/students/adrian-torres/adrianino.html#step
So as as you put the weight onto the two electrodes, the value increases and if you just connect the two electrodes, there will be huge change
in it's values. With the same principle i designed a replica of the rain drop sensor where there are two set of traces,
The two pins from this pad is connected to the RX and TX of the step response and when the water will fall onto the pad, making the connection
between the two traces there will be changes in the value and using that readings we can define whethere there is running water or not.
Here is the code i used for step response with the attiny1614 board,
you can copy the code from here too.
and here is the outcome of the code,
As you can see in the video, the readings before any contact was around 24000 which jumperd to 32000 when water dropped onto the pad making
connection between two traces.
The YL-69 module or the Control Board with LM393 Voltage Comparator measures the resistivity or DC conductivity. If you see the YL-69 module,
it has GND-VCC-AO(analog)-DO(difital) pins on one end and two electrodes on the other end. When the two electrodes gets into contact, the resistivity
decreases. I attached the PCB with two sets of traces that i designed with the two electrodes pin on the YL-69 module.
At the time of recording, i was using the AO(analog pin) of the module so that when the water makes contact between the two traces, you can
see the analog reading instead of just 1 and 0 or high and low.
Here is the code i used for the YL-69 module with the attiny1614 board,
you can copy the code from here too.
and here is the outcome of the code,
The readings you see in the serial monitor is the value of resistivity. So when there was no contact between the traces, the values were 1023
which decreased to around 520 when the water drop made the contact between two traces. We can use these readings to detect the running
water.
In the step response, i just need two resistor to detect the running water while on the other hand i need a separate YL-69 module to detect the
running water, so i decided to use the step response for my final project.
You'll find the details regarding these devices in detail in input devices tab.
I first tried to blink a LED with the esp8266-01 module with the Arduio UNO board. With the help of blynk cloud, i was able to control the LED
through the blynk app and server. However there were some issues with installing te AT firmware and i found that the responce of the LED with
the button in the blynk app/server was not very responsive.
Here is the code i used for esp8266-01 with the Arduino UNO board,
you can copy the code from here too.
and here is the outcome of the code with esp8266-01 module,
I shared all these things with my other local instructor and as per his instructions, i made a board with esp8266-12e IC which would act as
a wifi module. Here is how my schematic and board file for the esp8266-12e board looked like,
I used the same code for the esp8266-12e board that i used for the esp8266-01 module
and here is the outcome of the code with es8266-12e board that i made,
I was eble to turn the led on and off with the blynk app/server but the results were same thati got from the esp8266-01 module where the led was
not very responsive. When my local instructor selected attiny1614 as the board in the arduino IDE and compiled the sketch, it was then that i
was being told that the sketch for blinking led itself was taking 99% of the storage,
After spending a month worth of time behing making the attiny1614 board, programmer with SAMD11C and FT230XS IC, testing all the components onto
the attiny1614 board and lastly using esp8266-01 module and then making board with esp8266-12e IC that acts as a wifi module, i had no option
other than switching the IC of my final project board from attiny1614 to esp32 because i didn't wat to comproise with sending the data of
drops and stream through wifi.
You'll find the details regarding the esp8266-01 module and esp8266-12e board in detain in interface and application programming tab.
I first made the schematic with all the components required to make the echo board for esp32. This is the schematic of the components
required to make the echo board for esp32,
You can find the detail of the echo board of the esp32 and all the other IC's here: http://academy.cba.mit.edu/classes/embedded_programming/index.html
After the components required to make the echo board was added, i started giving the provision for the components required for my final project
like ultrasonic sensor, OLED, LED's, buzzer, push button and lastly step response. This time, unlike the step response in the attiny1614 board
where there were 4 pins: RX-TX-GND-GND i gave the provision for just 2 pins RX and TX. However instead of using 1x2 header pin, i used 2x2
header pins for better adhesion. Also, since esp32's operating voltage is 3.3V, i gave the provision for 2 jumpers. If i short the jumper with
3.3V jumper the step response will operate on 3.3V and if I short 5V jumpoer the step response will operate on 5V. You can see the provivion
i gave inthe schematic given below. However, when the board was milled and soldered, i didn't need to short any of the jumper because i was getting
the same reading whether i short the 5V jumper, whether i short 3.3V jumper or whether i don't short any of the jumper. Here is how my
schematic looked like,
I had to change the properties of the esp32 library. Without doing that if you mill the PCB with 1/64 bit, it will short all the pads of the IC.
Here is how i changed the property of the esp32 library,
- click on library > open library
- click on esp32 library and click on open,
- click on ESP-WROOM-32 under device and then click on the footprint buttonon the top. A menuwill pop-up, under the Footprints tab, click on
ESP-WROOM-32 and click on ok,
You'll be redirected to the footprint page. IF you click on any pads of the IC you'll see the SMD size on the left panel and if you right click
on any pads and click on property you'll see the same dimensionin the SMD size,
We need to change the SMD size to 66x32. To do that search change smd in the search bar and select 66x32,
You can again search change smd to confirm that you have selected 66x32,
After selecting 66x32 as the smd size, click on each pads one by one. AFter doing that again check the property of the pad and you'll see
the size of the smd changed,
Here is the video of me changing the smd/pad size of esp32 to 66x32,
After the smd size has changed, save the library with a different name,
Now add the esp32 component fromthe new library you just made. To check whether the component is frrom the new library, double click on the
name under "parts" and inside the property you'll see the library name,
You can download the library for esp32 with the SMD size changed to 66x32 from here,
esp32 library 66x32 SMD size
and this is how my esp32 board looks like,
Design file for my final project board,
final project board
There were some mistakes i made while making the esp32 board,
- I gave the proviison for the LED's on pin GPIO34 and GPIO35 which are input only pins,
- I gave provision for just one push button for controlling the LED for drop and stream,
- I gave the provision for the LED's, buzzer, push button and reset button and mounted the same ONTO the final project board instead of giving provision
for the header pins or screw connector because ultimately i wanted to have the the push buttons for reset and turning the LED/buzzer off onto
the casing of the
final project board since opening the case every time someone wants to turn off the LED/buzzer and reset the board with the SMD push buttons
onto the board would be very inconvinient.
This is how my board looked like after milling, (forgot to take any video)
Here are all the components used for making the final project board,
1x esp32 WROOM IC
1x AMS1117 3.3V regulator
1x slide switch
2x push button
5x LED
2x 0ohms resistor
2x 1Mohm resistor
2x 49.9ohms resistor(i used 49.9ohms resistor for the power led)
1x 10Kohm resistor
1x 1x6 female header pin
2x 2x2 male header pin
2x 1x4 male header pin
1x 1x4 female header pin(to directly mount the buzzer onto the header pin)
Here is how myboard looked like after solering all the components,
I again tested all the devices mentioned above with the esp32 board with the same code, and evey componnet seemed to work fine, execpt the
OLED. When i uploaded the code i used for my attiny1614 board there was no display of text in the OLED. I looked up online for some tutorial
and discovered this code and when i uploaded that code i was successfully able to display the text onto the OLED. Here is the code i used,
you can copy the code from here too.
Source for the code: https://randomnerdtutorials.com/guide-for-oled-display-with-arduino/
I had to make/find something that can be attached onto the two electrodes of the YL-69 soil moisture module or on the RX-TX pins of the
step response. So when the water falls onto the water sensor, it will change the values and using that readings we can define if there is
presense of water or not.
As mentioned above, before joining the fab academy,
I came up with an idea to use two piece of mesh wire and separate them with a thin sheet of MDF. When i tested it, the water either doesn't
make any contatc between the two mesh wire or when it does, it gets
stuck between the mesh wire and the contact won't break until given external jerk.
because of this, the microcontroller will keep incrementing +1 in the stream even though there is no running water if the water is stuck between
two wire mesh. SO i had to come up something which has two electrodes which gets connected if the water falls on it AND the water should slip away
and not get stuck.
So in the input device week, i made a replica of the rain drop sensor where there are two sets of traces and i designed in a way where
even the tiniest of the drop will connect the two traces. Here is the image of the pad i made,
I attached the two pins of the pad with the RX-TX pins of the step response and uploaded the step response code mentioned above and here
are the results alongwith the serial monitor readings,
If you see the video, the value before the water falls onto the pad were around 100K and when the water drop falls onto the pad making the contact
between two traces, it reached its maximum value of 137045. Since the water drop was not sliding down the pad without external jerk, it was constantly
showing the maximum value which was something i did't want.
Since the pad needed an external jerk for the water drop to slide, i thought that attaching a vibration motor might help. We had KG160 vibration motor
in our inventory which works well woth 3.3V. So i attached the motor behind the pad and was manually controllling the motor by giving
3.3V power supply from arduino UNO. Here is the outcome,
As you see in the video, the vibration motor was not helping in sliding the water drop. The water drop was not sliding whether it was on the trace
or in between two trace or whether it was getting any external jerk from the vibration motor or not.
I saw a few videos on youtube regarding the rain drop sensor, the replica of which i made. However the PCB they were using seemed to have a very
smooth surface that hardly any water was remaining on the pad. SO i ordered one to test it. By the time it was delivered to me, i came up
with another, better idea.
I wanted a water sensor where there is no insulation below. In the pad i made and the pad that were in the market had insulation below the
conductive traces and because of that, the water needs to slid all the way down the pad.
I then came up with the idea of using header pins. So i took one set of male header pins, soldered every pins together, took another set
of male header pin, soldered every pin together and arranged both set of pins in this way, and glued them with Fevikwik
So one set of the male header pin will act as RX and other set will act as TX. It was vey fussy and a lot of space between pins were blocked
because of the glue. So i first tried to test if the water slides between them and as i thought, the water was getting stuck between them and
not sliding.
My local instructor then suggested that use only one set of male header pin and solder every alternative pins together. So solder every odd
pins together and solder every even pins together. The odd pins will act as one electrode/RX and the even pins will act as other electrode/TX.
In our inventory we had 20mm long male header pins, so i solder every alternative pins together just like i was being told. Here is how the
header pin looked like,
I then connected one odd and one even pin on the RX-TX pin of the step response and tested the code with the header pin directly under the tap
and here are the results,
If you see the video, the header pin was able to detect roughly 5/10 water drops. I thought that the reason why it is not detecting few water
drops is because my hands weren't stable and it would compensate when i fix the header pin under the tap but nonetheless this was a progress.
After I got better results with the header pins i was searching online if i can find a longer header pin because the one i tested on was 20mm
and it was too short to mount onto the tap. I didn't find any header pins longer than 20mm, however i realised that i can find
screw connector with same 2.54mm pitch as the male header pin.
I searched online and found a 12 pin screw connector so i ordered two of them. I used needles for the screw connectors. The needles i found
were around 1.2mm in diameter which is twice compared to the male header pin but when i connect the needles into the screw connector, the
distance between two screw connector was around 55mm so i was getting a longer area forthe drop/stream to fall.
While testing the header pin, i was not sure whether the drop falling through the pins or half of the drop not getting detected was because of
my unstable hands or not and so i made a casing for the screw connector/water sensor which was suppose to directly mount onto the tap,
When i mounted the casing onto the tap and tested, i realized that since the diameter of the needle was twice compared to the male header pin
the drops were not slipping through the needles. Unfortunately i don't have any clips to show that.
I then purchase the needles with 0.6mm thickness but i was not able to find the needle with the same length as the 1.2mm diameter one. So now
the didtance between two screw connector was around 35mm.
Since the distance between the screw connectpr reduced, i had to change the design of the bottom of the casing and also enlarge the slot
on the top of the casing. One of my colleague, Kiran Wakchaure, helped me with designing the bottom of the case and my other colleague helped
me with enlarging the slot with the help of grinder.
After the casing was ready, i mounted the casing onto the tap and tested it and just like the header pins, the water drop was slipping through
the needles most of the time and also around 5/10 water drops were getting detected. Here is the clip for that,
After all the components were tested individually with the esp32 board, it was now time to add the logic and test all the component at the
same time. As mentioned above, before joining the fab academy, i had the idea of how i want the peoject to work and my friend Mithilesh
Barasara helped me with designing the custom through hole PCB and programming.
My local instructor Suhas Labade suggested to modify that code instead of writing the whole code from scratch. Here are all the differences
between the old board with Arduino nano and the new board with esp32 IC,
- in the old board we used LDR/photoresistor to detect human presense. In the new board we are using ultrasonic sensor for detecting
human presense.
- in the old board we used LCD without I2C module, for showing the data of drop and stream. In the new board we are using OLED for showing the
data of drop and stream.
- in the old board we used two resistors to detect the runnin water. In the new board we were using step response. However, while programming and
testing the code, we were having difficulty with getting the value of m and incrementing +1s in the stream and drop so we decided to switch to
using YL-69 soil moisture module and then we were getting proper readings. We were using the digital pin of the YL-69 soil moisture module
and similarly using the digitalRead
command in the sketch.
This is the code for the old version of this project,
you can copy the code from here too.
My local instructor helped me with modifying the code for the esp32 board. Here is the first version of the code,
you can copy the code from here too.
Here is a brief explaination about how the code works,
We set the ultrasonic range to 10cm. So if the readings of the ultrasonic sensor is less than 10cm, esp32 won't increase the value of "m".
Here is what the numbers in serial monitor means,
- when the two electrodes of the YL-69 module gets connected, the value of "m" will start increasing, if the readings of ultrasonic sensor is more than
the value set in the sketch.
- the value beside the value of "m" is the reset cycle. The reset cycle which is set to 60 only afftects the situation of stream, so after
incrementing +1 in the stream the value of
"m" will be 0 again. The new cycle of "m" will again start increasing after the value of reset cycle has reached 60.
- the value on the second line is the resistivity of the soil moisture module. Since i have connected the digital pin of the soil moisture,
the seria monitor will show the number 1 is there is no connection and will show number 0 if there is connection betwen the two electrodes.
- the value on the third line is the readings of the ultrasonic sensor
- the value on the fourth line is the incremented value of stream
- the value on the fifth line is the incremented value of drop
if the reading of the ultrasonic sensor is more than 10cm or more than the value set in the sketch AND the two electrodes of the soil moisture
moldule gets connected, esp32 will start increasing the value of "m". If the value of "m" is constantly increasing or if the resistivity of the
soil moisture module is constantly 0 then the esp32 will increment +1 in the stream after the value of "m" has reached 50. Basically the
GPIO14 checks every 80-100 miliseconds if there the two electrodes of the YL-69 is connected. If it is connected, esp32 will start increasing
the value of "m" by +1 every 80-100 miliseconds.
if the reading of the ultrasonic sensor is more than 10cm or more than the value set in the sketch AND the two electrodes of the soil moisture
moldule gets connected, esp32 will start increasing the value of "m". If the value of "m" stops increasing in between or if the resistivity of
the soil moisture module is switching between 1 and 0 then the esp32 will increment +1 in the drop after the value of "m" has reached 50.
The readings of the ultrasomic sensor is not constantly updated. So if the readings of the ultarsonic sensor is more than 10cm or the value set
in the sketch and then a person/object is placed then the value of the ultrasonic sensor will be updated after value of "m" is reset. The value
of "m" can be reset either by incrementing +1 in stream or drop. Here is the outcome of both the situation,
Here are some heroshots of the setup while recording all the above video,
My instructor did try to send the data of the drops and stream to the thingspeak through wifi, but we were having some issue of the delay. Instead
of GPIO14 pin(digital pin of YL-69 attached on IO14) checking every 80-100 miliseconds if the two electrodes of the YL-69 is connected, it was
checking every 4000-5000
milisedconds which was not suitable for detecting the drops. So we decided to continue working on send the data through wifi later.
I wanted to assign separate LED-Buzzer and push button for the drop and stream so that when the incremented value of drop and stream reaches
a certain level the LED-Buzzer will turn on and the push button to turn them off. Now i wanted the LED-Buzzer and the push buttons onto the
casing of the final project board and not ONTO the final project board and so i had to do some modifications on the board. I'll explain in
brief about all the modifications i made,
- Replaced SMD LED's with male header pin, on GPIO 34 and 35
- Replaced 1x4 female header pin which was assigned for buzzer, with 1x4 male header pin.
- Short the traces of reset button with the unwanted pads nearby.
I didn't want to directly solder the wire onto my final project board and that is the reason why i gave/managed to gave the provision for
male header pins for all the 3 push buttons(2 for stream and drop and 1 for reset) and 2 LED-Buzzer, so while wiring i had to solder the LED-buzzer
and push button with the male header pin instead of directly soldering onto the pads on the final project board.
Note that i did the same wiring for the push button that was suppose to fit onto the casing as i did with the SMD push button, but instead of
using 100ohms resistor i used 5.6Kohms resistor as a pull down resistor.
Here is how my final project board looked like after the modifications,
I made a small through hole PCB where i connected 2 set of LED and buzzer parallelly. One set of LED and buzzer for drop and other set of LED
and buzzer for stream,
After the modifications onto the final project were done, so that i can connect the LED-buzzer and push button to turn them off, i made some
changes in the sketch. The first verison of the sketch had the code of lines where the LED-buzzer will turn on after the incremented value of
drop and stream reaches a certain value, but privision of the push button turning the LED off was removed while modifying the code. So i added
that lines and changed some values and changed the names like replaced "m" with water value and this is how the second verison of the code
looks,
you can copy the code from here too.
I defined the value of drop to 2 so the LED-buzzer will turn on after the incremented value of drop reaches 2 and i defined the value of strwam to
3 so the LED-buzzer will turn on after the incremented value of stream reaches 3. Here is me testing the situation of drop,
And here is me testing the situation of stream,
Some more testing and debugging after i gave the wrong connections to the push button,
Some hero shots of the setup and me while testing the sketch,
Earlier i tried to turn off the both the LED-buzzer with just one pudh button, but it was behaving very wierdly,
This is the code i used for controlling both the LED-buzzer with just one push button,
you can copy the code from here too.
Source of the code: https://stackoverflow.com/questions/56712430/how-do-i-tell-the-code-in-arduino-if-i-press-a-button-twice-with-interrupts
What is suppose to happen is that when the push button is pressed once then red led should turn on. When the push button is pressed twice then
green led should turn on. Here is the outcome of the code,
if you see the video you'll observe that sometimes when i press the push button once, green led turns on instead of red led. In the last
the led did behaved like i wanted but i can't afford to have errors so i decided to use separate push buttons for both LED-buzzer.
After the LED-buzzer were turning on after the drop and stream was reaching a define value and i was able to turn off the LED-buzzer with
push buttons too, the only thing that was remaining was to send the data of drop and stream to thingspeak through wifi.
Two of my instructors, Suhas labade and Suvarna Sawant help me with complete programming of sending the data of drops and stream to thingspeak
through wifi. This is the third version of the code where the incremented value of stream and drop is sent to thingspeak after +1 is
incremented to drop or stream,
you can copy the code from here too.
And this is the code in action with the water sensor attached directly under the tap,
After the electronics part was functioning well, it was time do start working on the packaging. I first made the case for the final proeject board
keeping in mind that on the inside of the case i had to put my final project board and YL-69 module and on the outside of the case i have to
fix OLED and the through hole PCB with LED-Buzzer. I first made a design of the case in solidworks and also printed the top part of the case
but before printing the bottom part of the case which was going to take around 20Hours, many of my colleagues commented that the case i made
was unnecessarily bulky. Even i was not happy with the design since a lot of other things were happening along with the designing of the case.
So i re-designed the whole case and was able to print both, the top of the case and the bototm of the case in 14 hours,
While designing the bottom part of the case, i gave the provision for push buttons, female jack for external power supply, slots for the
wire connector to go through, slots for bolts onto which i was going t fix the final project board, since the board didn't had any holes
in it, slot for the FTDI converter to go through and lastly a slot for the nail onto which i was going to hang the case. While assembling the
components i realized that i gave an extra slot for the wire connector and while programming i had to press the reset button sometimes in order
to execute the wifi connection so i had to later drill the hole into the case.
While designing the top part of the case, i gave a slot for the wire connector
that connects the OLED and i gave 2 slots for the signal and ground pins of the two LED0-buzzer. However i did not find the 2mm screw to fit the
OLED and so i used double sided tape to fix the OLED and PCB with LED-buzzer. I also designed a border so that i can cover the OLED and PCB
with some acrylic sheet to save them from dust.
Here is how the bottom part of the case looked like,
after the cases were ready, i just had to assemble everything and do some minor soldering to connect the push buttons, power jack, Oled and
PCB with LED-buzzer,
Here is how the inside of the casing looked like,
tied some thread on the wire for comparatively cleaner look, this photo was cicked later
I did the wiring in a way that i can simply open the case and get the access to the components inside, like using the slide switch while programming,
without needing to disconnect any wire.
And in case i need to remove the top part of the case it could be easily done since i used wire connector for the header pins on the board
and soldered the other end onto the push butotns, oled, power jack and PCB,
Here are some hero shot of the setup,
Here is the video i shot for the presentation showing the working of the system,
Here is my bill of material,
The Bill of material doesn't include,
all the SMD components used for making the esp32 board,
200 grams of filament used for 3D printing,
Acrylic sheet used for making the shield for OLED and LED-Buzzer and for makingthe studs/washer.
You can download the word file for the links of each component from here:
Bill of material
My final project slide,
My final project video,
Thanks to my local instructor, Suhas Labade, for helping me making the presentation slide in the last minute before the presentation.
Thanks to my colleague, Kishor Gaikwad, for helping me editing and compressing the presentation video in the last minute before the presentation.
Drip Irritation by Fenil Chandarana is licensed under Attribution-NonCommercial-NoDerivatives 4.0 International
This project is about detecting water leakage.
when i say detecting water leakage, i have in my mind a specific thing and that is detecting water leakage from taps/faucets (washbasin) in
public places like railway/bus station, school or any institution etc. They generally have single washbasin with multiple taps. The
reason why i want to work on that project is that for countless number of time i have seen leaking tap in public places and every time I spare
few seconds to adjust the tap so that it temporarily stop dripping. But that's not the solution.
If the project goes successful, we can use the same principle on different application, then it won't be restricted just for the washbasin.
<<<---PROBLEM--->>>
As the taps in public places are used regularly, it is bound to diminish over a period of time. What happens after is, the taps starts
leaking in form of drops or sometimes even stream. You might have observed in some taps that the water will keep running if you close the tap
fully, the water will keep running if you have the tap slightly open. So in order to stop the water from running, you have to precisely rotate
the knob in the place which is neither fully closed nor open. Also, due to carelessness, sometimes the taps are kept partially/fully
open by the people.
The project will be effective only if there are these problems,
[1] Ignorance
whoever is in charge of
maintainance of places like railway/bus station or school, doesn't know if there is a leak from the washbasin. However, would have made
efforts to repair the leak.
[2] Lack of communication
some people might observe the leak, but won't know whom to inform. Or even if
informed to any staff, chances are the message won't reach the people incharge of maintainance.
[3] Value of water
none of the below
solution or thoughts would matter if the places doesn't value the water that is being wasted.
<<<---SOLUTION--->>>
This project will only INDICATE you if the water is running. It won't solve the issue.
[1] bifurcate between usage and leakage
We can put some kind of motion detector near washbasin(the "M" in thge sketch
indicate motion sensor) So if there is any movement near washbasin when water is running that means the taps is in use. When the water is
running from the taps and no movement is detected, that means water is leaking
[2] detecting the running water
there has to be some kind of sensor or thing, which i dont know now so i have named it X, which will detect the running water.
that X can be placed at,
1- water tank
OR
2- pipeline tha supplies water to the taps
OR
3- under each tap
OR
4- outlet.
so if we decide to put the X in water tank, we can use some kind of water level sensor. If we decide to put the sensor or X under
each tap then we can use some
kind of rain drop sensor, where the water will fall on the X, completing the circuit.
However, if we put the X under the tap, then the feedback/response will be insant.
If we put the X
inside water tank then depending upon the size of tank, a lot of water will already be wasted by the time the sensor gives any input after the
water level is dropped to a certain level.
As of now i don't know how am i going to detect the running water.
so combining these two we can detect the leakage from the taps, as in if the water is running and there is no movement detected, then the
controller will know it is a leakage
and notify about the same
<<<---EXPECTATION FROM THIS PROJECT--->>>
- it should give separate data of leaking drops and stream
- the data should show how much water is wasted from the leak(calculated measurement)
- smart indication, should notify via notification
<<<---CHALLENGES--->>>
- detecting the drops
- making the project compact
- making it at cheap cost
- maintainance after the product is ready
cost and maintainance could be a great reason for public place or institution to reject installing the project.
I am attaching photo of a 3D design too, just in case
I have worked on the project before and it was a long time ago, back then i was successfully able to detect the stream, but detecting the
drops was not very accurate. So we can say that was the first spiral. In the second spiral, i will try to detect drops and make the project
a bit smart by using different components and ultimately have the peoject in working condition. In the third spiral, if the project is very
bulky, i will try to make it compact. If the cost of the project will be high, i will try to switch component so that the cost is reduced.
Earlier I had discussion with my local instructor regarding how we are going to execute the final project. I was being adviced by my local
instructor as well as global instrucrors(during the Global Open Time) to work on the parts of the project during the course of weekly
assignment and at the time of final project, all I need to do is assemble everything i had done during the course of weekly assignment instead
of starting to work on the project at the end, after the weekly assighnments are over.
So we planned what we will explore during the weekly assignments,
In the Input Devices week - April 20
we will explore all the input devices that might be used in the final project.
The input devices include buttons, Ultrasonic sensor(to detect the movement), rain drop sensor(to detect the drops/stream). My instructor told
me that we will use the pre-build ultrasonic sensor,
however we will build our version of the rain drop sensor. To make the rain drop sensor, we need to design the comb like structure. Now we
can make that structure onto the PCB, we can make wire mesh like structure with the copper tape using vinyl cutter or with the conductive
therad using sewing machine.
In the Output Devices week - March 30
we will explore all the output devices that might be used in the final project.
The output device include LEDs, buzzer, LCD Display.
In the Embedded Programming week - March 16
we will learn how to program the micro-controller board.
In the interface and application programming week - May 04
we will explore how we can get all the feedback/notification from the micro-controller board via dedicated application
in the network and communication week - April 27
we will explore how can we setup wireless communication between the input and output devices
Holder for the sensors
to make the holder for the rain drop sensor or the ultrasonic sensor, we will use 3D printed model.
Case for microcontroller
to make the case for the micro-controller, we will use laser cutted acrylic sheets.
this part of the section is about how i made my HTML website or rather how i edited a free ready-made templates of website available
online.
in the fab academy it is necessary to document all your work during weekly assignments and final project. In order to document, we need to
have a website. I do had an option to make changes in the markdown template provided by the academy, it probably would have saved me a lot
of frustration and time, however i decided to explore HTML.
<<<---DOWNLOAD A TEMPLATE--->>>
download a free/paid HTML template from any website online. sites like templatemo.com and free-css.com provide live demo feature so you can
first see for yourself how the website looks/works and then download the template, it is generally in zip file format. So a template is
folder containing all the files necessary for a website to function. In my case the folder will have a .HTML file, .CSS file, .js file and a
folder containing all the images, videos or documents that are inside the website.
this is the link of the original template i downloaded and edited: https://startbootstrap.com/previews/freelancer
<<<---MAKE CHANGES IN THE WEBSITE--->>>
extract the zip file and open the .HTML file and it will open your website locally. To make changes in the .HTML, .CSS or .js file, it is
recommended to use a source-code editor. You can find a lot of source-code editor like sublime text, notepad++, however i am using visual
code studio. Link for visual studio code(vscode): https://code.visualstudio.com/
[1] Find and replace
open the .HTML, .CSS and .js with vs code
let say you want to change title of the website from "start bootstrap" to "your name"
simply search the name in the vs code using ctrl+f, edit the text and save it. refresh your local website and you'll beable to see the
changes
let's apply the same with "portfolio""about""contact"
[2] Inspect
let say you want to change the background color of the website
rightclick and click on inspect or use f12 key
press ctrl+shift+c or click on the top-left box. Hover your mouse over the background where you wish to change the color
you will see the color code starting with # or you'll see the RGB value. Try searching the #color code in vs code, if you can't find that
convert the #color into RGB value and then search it. Replace the #color code or RGB value with your desired color.
link for the htmlcolorcodes: https://htmlcolorcodes.com/
let say you want to increase the space/margin of the line and star
press ctrl+shift+c or click on the top-left box. Click on the star and line box. On right hand side under style, you'll see style.css code
lines
click on the first style.css file and a new window will pop-up highlighting a line.
you can change the value in the inspect and see what changes are reflected but it will only be temporary. Once you refresh all the changes
will undo. Also i have observed many times that making changes in the inspect is not always same as making changes in .html file. So
what i do is copy the highlighted line and search that in vscode and make the changes in .html file and not in inspect.
you'll need to edit line of code>see if desired changes are reflected in the website, so basically lot of trial and errors. So to prevent any
mess ups, whenever my website reach the point where the website has made a lot of sucessful changes and looks better than before, I use
to make a copy of file as a backup, in case i can't revert the changes.
The git lab will take care of maintaining history of different version once the website is pushed in the repository(more on that later)
[3] W3School
if you want to add some icons or button, just search the keywords like "add next/previous button in html" and open the w3school link.
You'll be provided with lines of code for .HTML file as well as .CSS file and sometimes .js file too, depending what you are adding
copy that code and paste into respective files. Sometime you need to click on the tab "Try it yourself" to get copy the lines of code.
Note that the line of code will be empty at some places for you to add the href="#" to link
the .HTML page. So make that necessary addition/modification. However in my case there is only one .HTML page and the weeky assignments
are in form of pop-upwindow type tabs. so i had to do trial and error to give them the path required to open a tab whenever i click on
next/previous button.
table for changes in original template
this part of the section is about how to push a website into the git repository. But before jumping into it, let me explain in brief what
version control is, that way you will understand it better what the repository is. Suppose there are three person working on a project
where they are suppose to write number from 1 to 10. Between them, they have a repository, which is like a storage for storing the file
containing number 1 to 10. Person A starts working on the project and writes number 1-2-3 on a file and uploads it to the respository. After
few days, Person B downloads the file from repository containing number 1-2-3 and adds number
4-5-6 and Person C downloads the file containing number 1-2-3-4-5-6 and adds number 7-8-9-10. This is what a repository is, everyone with the
access to the respository make changes in the project by uploading and downloading the files to/from repository .
Now let say that Person A decides to make changes in the project. He now wants to write 1-2-3-A-B-C instead of 1-2-3-4-5-6-7-8-9-10. So instead
of deleting the whole thing, what Person A can do is download the file containin number 1-2-3 from the history and add the letters A-B-C. This
is what verison control is. The file with number 1-2-3 is version 1, the file with number 1-2-3-4-5-6 is version 2 and so on. In the gitlab,
record of every changes you make in the repository remains in the history and you can download the previous version files from the history at
anytime, because you cannot delete the history, which has its own advantages and disadvantages.
<<<---SSH key--->>>
first step is to add a system generated SSH key into your gitlab account AND configure your username and email address into your system
have this things ready,
- setup your account and repository in gitlab. (i already had my account and repository set by Julian Gallimore)
- download gitbash: https://git-scm.com/downloads
- download visual studio code: https://code.visualstudio.com/ (or any Source-code editor).
The reaon why I am using vscode is because of the extension called "Live Server" You can install it by searching for live server in extensions
tab and then install it. After you have installed the live server, go to the Explorer tab and add the folder where you have your website/repository.
Next step is to click on "Go live" tab at the bottom or Right click and select "open with live server". You'll be directed to the default
internet browser and in this way, when you save/CTRL+S while editing in html/css/js, the internet browser will automatically refresh and you
don't need to manually refresh it every time to see the changes in your website.
[1] Generating the SSH key
ssh-keygen -t rsa -C "fenil.c9@gmail.com" -b 4096
Run the above line of code in gitbash, after putting your gitlab email address in between double inverted commas.
[2] File path for saving SSH key
by default the file path will be C:\Users\"system's name" however you can change that. Hit enter
you can add paraphrase, however i have kept the paraphrase empty for the next two steps
[3] adding the key into your gitlab account
after confirming the paraphrase, a key will be generated
you cannot just select that key and copy-paste it. Run this line of code to copy the SSH key: cat ~/.ssh/id_rsa.pub | clip
just hit paste in the SSH key box and click on add key. URL for SSH key: https://gitlab.fabcloud.org/-/profile/keys
to confirm whether your system is lnked with gitlab account, run this line of code: ssh -T git@gitlab.fabcloud.org. Type "yes" and hit
enter if asked any confirmation.If your username pops up in the message, your system is linked with the git lab account.
[3] confirm your username and email address
run this line of code one by one,
git config --global user.name "fenil.chandarana"
git config --global user.email "fenil.c9@gmail.com"
there wil be no message for confirmation
<<<---Clone your repository--->>>
[1] set command directory
before cloning, set your directory where you want to clone your website: cd “F:\docs\fab academy 2022\website
while running this code, if i pasted the whole line of code it will show error "bash: cd: too many arguements". So in order to sucessfully
set my desired sdirectory I had to type cd
[2] run the clone repository code
git clone git@gitlab.fabcloud.org:academany/fabacademy/2022/labs/vigyanashram/students/fenil-chandarana.git
you will get the "clone with SSH" link from here
now your website is clone into the file path you entered above.
<<<---Push my HTML website--->>>
The below method is how to replace the mkdocs website with html(or vice-a-versa)
[1] set the ommand directory
set the directory where you have cloned your repository: “F:\docs\fab academy 2022\website\fenil-chandarana”
[2] pull the website
git pull
[3] add changes
apart from ".git" folder and ".gitignore" text document, delete all the files
copy your html website files and paste into your cloned folder
check size of your cloned folder
git add --all
[4] commit changes
commit to the changes you have made.
git commit -m"replaced the markdown website with the html website i have edited"
[5] Push website
git push
<<<---Add yaml file--->>>
since we have deleted the yaml file from the markdown website, we have to add the yaml file into repository as well as clone folder so that
changes will be reflected into browser
[1] add yaml file into your repository
click on "+sign">"new file" beside your name.
select template type ".gitlab-ci.yml" and "HTML" in "apply a template"
hit commit changes
[2] add aml file into cloned folder
repeat the,
git pull
git add --all
git commit -m"message of edit"
git push
This week i learned how you can download a free template for your website and later how you can make changes in the website according to your desire. I also learned about version control and gitlab, like how you can push your website online after making changes into your local repository.
‹ ›In this week of computer aided design, we had to explore a lot of software revolving mainly around designing and editing. It was not possible for me to make something from each software, like edit a full video from olive, make 3D model from fusion-freecad-solidworks, make a 2D art from inkscape. So what i did was use as many tools from the software as i could, so i get the hang of software and I am considering exploring a few software in more depth in the future.
In each assignment there will be multiple photos and in some cases videos too. It will take a long amount of time to load the
website if you directly push high resolution image/video. It is therefore recommended to compress the image/video before pushing your website.
You can use high resolution image/video where there are a lot of details to show.
<<<---IMAGE COMPRESSION--->>>
for compressing image i am using xnconvert software. Link for the software: https://www.xnview.com/en/xnconvert/#downloads
The interface of the software is quite simple. In the input menu, you can add multiple images to compress at a time and you have option
to compress whole folder of photos. You can also set view as
In the output menu, you can set the file path where you want to export the compressed images.
Under
in the seting tab, select the file type you want to export and set the quality of the compressed image. Higher the quality, larger the file
size and compression will be small. And vice-a-versa
add all the files/folder you want to compress in the input menu, and hit convert.
here is the size of folder before and after compression.
you can twaek the quality and keep compressing until you get your desired image size and quality
<<<---VIDEO COMPRESSION--->>>
for compressing videos, i am using handbrake. Link for handbrake: https://handbrake.fr/
The interface of the the handbrake is quite simple and easy to understand. You can upload single video file or folder containing video
files.
For testing i am currently using a single video game clip. After uploading the video you can set the format of the output file under summary
menu.
under the video menu you can set the quality of the compressed video. Lower the quality of the compressed video lower will be size of video
file and vice-a-versa.
you can set the outpur path of the compressed file at the bottom "save as" file and if you want a particular output path for compressing the
videos in future too, you can set that in the "default path" inside Tools>preference
Here is the size of video file before and after compression
you can twaek the quality and keep compressing until you get your desired video size and quality.
For windows 8 users and above, if you want to take a plain screenshot of your whole screen, you can press
"windows" key + "print screen" key and your system will take a screenshot of your screen. These sceenshot are usually saved in your
"documents" folder.
in order to document, you'll need to capture a lot of photos/screesnhot of the work you're doing. Sometimes you need to make some arrows or
draw a box or add a text in the image to explain what the image is about. To make that simple edits, i am using lightshot software.
Link for downlading lightshot: https://app.prntscr.com/en/index.html
After installing lightshot two things will happen:
1- lightshot will be automatically added to your startup program. You can disable it by going to task manager>startup.
2- the "printscreen" key will be assigned to the software, meaning everytime you press "printscreen" key, the lightshot interface will appear.
In order to disable lightshot, end the task from task manager>background process. In order to again assign "printscreen" button, just open
the lightshot software.
<<<---LIGHTSHOT INTERFACE--->>>
when you press "printscreen" key, a simple interface will open, suggesting you to select area.You can select the are of the screen you want
to capture,
if you want to capture whole screen, select any amount of area and then double-click inside the selected area.
the tools in lightshot in quiet self-explainatory.There is pen, line,arrow, rectangle,highlighter and text. You can try them and play
around
scroll down to increase the size and scroll up to decrease the size
After selecting any tool or right after using any tool, you can use scrool wheel to set the size of the line/arrow.
after the selecting the area or editing, press ctrl+s to save the screenshot. It will generally foung in Documents>lightshot
<<<---VIDEO CAPTURING--->>>
In order to document your work, sometimes you need to show videos
I am using OBS(open broadcaster software) which is open-source software. Link for OBS: https://obsproject.com/
when you'll open the OBS for the first time it'll look something like this,
under the source tab, click on "+" sign and click on display capture.
you can see the preview of what the OBS will capture on the first half of the screen. Click on start recording to start recording
click on the OBS icon inside the hidden icons and the OBS will hide from the taskbar
<<<---VIDEO EDITING--->>>
For editing the videos I am using olive, it has very limited features however it will do the job of editing videos for documentation.
You can download olive from here: https://olivevideoeditor.org/download.php
I downloaded the unsupported version.
this is what the interface of olive looks like
you can add files to edit in the project panel from files>import files
these are the things i am going to do,
1 merge two videos and add a Audio file separated by unlinking and cutting the third video
3 add a transition
4 add a subtitle
[1] merge two video
just drag and drop the files you want to edit in the timeline
using the snap tool, make sure there is no space between two videos
unlink the audio file from the first two video
remember the timestamp of the portion you want the audio from. Place the red arrow on the timeline and with the help of razer tool,
split the video. Make sure the razor icon is inside the video timeline.
delete the extra video. You can use ripple delete option so that when you split the video, there will be no space in between because two
video will automatically span together.
place the audio in different line wherever you want to place
[2] add transition
in the transition tab inside tools, select cross disolve. You can use the transition at the end or start of the clip. So click on corss
disolve and drag the area which you want to cover in the transition
[3] add subtitle
place the red pin where you can to add subtitle. From the tool box, click on "+">title
drag the box to the area which you want to cover in subtitle. Note that do not add the text filter onto the video timeline but onto different
timeline. Double click on that yellow text box to edit text and position the subtitle box.
reference link: https://www.youtube.com/watch?v=UJFkPjHxccc
i have a bit of experience in Solidworks, however this is the first time i am using fusion 360. The interface and method
of sketching/designing is quite different from solidworks, it did't took a long time to adapt to a new software
The first step is to save the file
create component
if the created component test2 is created under component test1, then drag the test2 component and place onto saved file name.
the circle beside the component is to activate/deactivate component.
<<<---EXTRUDE BOSS--->>>
select any component and create new sketch under "create" tab
draw any sketch and set the dimension., If you don not want to set the dimension right after sketch is drawn, hit escape key and set the
dimension later using sketch dimension
feature under "sketch" tab. if you do not want to search for feature, just hit "s" key and a search window will pop, search the feature from
there
hit finish sketch once you are done making the sketch. Then under solid tab,use the command "extrude" and set the distance. you can even
drag the component manually. Again you can use "s" key to search the extrude command.
after extruding you'll see that under the component there are two sub-folder, sketches inside which there will be all the sketch under that
componment and bodies where there will be all the bodies under that component. You can edit feature/body from there and you can also edit
from the bottom tab. Right click and you will have option on edit feature/sketch.
Under document settings, you can set the unit of measurement.
<<<---EXTRUDE CUT--->>>
to draw a sketch you'll need either plane or a surface. In m y case i am drawing on a surface, click on surface and "create sketch"
instead of drawing another circle i am just using offset feature. You can use the button to manually set the offset
use same extrude feature but instead of pulling it in the same direction, pust in the opposite direction to make a cut. You can also set the
"operation" to cut. Instead of calculating the distance or setting absurd amount of distance to cut, set the extent type to "to object" and
click on the surface where you want to end the extrude cut.
<<<---FILLET--->>>
after selecting "fillet" feature, select the edges where you want smooth edges and set the radius
<<<---DRAFT AND RELATION/CONSTRAINTS--->>>
it is great practice to make your sketches fuly defined. Fully defined means your sketch is fully constrained and nothing can be change
accidentally. You can'y have your sketch moving freely all over the canvas with no dimensions set. So here i am constraining the sketch ihave
drawn.
First set the dimension, i selected the two perpendicual line of square and set equal relation using constraint.
Second, limit
the vertical movement by drawing a construction line connecting midpoint of square and midpoint of left line and set horizantal relation from
constraint.
Third, limit the horizantal movement, for that i selected midpoint of bottom line and midpoint of square and gave them
vertical relation using constraint.
draft basically means the end of the extude is either shrinked(-) or expanded(+). While extruding(join) set the value in the "taper angle"
<<<---REVOLVE--->>>
draw a line around which yu want to revolve the shape. And then draw the shape you want to revolve.
in revolve feature, select the shape for profile and select line for axis
<<<---SWEEP--->>>
create path
go to construct>plane along the path. Select the path to create plane
create sketch with the help of created plane and inside that create profile
in sweep feature, select line for path and select circle for profile
i wanted to explore the freecad to see how is this open-source software is compared to the commercial ones
the steps before starting to sketch is similar to that in fusion 360:
save the file first
under the part design mode: Create body>create sketch>select plane.
exit the sketch by hitting escape or one of the button on the top. Click on pad under sketch tool or on the icon
<<<---PAD AND POCKET--->>>
click on any surface and under task, click on create sketch. Draw any shape. I i tried to give constraints pther than dimension, but coul't
find any midpoint and also was't able to select the edge, like you do in solidworks and fusion
exit sketch and select pocket
add fillet
<<<---MIRROR FEATURE--->>>
draw object on the side
i observed that there is no plane in the middle so i created the plane
i was't able to give reference by selecting two surface, so i manually added the dimesion to set the plane
i then used the mirror feature after selecting the plane and surface to mirror, but wasn't successful
the plane that i created works well though
<<<---REVOLVE FEATURE--->>>
draw a sketch,exit the sketch and select revolution
set degrees you want to revolve
Before beginning of the fab academy course, i had a better hand at solidworks however i decided to explore something new so i practiced and went
with fusion 360 to design every model during the fab academy. But, during the final project, circumstances were such that i eventually went back
to my comfort zone and designed the cases for the components and project board in solidworks.
<<<---ULTRASONIC CASE--->>>
I designed the case for ultrasonic sensor as a single part,
and then with the help of reference geometry, i created a plane in the middle of the model and made a rectangle,
with the help of "Extruded cut" i cut one side of the model and exported the design as STL file,
in 2d design there is vector design - made of lines where the object won't distort no mater how much you zoom and there is
raster - made of pixels where the object will distort if you zoom after a certain point
There are no pointers for the description of inkscape,
Draw any object from the tool bar on the left, and left click on any color option on the bottom to fill the color
click once and you will get option to re-size
click again and you will get option to change shape of the object
double click andyou'll be able to give rounded corner
There changing of shape differers, depending on the type of object
you can change the fill and stroke of any object, fill is the inside color and stroke is the outline of the object
to add a color to the stroke, do "Shift+letft click"
you can tweak the settings as per your desire
you can also add gradient
you can change the positiion of the object, like lift the object from the bottom and vice-a-versa, using the four tabs on the top
every time you make any change in object, inscape will remenber and will set that as standard for fututre, you can undo the colors from the
"fill and stroke" tab on the top, if you want to undo the shape, you have to do it by clicking twice(not double click)
you can group multiple object so that any effect you give to one object, all the other object will be affected.
to temporarily make any changes, double click>make changes like change the position/shape/color>double click and now the group is updated
when you draw a path like line,you can change the orientation by just clicking and draging where you want to changet he shape. A line will
appear on the "node" you can play with them to change the shape
you can also add a node by selecting "edit path by node" and double-clicking on the edge
you can't do the same on an object, so you convert any object to path
then you can treat any object as a path, tweak the shape by using node and also add a node
you can draw lines and add curve to them using bezier tool
you can apply the same principle for tracing an image. To insert image, go to File>Import
instead of tracing the edges manually, you can use trace bitmap option and inkscape will do that for you, however you have to tweak the
settings in order to get desired results
you can save to svg file from "save as" to save the project, so that you can make changes in the future. you can also export the file
in image format
to export, set the output path and select what you want in the image. Page means anything drawn in the box, drawing means everything you
have drawn, selection means the objects selected
I was more comfortable in solidworks so I designed a stand for Sandwich, to prevent Sandwich from condensation
blender has a lot of application however i have only explored one aspect that is simulation or physics properties
The highlighted tools are the one i am going to use the most
on left there is select, move, rotate, scale tools. On the bottom there is frame and pause/play, forward backward button. On right there is
viewpoint and at the bottom right there are features like physics property, material property etc
<<<---RIGID BODY--->>>
select the object and set the rigid body type as "active"
make duplicates by pressing Shift+D and make a wall. You can adjust the position before confirming by hitting enter.
in order to avoid al the block from falling downward, make a plane at the bottom. Set the rigid body type as "passive"
add uv spehere and scale and move however you wish. Place it perpendicular to the wall. Create animation of sphere passing through the wall
by creating first key at the start position and second key at the end position. You can set the number of frames too.
select the sphere and set the rigid body type as "active" and check the "animated" button
here is the result
<<<---CLOTH--->>>
add a sphere and a plane and set them at a distance
set the plane as cloth from Physics property
set the sphere as collision
If you directly hit play, the plane won't behave as a cloth. So inside edit mode,right-click on plane and increase number of cuts.
here is the result
<<<---FLOW--->>>
add a cube. add a sphere. size them and place the sphere inside the cube so that it doesn't touch the cube. You select 3D view: Wireframe
from top.
select sphere and under physics property select below settings
select cube and under physics property select below settings
this will be the result after clicking "bake data"
enable mesh and click on"bake mesh"
here is the result
freecad
fusion
inkscape
solidworks
This week i explored a bunch of editin and design softwares. There are few software that i like and use them on a regular basis and they are
lightshot, handbrake, xnconvert, fusion, solidworks and inkscape. I like soliworks because i ahve done a lot of practice, i have made 95/100 models from this website:
https://caddexpert.com/solidworks-catia-nx-autocad-3d-drawings-practice-books-100-pdf/ .
There is almost nothing I don't like about solidworks apart from the fact that it is very expensive software.
I like fusion because it is free(the education one) and designing a part is fun, however the assembling in fusion is something i don't like.
Software like lightshot, xnconvert, handbrake are bery easy to use and does it's job. On the other hand, there are softwares that i explored
just for the sake of the assignment and probably never going to use and those software are olive, freecad, blender and specially GIMP! The reason
why I don't like these softwares is because performing even the simplest of the task is a headache.
the group assignment was for laser cutting
in the group assignment we were told to find out Focus, Speed, Power required for different material and find out kerf after the material is
cut.
a brief explaination about kerf:
in the laser cutting machine, the materials are cut with the laser beam. This laser beam burns the
material as it passes, however due to compressor, the material won't catch fire. In the process of cutting, there is loss of material and
that will reflect in the actual dimensions. For example, you designed a square with 5mmx5mm dimension and cut that square in laser cutting
machine. Now the acutual dimension of the square won't be 5mmx5mm, because of loss of material in the process of cutting or sometimes due
to inacuracy in movement of laser header. Let's assume you got the dimension 4.6mmx4.6mm whenyou measured the square. That 0.4mm is the kerf.
And so next time when you want your piece with 5mmx5mm dimension,you will add kerf to the dimension so you will give 5.4mmx5.4mm dimension
while designing.
i guess the reason behind the group assignment is to first get your hands-on the laser cutting machine/ get to know how the machine works. the
group assignment was divided in 3 teams and the teams were assigned different material to work on. Me and Jaydeep were assigned to work on
cardboard/corrugated sheet. In the laser cutting machine there are different processing mode/ different ways you can use laser cutting machine
like cutting, engraving, dots and pen
Between me and Jyaydeep, I was working on cutting and dots.
a brief description about the machine:
In the lab we have SIL CO2 laser cutting machine with which we can cut cardboard, plywood, MDF, acralyic or any soft material. We cannot cut
any hard material. It will be a bad idea to use any reflective material, no matter how hard or soft it is, it wil be hazardous if the laser is
reflected anywhere else than the material you want to cut.
There is 3 concentric tubes inside the laser cutting machine. In the inner most tube, With the help of electricity and CO2, laser is generated
and on both end of the tube there is reflective mirrors. After the laser bean is generated, it will contunuously bounce on both the mirrors
and at one point, it will reach the nozzle/header with the help of 3 mirrors set at 45° angle,
inside the nozzle/header, there is a concave lens that focuses the laser upto a dot.
outside the innermost tube, there is a second tube insie which water is constantly running with the help of cooler(CW-5200) to cool down the
laser tube. And the third tube is a protective cover.
You can operate the machine with these buttons,
i haven't used the rest of the buttons, will probably update once i use them.
before you start cutting make sure these three things are turned on,
COOLER. We were told to check the temperature of the cooler and that it must be below 30°
COMPRESSOR. If the compressor is off, the material you want to cut will start to ignite
EXHAUST. exhaust helps extracting the smoke out of the machine so make sure it is on.
TURN OFF THE LASER. The laser won't start unless you press the start button, however it is a great habbit to always turn the laser off whenever
you open the lid, either to remove or insert the material.
apart from this, try your best to remain alive in one piece.
We were using 3mm cardboard. Regardless of the material you are using, height between the header/nozzle and the material should be 8mm in our
machine's case. The height varies from machine to machine though. You need to adjust the bed level by placing something between nozzle and
the material, and it should be 8mm thick.
So the focus will be8mm.
<<<---DOTS--->>>
Now before designing making pattern with dots, I decided first see how
will the cardboard react with different speed and power for dots mode. I took the reference of this and designed a file
(https://www.instructables.com/Test-your-material-to-determine-laser-speed-and-po/)
You can use any software to design your model, just make sure there is option to export your file in .dxf format. It is good practice to
save the original file of your model alongwith the .dxf file, just in case you need to make changes later.
For laser cutting, I am using RDWorks software. So open the .dxf file with RDWorks. rdworks will automatically ungroup every shape in your
model, so you can group them from edit>group
In rdworks, you can also assign different speed and power to different shapes by assigning them a unique color. So select a shape, assign
the shape a color, double click on the color that appear on the tool box on right side and assign that color power, speed and the processing
mode.
This was the result
Even with 20% power and 80 ms speed the laser went through and all the holes were cut nicely. So obviuosly the speed below 80ms and power
above 20% will have nicely cut holes. therefore i wanted to see how high can i set the speed with 20% power to cut the holes. So i designed
the another file and printed them with 20% power and diferent speed I also set different dot intervals.
it was concluded that with 20% power, you can set speed upto 220 ms and will get fine holes
To test if the parameters will work in large files i,
downloaded a file and traced the edge in the inkscape. You have to play with the settings to get better tracing. Again save the original
file and export another file as .dxf format
I cleaned the drawing by removing unwanted shapes from rdworks and assigned the color for cutting and dots and set the parameters accordingly.
I used 200ms speed for safety.
for some reason, the top of the cardboard had some burnmarks while the bottom one was clean, so i mirrored the drawing and cut it again and
here are the results
(you can mirror the drawing from draw>horz mirror/vert mirror)
if for some reason the alignment in your rdworks and the alignment in the laser cutting machine(preview in the screen or the result after
the cutting is done) is different(mirrored, specifically) have these option checked from config>system settings
<<<---CUT--->>>
i used the same principle from the dots for defining parameter for cutting
designed the file
exported them as .dxf file and in the rdworks assigned different speed to different color that were assigned to different shapes
here are the results
it can be concluded that, if you want to cut with 50ms speed, you'll need to give 70% power. If you want to cut with 40ms you'll need 50% power.
You can use 40% power but you will need to push the piece
About kerfz`,
You will find the kerf value of different material with different speed and power in our group assignment.
reference link: https://www.thingiverse.com/thing:4575909/files
rd works link : https://rdworks.software.informer.com/8.0/
you can see the work of other students on the group assignment here:
https://fabacademy.org/2022/labs/vigyanashram/groupassig/groupassignment1.html
in the individual assignment we were suppose to design and cut something in vinyl cutter
[1] designing
I designed a castle in fusion 360
then i realised that the vinly cutter is going to cut every line and no draw it, so tried to simply it
(haven't traced any image)
i then exported the file as .dxf file and opened in inkscape
i increased the width of the line from fill and stroke menu, Object>fill and stroke
i then again simplified a bit more and gave it a border to easily peel the content off
[1] Setting the machine
before loading the vinyl roll into the machine, do confirm that,
the roller of the machine should be under white strip, or else the machine will show some error
the hinge should be unlocked, or else you won't be able to load the vinyl roll
after loading the vinyl rolll, lock the hinge so that the vinyl won't slip
select the type- roll means full vinyl roll, piece means just a piece of vinyl. If you select the piece, the machine will calculate the
length and width of the paper, and will show error if the size of print/cut is large than the piece of paper. I have tried it but forgot to
document, may be next time.
set the origin
after the origin is set, the the range of cutting will be the point of origin to where the left roller is set.
[1] software to upload the design
we were using a software called mods project, just like python that uses internet browser as a local host, i don't know the term for that.
in the terminal, run these commands
cd Documents/mods
to set the directory where the mods project is installed.
bash mods
to open the software in you browser as local host
right click and select programs>open program>cut(under your machine name)
the interface will look something like this
if you have svg file, upload the file under svg tab
if you have png file, upload the file under png tab
after setting the speed and force hit calculate
enter the name of your USB port in this format: /dev/"devicename"
you can find name of the USB port by running dmesg code in terminal. I wasn't able to run dmesg command after running the bash mods command,
to it is recommended to find the name of the usb port before opening the software
what went good with vinyl cutting
that using the vinyl cutter is finally over and i don't need to use the vinyl cutter for some time. At least not as a complete noob.
what went bad with vinyl cutting
everything
[1] starting with the soft copy part
it took me a couple hourse to design that castle, and in the midway i realised that the machine is going to cut everything that is in the file
and so i had to make some changes there were a couple of glossy vinyl roll, which wasn't giving me good results. For some reason, the machine
was double tracing the design and that too only in glossy vinyl. So i would cut the design with same file and use different vinyl and will get different result
photo of red vinyl i was't able to capture the double tracing situation.
[1] when printing with the svg file, the header(with blade) would move a couple centimeter to the left and then start cutting.
i tried to move the design in one corner of the page, but it was still leaving a lot of space/margin
i then tried to export the design as png format with selection tool and then it was printing right where i set the origin. Do not forget to
select everything you want to cut
[1] after the deging was cut
even after tweaking the force and speed, it wa difficult to peel off the extra vinyl off without accidentally peeling the main design.
SO i had to manually trace each and every line with a pen knife and because of that, the back side of vinylwould tear.
[1] after the design was peeled off
after patiently peeling the unwanted vinyl off the roll, and sticking the main designonto a masking tape, it turned out that the vinyl isn't
very good with sticking onto a cardboard. so if i stick the masking tape onto cardboard (with the vinyl already stuck to the masking tape),
press the masking tape so that the vinyl would stuck onto the cardboard and then finally peel the masking tape off, in the hope that vinyl
would have stuck onto the cardbaord, the vinly just won't stuck onto cardboard. So i had to patiently peel the masking tape off while manually
press every quarter inch of vinyl onto cardboard. Here are the results
in the individual assignment, we were suppose to design and laser cut parametric construction kit which can be assemble in
multiple ways
i focused more on parametric design and ignored the construction kit by using different type of joints. I thought i'll design something so
that the vinyl cutting and laser cutting can be shown on the same thing and so I dsigned jigsaw puzzle pieces
a brief explaination about parametric design:
let's assume that you have 10 different models and you want to make holes of equal dimensions in them. Now instead of giving them dimensions
in number, like 10mm, you can give a name, for example "hole". Now assign that name a number, for example 10mm. You might be thinking why the
extra process of assigning name and not directly giving dimensions number, but suppose you printed/cut the design and the hole is a bit too
big. So if you have assigned the dimension a name, all you need to do is change the dimensions/value of the said name. For example, from Hole=
10mm to Hole=9mm and dimensions of all the 10 holes will change. If you had assigned number as dimensions, you will need to change dimensions
of all the hole one by one. So this process of changing value of one thing due to whcih value of multiple things changes automatically is
called parametric design. You will understand it more clearly if you read description under laser cutting.
for laser cuting i was using fusion 360 for designing and RDWorks to generate toolpath. So i design a sketch/model in fusion, export it in dxf
format and open that with RDWorks to assign your design a color and the color represent speed, power and processing mode. I have explained the
RDWorks software in more detain under the group assignment uunder this week.
I designed the pieces in fusion
i set the parameters for the size of piece, size of circle, distance between the circle and square and tolerance/kerf. The image below of the
parameters table is the final one after making some changes
i then applied that parameters into the design
so after i laser cut the pieces, if the piece are loose or tight,i just need to make changes in the parametric table. For example, after
cutting the piece,if the pieces are loose when aligned, i would know that the size of circle is okay, i just need to tweak the distance and
tolerance/kerf values.
i then exported the design as .dxf format and with the rdworks software i uploaded the design in the laser cutter machine. To upload the design
in the laser cutter machine, connect your system wth the laser cutting machine via USB cable and hit the download button under the
"laser work" tab
here is the result after cutitng the cardboard pieces
Then i wanted to explore different type of joints, so i again designed them in fusion with the help of parametric design
here is the parametric table
so if i try the joint and it is loose or tight, i just need to change the width and depth of the slots.
How did i get the slot width dimension 3.1?
With the help of vernier caliper i measured the tickness of cardboard sheet it gave me an approximate dimension of 3.6mm. Now i did worked on
measuring the kerf value, however i didn't applied the kerf principle because in kerf, you have to add dimensions but it will result into
loose fit of the pieces so you need to add a certain amount of dimension for kerf and you reduce the dimensions to get snug fit pieces.
Instead i made sketch with multiple dimensions like 3.6mm+0.1mm, 3.6mm+0.2mm, 3.6mm+0.3mm - 3.6mm-0.1mm, 3.6mm-0.2mm, 3.6mm-0.3mm and conerted
them into dxf file,
after cutting the pieces, it was concluded that i cannot use any dimensions above 3.3mm for the slot width. So i again printed few pieces and
the 3.1mm slot width was giving better result in terms of snug fitting.
exporting the design in dxf format from fusion is a bit tricky,
select a plane where all the pieces are covered, and with the help of project feature selectall the bodies. Shortcut key for project
feature is "p"
on the left hand side,under the sketches folder select the sketch that you just created,right click and select save as/ export as dxf file.
If you directly export dxf from the "export", you'll see a black design in your dxf file
the construction kit
i designed a robot from fusion with the help of parametric
here are the results
it didn't cut properly so i had to separate the pieceswith the help of cutter
here is the robot
here is the assembly
puzzle pieces
castle
mr bean dots
robot parts
different press fit
Thsi week i learned how a leaser cutting machine works and how to operate them. I learned that to cut any material there are main two criteria: power and speed. If you are cutting material like cardboard, you need to set higher speed and low power and vice-a-versa for the materials like acrylic. I also learned about what is kerf and it's calculations, however i don't follow the kerf calculations method. I am more comfortable with directly cutting the piece first and then make the necessary changes according to the results i get . (i understand that kerf calculations is very important if the material i am cutting is very expensive and i can't do trials and error)
‹ ›In this week of electronics production there was a group assignment where we needed to characterize the design rules for the
milling machine in the lab or get our hands on the machine and know how the machine works and also learn some key aspect of milling the PCB.
In the individual assignment, we need to apply what we learned about the machine and mill a PCB. After the PCB is milled, stuff the PCB by
soldering the components onto the board and make that PCB a programmer and also test if the programmer works.
For this week, I had the responsibility for documenting everything about the group assignment. I focused more on the writing
the content and Kishore Gaikwad helped me with transferring the contents from doc file to the html and push the website.
Here is the link for the group assignment:
https://fabacademy.org/2022/labs/vigyanashram/groupassig/groupassignment2.html
I am mentioning a few things we did for group assignment in brief, for detailed description, refer to the group assignment link mentioned
above.
We were using FR1 type copper clad for milling the PCB. There is a thin copper layer for conduction and for the insulation, a phenolic paper
is used. It comes in variety of standard sizes so cut the clad according to your build area. To stick the copper clad on to the sacrificial
layer, we were using 3M double sided tape.
To test the precision of the endmills and the milling machine we were using this trace file:
http://academy.cba.mit.edu/classes/electronics_production/linetest.png
and this outline file:
http://academy.cba.mit.edu/classes/electronics_production/linetest.interior.png
Tracing means that the endmill will remove the unwanted copper layer from the surface. To trace the design, we were using 1/64 endmill,
1/64 means the diameter of the tip of the endmill is 1/64th of an inch.
Outline means cutting the PCB. For cuttin,we were using a 1/32 endmill. While cutting, the endmill penetrates through the copperclad
We were using mods community project to generate the toolpath/rml file and vpanel for communicating with the machine.Link for mods community
project: http://modsproject.org/
Upload the design file under the specific format tab
Under the “set pcb defaults” select mill traces (1/64)
Under “roland srm-20 absolute coordinates” change the values of X,Y,Z to 0
Since we just generate the toolpath, delete both of “websocket print” and connect the “output file” and “input file”
Under the “mill raster 2d” keep the “cut depth” and ”max depth” same, because we just want to remove the unwanted copper layer from the
surface. In the “offset number” set the value to -1 to completely remove the unwanted part. If you do not want to completely remove the
unwanted part, it is recommended to keep the offset number to 4. Higher the number, higher the amount of unwanted copper it will remove. For
tracing there are multiple HORIZONTAL passe
Repeat the same process for outline as you did for the trace, except select “mill outline 1/32” under “set PCB defaults” and depending upon
the thickness of your copper clad,change the “cut dept” and “max depth” under “mill raster 2d”. For cutting there are multiple VERTICAL
passes.
With the rml file for trace and outline ready, upload the rml file into the machine.
<<<---TRACING--->>>
The first step for milling is to trace. Hold the endmill in one hand and with the allen key in the other hand Insert the 1/64 endmill into
the chuck, also known as collet.
Operate the position of axis with the help of vpanel. The interface of vpanel is quite self-explanatory
With the help of +x-x+y-y move the position of chuck on x and y axis. Once the position of chuck is positioned on x and y axis, set the origin
with “XY” button under set origin point.
With the help of +z-z buttons, move the chuck down to a point where the tip of the endmill is just above the PCB, but not touching the surface.
Now with one hand holding the endmill, loosen the chuck with other hand with the help of allen key, and carefully slide the endmill down so
that the tip of endmill touches the surface. Once the tip is touching the surface, tighten the chuck with allen key. This process of sliding
down the endmill is known as zeroing.
Remember that after the tip is touching the surface, see that the endmill should neither be too much inside the chuck, not it should be too
much outside the chuck, or else the tip of the endmill will break. We are already 4 endmills down in the inventory, may they rest in
peace!
Set the origin of z axis by clicking on “Z” button under “set origin point”. From the “cut” button import the trace file and as soon as you
hit the “output” button, the machine will start tracing.
After the machine has completed tracing, remove the endmill from the chuck and thoroughly clean the debris from the machine,
Here is the result of the trace,
<<<---CUTTING--->>>
Insert the 1/32 endmill and place the endmill at the x and y origin. To do that click on “XY” button under “to
origin”. Remember that if you accidentally click on “XY” button under “set origin point” you’ll loose the old origin of x and y. After the
endmill is positioned at x and y axis, repeat the process of zeroing just like you did it with the 1/64 endmill. AFter the tip of the
endmill is touching the surface, set the new origin of of z axis by clicking on “Z” button under “set origin point”
From the “cut” button import the outline part and click on “output”. AFter the cutting is done, clean the debris from the machine and if the
PCB doesn't come right off, remove it with the help of spatula
The reason behind milling this PCB is that we now know the strength and presion capacity of the machine as well as the 1/64 endmill. By
milling this PCB, we know that we can design the trace width of even 0.001 inch and it will do the job, with the risk of accidentally
removing the trace. For the trace gap, since the diameter of endmill tip is 0.0156 inch we cannot give design the PCB where the gap between
two traces is less than 0.0156 inches or else the machine will just ignore it and won’t trace it. You can see that in the photo above.
In the individual assignment we were suppose to mill the PCB in milling machine, stuff the PCB with components and program
it to make it a In-System programmer. By the end of this week, one must know how to mill a PCB using milling machine and how to solder surface
mount components. The designing of PCB layout and getting to know the properties of all the input and output components will come in later
week in this course.
For the milling we need to apply the same principle we learned in the group assignment. From the available ISP design, I was using Brian's
FabTinyISP.
link for FabTinyISP: http://fab.cba.mit.edu/classes/863.16/doc/projects/ftsmin/index.html
Before jumping onto the machine, I generated the toolpath/rml file of tracing and outline
I selected “mill traces 1/64” under set “PCB defaults” and under “mill raster 2d” I set the offset as -1 since i wanted to remove all the
unwanted part(unwanted=things that is not white) and apart from offset I kept the values under “mill raster 2d” as it is.
I set the coordinates of X Y Z as 0 under “Roland srm-20 absolute coordinates”
Since i just wanted to generate the toolpath from the mods community project, I deleted both of the “websocket print” and connected the
“output file” and “input file”
Click on “calculate” under “mill raster 2d” to download the rml file
I repeated the same process for the generating the toolpath for outline except I selected “mil outline 1/32” under ‘set PCB defaults“ and
other than that I didn’t need to change any values. However, it is recommended to measure the thickness of your copper clad and set the “cut
depth”and ”max depth” accordingly under “mill rater 2D”. The thickness of the FR1 type copper clad we were using was 1.7mm so we kept the
default “max depth” as it is.
With both the rml files ready, i started the process of milling. First step is tracing.
<<<---TRACING--->>>
Stick the copper clad onto the sacrificial layer with the help of 3M double sided tape
Insert the 1/64 endmill into the chuck. Hold endmill in hand and with the help of allen key, tighten the chuck with the other hand
Position the X and Y axis to your desired place by using vpanel.
Lower the Z axis to a point where the the tip of endmill is just above the PCB but not touching the surface.
Then holding the endmil in one hand, loosen the chuck and slide down the endmill so that the tip of the endmill is touching the surface of
PCB and then tighten the chuck again. This process of sliding down the endmill is called zeroing. After the endmill is touching the surface of
PCB, make sure that the endmill is neither too much inside
the chuck nor it is too much outside the chuck, or else the tip of the endmill will break. 4 of the 7 students had broken their mills, 2 of
which were broken due to the endmill inserted too much into the chuck or kept outside the chuck too much.
Set the origin for X,Y and Z axis from the vpanel. From the “cut” tab, select the trace file and click on “output” and the machine will start
milling,
After the tracing is complete, there will be debris of copper and insulation onto the PCB and inside the machine, clean it thoroughly after
removing the endmill from the chuck
Here is the outcome of tracing
<<<---CUTTING--->>>
Now comes the cutting part,
Insert the 1/32 endmill. Position the X and Y axis to it’s origin and repeat the zeroing process, just like you did it with 1/64 endmill.
AFter the tip is touching the surface, do not forget to set the new origin. Be very careful using vpanel, do not accidentally click on “XY”
or “Z” button under the “to origin” instead of “XY” or “Z” under “set origin point”.
Inside the “cut” button, add the outline file and click on “output”
Again,there will be debris from cutting the PCB, so remove the endmill from the chuck and thoroughly clean the machine.
Here is the outcome
Once the milling was done, I had to mount the components onto the PCB by soldering them. I had solder the through hole components onto zero
PCB before, but soldering these tiny surface mount components was my first time experience.
These were the components we were suppose to solder,
- 1x ATtiny45 or ATtiny85
- 2x 1kΩ resistors
- 2x 499Ω resistors
- 2x 49Ω resistors
- 2x 3.3v zener diodes
- 1x red LED
- 1x green LED
- 1x 100nF capacitor
- 1x 2x3 pin header
And here is the layout of PCB
http://fab.cba.mit.edu/classes/863.16/doc/projects/ftsmin/pcb_full.png
You'll find all the file and details of Brian's FabTinyISP here: http://fab.cba.mit.edu/classes/863.16/doc/projects/ftsmin/index.html
Here is how our workstation looks like,
Here are all the tools required during the process of soldering
Startng from the top left, the names of the tools are,
Solder wire, liquid flux, paste flux, wire cutter, wire stripper, magnifying glass, de-soldering pump, tweezer, solder wick, multimeter, cutter
and scissor.
Here is how I soldered the surface mount components,
Apply the liquid flux over the PCB and wait for a few seconds to let the flux dry
With the help of tweezers, pick the component and place it over the trace. The components should be properly aligned on the trace or else it
will be hard to solder on one side of the component. Once the components is placed onto the PCB, hold the component down with the help of
tweezers so that when you solder it, the component doesn't slide from the trace
Clean the tip of the soldering gun(for soldering the surface mount components, use the soldering gun whose tip is very thin or else it will be
very difficult to solder the components and you might accidentally damage the component if too much heat is transferred to the component)
with the help of brass or stainless steel wool so it looks shiny. If there is old solder clogged onto the tip, it won't heat the solder wire
and it might damage the component of PCB if you contact the tip of solder gun with the component for too long. Once the tip is clean, touch
the solder wire onto the tip till there is a tiny blob(i'll use blob and melted solder interchangeably) onto the tip of the solder gun.
Holding the component down with the help of tweezers in one hand, contact the tip of the solder with the component and the melted solder will
automatically transfer from the tip to the component locking it onto the trace
Once one side of the component is locked, solder the other side of the component with solder wire in one hand and solder gun in other hand.
All you need to do is plade the tip of the solder gun very close to the component and melt the solder wire, once the wire starts melting,
contact the tip of of solder gun to the component and the melted solder should easily slide from the tip to the component and trace. Repeat
the same process on the other side where you had locked the component too, in case it was a dry solder.
This was the process for components like resistor or capacitor, having two ends. For the components like male header and IC(integrated circuit)
having 6-16 pins,instead of solder one side of the component first and then solder other side, what you can do is solder them diagonally
like first solder top left leg of IC and then solder bottom right, so that the IC will be locked properly. I highly recommend to watch Dua's
session on soldering. LInk for that: https://vimeo.com/669526883
Note that after the components are soldered onto the PCB see to it if there is any acidental bridges between pins. Using the connectivity
function in multimeter will help you find if there is any short circuit or open circuit
Things that didn’t went smooth,
- The soldering tip was thin so it was easy to melt the solder from the components for de-soldering. However the solder wire we had was thick
in diameter compared to the tip so I was not able to melt it using the end of the tip. To melt the solder wire, I had to use the upper side if
the tip due to which the melted solder would never stick to the end of the tip but would slide upside the tip.
- Initially i was not cleaning the tip frequently due to which there were large blobs of solder onto the PCB, which i managed to remove using
de-soldering pump.
- I was accidentally making a solder bridge between the pins of IC. I did manage to de-solder them but soldering the IC with very tiny pins
was much harder compared to other components and turns out i had dry soldered the IC due to which I was getting “error 1” while programming
the ISP, more on that later.
- While soldering the components onto the JTAG PCB, i wasn't paying attention to the layout of the PCB. In the JTAG's case there WAS a bridge
between the pins of IC. But when i was soldering them, i thought I accidentally bridged the two pins so firstly it was very difficult to
de-solder them, because i didn't know that there was a copper trace between the les, so with the help of scissor i completely removed the
solder and the trace was removed too. Then i realized that there is actually a trace between the pins, so i then bridge the pins by soldering
them
after i bridged the pins with solder,
- I accidentally removed a trace from the PCB, but managed to bridge the gap with soldering
Again, i wasn’t paying attention to the layout and description, so i forgot to bridge the two half circles, due to which, the led’s weren’t
working initially
Once the soldering was done, I had to test it if the ISP actually works. The goal was to make this ISP a programmer. The IC used in this ISP
is ATTiny45, after this ISP is converted into a programmer, we can use this to program other ISP’s
You will need to install a few softwares and follow some steps, for detailed description so to the Brian’s TinyISP link mentioned above.
I am using windows so i am mentioning windows’s steps
[1] Download git
Link: https://git-scm.com/downloads
I already had the git bash installed in program files
[2] Install the Atmel GNU Tolchain
Link: http://www.atmel.com/tools/atmelavrtoolchainforwindows.aspx
You will find the setup under “tools and resources” > “archives” > “AVR® and SAM MCU Downloads Archive”
I have this installed in program files
[3] Install GNU Make
Link: http://fab.cba.mit.edu/classes/863.16/doc/projects/ftsmin/make-3.81.exe
I have this installed in program files (x86)
[4] Install AVR dude
Link: http://fab.cba.mit.edu/classes/863.16/doc/projects/ftsmin/avrdude-win-64bit.zip
I have this installed in program files
[5] Updating the path
So that windows will know where to locate this softwares when we type their name in command line.
Go to the control pannel > system and security > system.
Click on the “Advanced system settings” on the right hand side. A new window will pop up and under the “Advanced” tab click on
“environment variables”
Select “path” and click on edit.
Add these file location
- C:\Program Files\avr8-gnu-toolchain\bin
- C:\Program Files (x86)\GnuWin32\bin
- C:\Program Files\avrdude
[6] Install drivers
Install zadig
Link: https://zadig.akeo.ie/
Plug in a programmer ISP. Note that you are not suppose to plug in the ISP you just made.
Open zadig and and select “USBTinyISP”. “Select libusb-win32(v1.2.6.0)”
If you cannot see the USBTinyISP, click on “list all devices” under “options”.
(for documentation purpose i used my ISP after it was made programmer and the driver was installed successfully,so this is another check to
see if the ISP i made works as a programmer or not.)
I made a mistake and plugged in my ISP(when it was not a programmer) so i was not able to install the driver.
[7] Checking sanity
To see if the software we installed are working run these command in git bash one by one
make -v
avr-gcc --version
avrdude -c usbtiny -p t45
After running every command you should see the following messages. If not you made a mistake in giving path under “environment variables”
Plug in you ISP using data cable and you should see you ISP indicating green and red led
After checking, connect a programmer to the PC and connect your ISP to the programmer with the help of a connector. Check for the alignment of
connector before plugging in. For checking the alignment you can you multimeter.
(the one on the upper side is the programmer and the one on the bottom is the ISP i made.)
Download the firmware and extract it. There will be make files there
Link: http://fab.cba.mit.edu/classes/863.16/doc/projects/ftsmin/fts_firmware_bdm_v1.zip
Open git bash and set the directory where you have extracted the firmware code. You can also go into that folder, right click and select
“git bash here” by doing that, git bash will automatically set the directory for you
Run these following commands
make
make flash
make fuses
make rstdisbl
[1] make
Type make and hit enter. This commad will conver make file into hex file. You will see the additional files after in the folder.
[2] make flash
This flashes/uploads the code into the ISP.
I ran the make flash command and was getting “error 1”
Turned out there was dry solder on the IC. M instructor helped me with soldering the IC and after that the command ran successful
[3] make fuse
This will set up all of the fuses except the one that disables the reset pin
[4] Reset disable
This will permanently make your ISP a programmer. You won’t be able to run another program in this IC
To check if your ISP is successfully made into programmer, connect that into your pc and the default name “USBTinyISP” wil show
Another way to check is to see the led. If it is constant red that means everything is fine
One another way to check is to reinstall the libusb driver using your ISP. If it is re-installed successfully that means your ISP is a
programmer. I have mentioned this method of checking above, under "instaling driver" part
One other obvious way to find out if everything is successful is to convert other ISP into a programmer using your ISP.
EXTRA CREDITS
JTAG
This week I learned in brief about making a programmer and that if you make your custom board, you will need a programmer through which you program your custom board unlike Arduino boards where you don't need a another module to program. I also learned how to mill a printed circuit board with the SRM-20 machine and also get to know how precise the machine can be and it's limitations depending on the endmill configuration. Soldering the SMD components was something i did for the first time. As mentioned above, my local instructor had to help me re-solder/reflow the IC when i was getting the RC-1 error, so the soldering wasn't perfect however i was satisfied considering i was soldering the SMD components for the first time.
‹ ›
Before jumping into the individual assignment, let me give you a brief description about 3D printing in general and the printer we are using
in our lab.
3D printing is one of the methods that comes under additive manufacturing. The printer ADDS the layers of filament on top of each other.
There are generally 4 motors used in 3D printers, 3 of them handles the XYZ axis movement and 1 of them handles the filament extrusion and
with the help of these 4 motors, a 3d model is created. You feed the filament into the nozzle of the 3D printer. The nozzle heats and melts
the filament. Then the nozzle, with the help of XYZ axis motor builds the model layer by layer with the molten filament. For adhesion, the
bed is also heated.
Advantages of 3D printing:
- 3D printing is a great tool for rapid prototyping.
- you can make almost any design in the 3D printer. If the object needs supports or raft/brim, there will be post process to it.
- 3D printer are quite cheap these days. You can get printers like Ender 3 for around 12K INR.
- 3D printing a model is cheap compare to the other manufacturing methods.
- there are wide variety of filaments in which you can print the models.
Limitations of 3D printing:
- it takes a lot of time to print a model.
- calibrating the 3D printer takes a lot of patience, if you don't calibrate your printer properly, it can show it's effect in your printed models.
We have Fracktal Works’s Julia advance 3D printer. First we need to load the filament into the extruder through the filament run-out sensor.
What the filament run-out sensor does is that if in the middle of printing the spool runs out of filament or the filament breaks during the
print, the printer will pause the printing so that you can change/adjust the filament.
Here is how the control panel of the 3d printer looks like,
In the home section, you will see options like menu, controls, pause and stop.
Inside the menu there are option like print where you can select the file you want to print from USB or locally, control where there will be a
bunch of options(the one in home and this one in the menu is the same), calibrate where you can calibrate the bed level, cart, settings and
back button. I have mostly used the print, control and calibrate options
Inside the controls, there are options like feed rate where you can change the feed rate of the filament and tuning the bed level during the
print
Setting the nozzle and bed temperature beforehand
Moving the XYZ axis
Before printing, it is a good habit to calibrate the bed level. Calibrating bed level means that the distance between nozzle and the bed
should be as per your layer height and it should be uniform throughout the bed. Select “full calibrate” from the calibrate option and just
follow the instructions given in the display,
First you need to loosen all the screws under the bed
Then one by one, tight the screw of the corner where the nozzle will hover
Then the nozzle will hover at 9 different places onto the bed one by one. When the nozzle hovers over the bed, slide a piece of paper between
the nozzle and bed and move the paper back and forth. There should be very minimal friction when you move the paper. If the movement of paper
is very loose or tight, you can adjust the bed level through the up and down button while calibrating.
After the calibration is done, you are set to print your model. You can preheat the nozzle and bed before printing from the “control” menu.
However even if you directly select the print option, the printer will wait till the nozzle and bed reaches the set temperature and once it
reaches the temperature set in the gcode file, it will start printing.
For 3D printing, I am using fusion 360 as designing software(CAD) and I am using cura/fractory for slicing the model(CAM). Slicing basically
means that the CAM software converts the 3D model into the language that the machine understands so if you open the gcode file with notepad,
all you’ll see is bunch of coordinates for XYZ axis motor long with the speed and temperatures.
<<<---CAGE AND DISK--->>>
I had in my mind to make a cage like structure and put a coin inside which cannot be taken out of the cage. To do that, start printing the
cage and halfway through it, pause the print and put a coin inside and resume the print. Since the diameter of the coin is not large, I
thought the printer would be able to bridge the distance between one point of the cage to another without support.
However, to test the strength of the printer in terms of making a bridge from one point to another without support, i designed a model in
fusion
For slicing I used cura and i set
210° nozzle temperature
60° bed temperature
20% infill
50ms printing speed
gave a raft for better adhesion,considering the condition of the bed
Using the PLA filament, here are the result
The printer was able to make a bridge for 20mm without support though
This is the ipad pro stand i printed at my home with Ender 3 with PLA filament with
200° nozzle temperature (initial 215° and later 200°)
60° bed temperature
20° infill
Skirt
Without support
50ms speed
and here are the result
The distance between the two ends of the frame is 83mm. This is the reason I wanted to see how far the printer in our lab can make a bridge
without support. However, after seeing the results of the bridge test I dropped the idea of pausing the print and putting a coin because the
printer wasn’t able to print 40mm without support.
So i designed the cage as well as coin(ended up making a thick disk) in fusion
Pillar extrusion = 40mm
Top and bottom lid extrusion = 5mm
For slicing i used cura
210° nozzle temperature
60° bed temperature
20% infill
50ms speed
20% Support density
Support pattern grid
After the gcode file was ready, I calibrated the bed and started printing but the nozzle seemed too close to the bed so the filament wasn’t
coming out of the nozzle even though the extruder motor was rotating to push/retract the filament. I stopped the print and re-calibrated the
bed.
After re-calibrating I again put the model for print but again the nozzle was too close to the bed so the filament wasn’t coming out of the
nozzle. I repeated the calibrating-printing process for the same model at least 5 times and the model still won’t print because the nozzle was
too close to the bed.
Between calibrating-printing, things were happening to the printer like,
PLA was dripping from the nozzle like a syrup
Smoke was emitting from the nozzle
Note that during all these, the temperature for the nozzle was set at 210° (215° for the initial layer) in the slicer. I didn’t constantly
observe the temperature that was showing in the display of the printer but it was mostly 210°.
Then our instructor told us that students in the past had experienced similar issues with the cura software. Then I sliced the same STL file
in the software dedicated for this printer called fractory. Without calibrating the bed, i put the model for print and it printed fine at
last.
Here are the results,
After removingthe supports,
I ended up completely breaking one pillar and also detaching the remaining 3 pillars from the bottom lid of the cage. I wasn’t able to remove
the supports to free the disk from the cage and it still required a lot of cleaning. I then decided to replace the disk with a sphere of the
same diameter
<<<---CAGE AND BALL--->>>
as mentioned above, i kept the dimention of the cage as it was and just changed the disk to sphere of the same diameter,
Pillar length = 40mm
Base thickness 5mm
Ball diameter = 30mm
Slicing. For sicing i’ll be using fracotry from now on
Infill 20%
210° nozzle temperature (i let the software autofill everything except “printing temperature” )
60° bed temperature (i let the software autofill everything except “build temperature”)
Support density 4%
Support pattern line
here are the results,
Problems with this model,
stringing
Even with 210° nozzle temperature, there was a lot of stringing in between the model
Top layer wasn’t able to bridge
Considering that the diameter between the pillar was 32mm and there were supports generated, the printer wasn’t able to bridge the filament
between the supports and pillar and so the top layer wasn’t able to print.
Pillar broke off
The pillars didn’t merge well with the bottom lid of the cage and so it broke off without any significant pressure
Shape of the ball
Shape of the ball was distorted from the bottom. Either the printer wasn’t able to print the initial layer of the ball or the support was too
much glued to the ball and I wasn't able to remove them.
<<<---CAGE AND BALL V2--->>>
Considering the model that i printed earlier, i made some changes in design line change the position and diameter of pillar and in the slicing
I changed the temperature to 200°, support density to 5% and infil to 30%
Slicing,
Infill 30%
Nozzle temperature 200° (initial and final)
Build plate temperature 60°(initial and final)
Flow 90 prime time flow 120 initial layer flow 100
Support density 5%
Support pattern lines
Here are the results,
after the print,
Removing the support was not difficult,
After a little cleaning with file and nose plier,
The bottom layer of the upper cage was distorted even after increasing the support density(the number of support layer increased from 5 to 6.
4% density = 5 layer and 5% density = 6 layer) and also the initial layers of the ball was distorted
final model,
Converting the fusion model into STL file,
For every model i made in fusion, i exported that in STL format and sliced the STL file from fractory. If you have observed earlier, i have
made multiple components in the same file. So if you directly export the file as STL, you will get all the models in STL format in a single
STL file. So if you just want to export few models as STL, what you need to do is orient the model(s) however you wish and hide all the other
components. After that export the file as STL and you’ll only get the STL file of the component which was not hidden.
This model is not possibe to fabricate through manufacturing processes like subtractive and formative. It is only possible to make this
model through additive process-3D printing because this is an object inside an object. Of course, you can re-design in a way where
you make ball and cage separately and then fit the ball inside the cage and glue the base or top plate onto the pillars.
ball inside cage by fenilc on Sketchfab
<<<---SCANNING WITH SCANNER--->>>
For scanning we have a “3D systems sense” 3D scanner in our lab. To use that scanner there is dedicated software “Sense 1” which you need to
install. You can download the sense 1 software from here: https://support.3dsystems.com/s/article/Sense-Scanner?language=en_US
During the installation process, a window pops up asking me if i want to install the software/driver and I accidentally clicked “don’t
install”. I thought the installation would fail, however the installation was completed and i was able to open the software too, but when i
connect the scanner it just wont detect and show error like “device not connected” “device not supported”
I tried to reinstall the software several times, but that window that asks if I want to install the software/driver just won't pop again.
I even deleted the concerned files from the registry editor and install the software again but still that window won't pop again. I don’t even
know what exactly that window was asking to install, but all the other students were able to detect the scanner and only i was not able to
detect so i assumed that it was because of the misclick i did during the installation
Then a friend of mine suggested to look into the device manager when i plugged the scanner, and sure enough there was some kind of error
showing for “prime sense” driver
So i tried to update the driver by selecting “search automatically for drivers” but the device manager wasn’t able to find any driver online.
So I looked online to see if I can download the driver manually and i come across the website where I downloaded the PrimeSense Sensor
Development Kit 2.x. You can download the driver from
here: https://www.drvhub.net/devices/other-devices/primesense/sensor-development-kit-2-x
After extracting the folder, i again went to device manager and updated the driver by selecting “browse my computer for drivers” and selecting
the path
(i guess this was the window that popped up during installation process and i misclicked on “don’t install” but this time i clicked on
“install”)
And after opening the software again, it was able to detect the scanner at last
a little introduction about the software
You’ll first need to enter the activation code by selecting the “i have an activation code” from the home screen
Enter the 4 digit code. The activation code was given to us by our local instructor
The software will ask if you want to scan a “person” or an “object”, select accordingly
Under the object it will ask if you want to scan “small object” “medium object” or “large object”.
After selecting any of the option you'll be able to see the scanner capturing the objects/person around.
Once the object/person is set, click on ”start scan”
Move around the scanner or rotate the object/person to capture every possible angle of the object/person.
Once everything is captured click on pause scan
After pausing the scan select next you’ll get options like crop and erase where you can remove the unwanted objects that were captured and
through solidify you can add some amount of object if the scanner wasn’t able to capture
After clicking on next you will get another set of options like color trim and touchup where you can do minor edits. I haven’t explored that
options though
After clicking on next you’ll get another set of options like save upload and print. Clicking on save option you can save the model in the OBJ
file format, which you can use for slicing in any CAM software. I haven’t explored the upload and print options
[1] Scanning the person
I helped two of my colleagues scan their faces. I found scanning the person a bit earlier than scanning the object, more on that later.
While scanning any object/person you can either keep the scanner stable and rotate the object/person or you can keep the object/person stable
and move the scanner around.
Initially we tried to keep the person stable and move the scanner around, but we were loosing the track after every few seconds so we decided
that we will keep the scanner stable and the person needs to rotate 360° on the same place
So my colleague just needed to rotate 360° on the same place and I needed to adjust the scanner according to their movement like moving the
scanner back or forth for better focus or move the scanner sideways if the colleague is out of the focus area and instruct them when to start
rotating and when to stop.
The reason why scanning the person is easier than the object is that all you need to do is find a place where there are no objects/people in
close vicinity. The person who wants to get scanned needs to rotate solely and follow the instructions and the person scanning need to adjust
the scanner and give instructions as to when to start and stop rotating.
[2] Scanning the object
I first tried to scan a mouse where the mouse would be stable and I would move around with the scanner scanning the mouse.
I was getting constant “lost tracing” error if i move the scanner slightly,
Then i decided change the object to a bottle since it is long and i can put the scanner on the same level then the bottle would act as a
person where not a lot of unwanted objects will be captured. Even if it does capture, i can edit them later. I used my colleague’s laptop
toscan the mouse. It was after that my issue with the software was solved and then i used my laptop to scan the bottle.
Initially i did the same procedure for the bottle where i kept the object stable and move around with scanner but i was again getting the
lost track error
so later i decided to keep the scanner stable and rotate the object.
Raised the bottle for better capturing,
Adjusted the scanner and rotated the bottle,
Ultimately i was getting better results without the bottle raised because all i needed to do was crop the table which was captured during the
scanning
I took 3 trials with the scanner being in stable state and i was rotating the table. Here are how the result looked in the first two trials,
the process is shown in the video linked above. In the third trial the outcome of the scanned bottle was looking better than the first two trial,
the result was better than the first two trial but not great ebnough for me to 3D print it, so i just saved and kept the OBJ file. You
can download the OBJ file from here: scan file for bottle
<<<---SCANNING WITH MESHROOM--->>>
When i was having issue with the sense 1 software i asked in the chat during Global open time and rico suggested to use meshroom and shared
with me a youtube link. I then discovered that meshroom is an open-source software which converts photos into a 3D object. You need to click
pictures of the object from all the angles, the more the pictures the higher the accuracy of the 3D model you will get. So i click the photos
of the bottle from different angles
In the meshroom software you need to save project file first
After saving import all the photos of the object
Click on start and you will see the progress bar below the start button and status of each node on the bottom
After some time the process would automatically stop on the depth map
I start the process again,
And again after some time the process would stop
I repeated the process several times but every time the processing would stop on the depth map. Later i gave up on meshroom however i’ll
update the content if i am successful in completing the process of converting photos into a 3d model or if I try any other object.
Edit: 29-06-2022 05:36
In the week of Computer controlled machining, i had some spare time so i decided to printed and calibrated the tensegrity table.
I had designed this table earlier before joining the fab academy. The design of the table is in 3 parts: bottom, top and studs,
I gave the provision for the holes in a way that the the holes in it's tail is concentric,
The holes in the tensegrity table is to insert the studs. The role of the stud is to lock the thread.
This is how you calibrate the table with thread,
Sand/file your studs for a smooth surface so that the studs can be removed with the screw driver if needed, while calibrating the table,
start with these holes,
interwine the thread in the holes and lock them by inserting the stud. For this particular pair of hole, you just need to adjust the height
of the table.
After that do the same with the other two pairs, but lock the thread by inserting the studs on only one side,
you need to calibrate the table by pulling the string back and forth. If you pull the string too much, the table will fall in front and if you
keep the string loose, the top of the table will remain tilted. If the sting is pulled too much on one side, the top table will keep falling.
So keep tweaking the thread until the top table stops falling and then insert the stud to lock the thread.
You can downlod the STL files of 3D printing here:
cage and ball
tensegrity table
tensegrity table on thingiverse: https://www.thingiverse.com/thing:5330243
You can download the original design files from here:
cage and ball degign
tensegrity table design
link for group assignment ink: https://fabacademy.org/2022/labs/vigyanashram/groupassig/groupassignment3.html
‹ ›The individual assignment was to re-draw the hello world board by adding at least one led and one button and program it to check whether the board is in working condition or not.
For designing the pcb, i used autodesk’s eagle. I still don’t know a lot about the software so i’ll mention the things that i know and what i
did for designing the pcb
<<<---SAVE THE SCHEMATIC--->>>
After opening the software, the first thing to do is create a schematic file. File > new > schematic. A new schematic window will open. It is
always recommended to save the file first before starting working on the schematic.
<<<---ADD THE COMPONENTS--->>>
Add the components you need to make the PCB. You can add them from the libraries that are pre-installed in the software and you can also add
your own library containing all the components. You can select the “add part” from the left panel as well as search the “add part” command
from the search bar. You can select all the feature using same method
A window will pop up with the list of all the components,
I highly recommend searching for the component manually because the “search” option inside the “add part” tab is very inaccurate. To add that
component into the schematic area, you can select the component and click on “OK” and you can also double click on the component. After that,
left click to drop the component into the schematic area, you can add the same components multiple times. If you just want one amount of the
selected component, hit escape key after dropping the component and you’ll be directed again to the “add part” tab and hit escape key twice to
exit the “add part” tab, which is a nice feature.
<<<---ADD LIBRARY--->>>
There are few components which can’t be found inside the pre-installed library so i had to install the fab library. You can download the fab
library from here : https://github.com/Academany/FabAcademany-Resources
1. You need to download the zip file. If you can’t see the green “code” button, click on the “pull requests” tab and again click on the
“<>code” tab and the green “code” button will appear, click on that and download the zip file.
2. Extract the zip file.
3. Open the library manager. You can open that by clicking on “library” > “open library manager”. You can also open the library manager by
clicking on “open library manager” from the “add part” tab
4. Inside the library manager, click on “available” tab
5. Inside the “available” tab click on “browse” button. Select the file type “EAGLE library” by going to the path where you have extracted the
zip file.
Now your library will be added and you can see the list of components inside the “add part” tab. Note that do not change the location of the
eagle library file from your system or else you’ll need to again add that library
<<<---CONNNECTING ALL THE COMPONENTS IN THE SCHEMATIC--->>>
Once you have placed all the components, you need to give them the connection. You can do that with the help of “net” function. Just like
adding components, you can select the “net” function from the search as well as the button in the left panel.
You can always add more components and give them connection later. It is ot very difficult in the schematic, compared to routing in the
board.
You can connect the components in two ways,
1. Connecting the components through lines. Click on one end of the one component, drag the line however you want and click on the other
component. Doing this will make a connection between two components.
Now there might be a situation where there are a lot of components and in that case if you give connections using lines, it will be very
hard to interpret which component is connected to which component. So there is another way to set connection between two component
2. Connecting the components by assigning them names. Draw a small line using “net” function and assign that line a name by right clicking the
line and selecting “name”. In my case i wanted to connect the resistor to VCC so i gave “VCC” as name
Do the same with the vcc pin. If you’re asked for confirmation regarding the connection, click on yes
And your connection is made
It is always a good practice to assign the components names, it helps understand what components to solder on which pads. To assign the names
to the components, click on the “+” sign of the components and right clock and select “name”
For every line or component, there will be a “+” sign, sometimes it will be very difficult to locate. So once you select any command like
“name”, “move“ or “rotate”, that command will be locked and now you don’t need to right click and select the command again and again for
every component. Once a particular command is locked, all you then need to do is click once in the “+” of other component and the selected
command will be applied to the other component. You can also select the command from the tools in the left panel.
<<<---ELECTRONIC RULE CHECK (ERC)--->>>
Once all the components are placed and connected in the schematic,
it is always recommended to check if there is any open circuit or if there is any junction not connected properly or if you forgot to add
value to the components. To do that there is a feature in eagle called Electronic Rule Check, you can find that in tools > ERC or
ctrl+shift+e
It will show you all the errors like component not connected or no value set for any component. You can check the errors and rectify them one
by one.
Connect the component
To add the value, double click on the name of component in the list under “parts” heading
There you can add/edit name and value. You won’t face any issue while routing the components inside board mode, however it is a good practice
to add the name as well as value because you’ll know that you have to place a resistor but you might forget what value resistor you are
suppose to place or if you don’t add a name, it will be difficult to know what component to place where just by looking at the pads.
<<<---DESIGN RULE CHECK (DRC)--->>>
Just like the schematic mode, we can check if there is any error while routing the component. But unlike schematic, making even a tiny bit of
change can be very difficult, you’ll understand that in a minute. So before starting to route all the components, it is necessary to define
some parameters beforehand. We can do that with design rule check in board mode. To enter the board mode from schematic mode, click on the
“generate/switch to board” button on top or you can also search “board” in the search bar and you’ll be directed to the board mode. Inside
the board mode, all the components will be cluttered to the left side and with the move command you need to drag every component into the
canvas.
In the design rule check, I am just setting the parameter for the trace width and trace gap. To set that parameter i am referring to the PCB
we milled in group assignment in the electronics production week.
On the basis of that i set the clearance as 16 mil and maximum width(sizes) as 15 mil
What this design rule check does,
1. It sets the trace width before you start routing, preventing you from any surprises later.
2. Sets the trace gap beforehand. With the move command, you can move the route and while doing that it will highlight red in between the traces
if the gap between the trace is less than the value set in the design rule check.
After the routing is is done, you can check for error by selecting tools > DRC or tools > errors, it will show you all kind of errors, if
there are any
Check every error and try to rectify it.
<<<---ROUTING--->>>
Routing means connecting two pads or making traces between two pads.
To route, select “route airwire” from the left panel or you can even search from the search bar on the top. To route, click on one side of
the pad and drag the line however you want and click on the other pad. Just follow the yellow reference line. It is always recommended to
select the 45° wire bend while routing. You can select that from the “select wire bend” button on the top
Note that when the route between two pads is complete, you will hear a sound of confirmation. If you didn’t hear the sound, that means the
route is not proper and you need to re-route. Also you can use multiple trace widths for routing. For example you can have all the traces with
16 mill size and for routing the trace between the pins or between the IC you can set the trace width/size to 10 mill just for that one
particular trace
Routing is just like playing the flow free game. For routing you can either move and rotate the components enough so that the yellow reference
line seems untangled enough and you can visualize the route before even starting or you can jump right into routing and figure out how you’ll
complete the route while doing it. I prefer the latter one.
This was the schematic before i started routing,
And this was the routing i did,
According to my local instructor, these are the mistakes i made with the schematic,
1. I did add a pull down resistor, however i forgot to add a resistor for the LED
2. The connection i gave for the button was similar to how i used to give for the digitalRead command in the arduino to read the state of the
button, back in the days when I was learning arduino.
This is the correct schematic according to my local instructor,
Since i added a component and change the connection of the button, i had to make the changes in the board. Connecting the new resistor for
led wasn’t very difficult, but connecting the button to the VCC of the IC was frustrating. This was the state of the board with just one loose
connection
I tried to route without deleting the existing trace but that was not possible. So i deleted all the existing trace and tried to re-route the
whole board. After spending a few hours trying to re-route and getting no results, I then decided to use a 0 ohms resistor as a jumper. So
this is the final schematic and board (or i thought)
<<<---EXPORTING THE LAYOUT--->>>
You first need to draw the border of the pcb for cutting. So you’ll be exporting a trace file and an outline file. To draw the border, select
“dimension” beside “layer” on top. Click on the arrow in the bottom to expand the menu and with the shapes available there draw the border
Delete the default square border. Now hide all the layers that you do not wish to export. To do that go to view > layer settings. Hide all the
layers by using “hide layers” button and click on the “eye” icon beside all the layer which you want to export. In my case i am exporting the
trace first so i am hiding all the layer except the top
Go to file > export > image.
Check the monochrome option to export the image in black and white. Set the dpi to 1000 and after setting the export path, hit ok.
Do the same process with outline, however this time hide all the layers except the “dimension” one.
Because i didn’t realize that there is option to write text in the eagle itself, i edited the exported png file from inkscape
<<<---GENERATING THE TOOLPATH--->>>
trace
I used the mods community project to generate the toolpath. These are the settings i used for tracing,
Since i was operating the SRM-20 with vpanel i just wanted to download the rml file so i deleted both the web socket print and web socket
device and connected the input file and output file
outline
Mistakes i made while designing and generating the toolpath
If you have observed, i made three mistakes while designing and generating the toolpath,
[1] Kept the default 96 DPI while exporting the file from inkscape.
[2] The mods community projects shows the dpi of the png image i selected, but i wasn’t paying attention.
[3] Didn’t make a connection inside the button in the schematic file. In the push button, the two pair of the pins are connected internally
which should be connected in the schematic as well, but it didn’t strike me eve after looking at the pads in the board mode
The rml file generated with 96 DPI and wrong button pads, i milled two PCBs
with vbit where the result was full of burr
with 1/64 endmill where the endmill broke
Mods settings was as given above
The rml file generated with 1000 dpi and wrong button pads, i milled 1 pcb
with same vbit where the vbit broke
Here are the mods settings
The last one i corrected the DPI as well as the button pads
with the same broken vbit
The final final schematic and board
And here are the mods settings
More of this in detail, later in milling part.
First i tried to mill the trace with the vbit,
Position of vbit inside the chuck
Video of initial run,
Outcome after few minutes, I paused to view the result. Since i saw the burr in the traces, i stopped the trace in the middle.
This was 96dpi
Then i tried the 1/64 endmill. Position of the endmill inside the chuck
Video of initial run
Video of endmill broken
Trace after the endmill was broken. This was 96dpi
I then again tried with the vbit i used earlier. Position of the vbit inside the chuck
Video of the initial run
Video after the vbit was broken
Image of broken vbit
Result of the trace after vbit was broken. This was 1000dpi
Bed leveling photos. I took this photos AFTER the vbit was broken though
Even though the vbit ws broken, i decided to continue the milling with the same broken vbit. I did the tracing from the beginning by doing the
zeroing process again.
Position of vbit inside the chuck,
After the trace
Cutting and position of 1/32 endmill. Position of endill inside the chuck
After cutting
here are the results of the trace with the broken vbit,
The finishing of the trace was very rough. It took a lot of time to remove the burr from the pads. I cleaned the border just enough so that
the components can be easily placed in the pads
I did check the pcb with the continuity function in multimeter and there were no open circuit between the traces and pads, so i proceeded with
the soldering
Here is the list of components required,
2*3 SMD male header pins
1*6 SMD male header pins
Attiny44 IC
Push button
LED
10K ohms resistor
100 ohms resistor
49.9 ohms resistor
0 ohms resistor
1 UF capacitor
20 MHZ resonator
(i forgot the 10k ohms resistor)
Even after removing the burr from the border of the pads, i did face some issue while soldering the components. Because of the burr, the
components were not placing flatly onto the pad, it was behaving like a seesaw when placed onto the pads. I still managed to solder the
components onto the PCB. Except for the fdti header pin that was soldered slantly, everything seemed fine.
Our instructor told us to find out the reason behind breaking off all the bits. We explained what all we did while milling and showed the
outcomes of the traces in the PCB.
Our instructor decided to try millig the PCB himself. Just like we did with generating the rml file, he didn’t change anything in the mods
community project except for setting the absolute coordinates to zero.
Position of the vbit inside the chuck
After setting the XY and Z coordinates as the origin and before giving the output command, the endmill was positioned a bit above the bed
so that when we hit the output command, the spindle would gain the 9000 rpm speed in the air and not while the tip of vbit is touched to the
PCB. After giving the output command and the spindle gained the speed of 9000 rpm, the tip of the vbit broke the movement it touched the PCB
to start the trace. We concluded that the tip of the vbit broke when the vbit was milling in the air,
Photo of the broken vbit
(the damage is very minor, i can’t even see that in the image captured.)
Our instructor took another bit to test it again with the same settings as before. This time the vbit traced for about a minute or so when the
vbit started milling in the air and we concluded that the bit was broken yet again.
outcome of the trace
Seeing the trace, it looked like the vbit was engraving very deep. So instead of using the settings of 1/64 endmill from the mods community
project which is 0.1016 mm cut depth and 0.1016 mm max depth we changed it to 0.0800 as cut depth and max depth, and this time we used the
same old vbit that was just broken,
This is the result of the trace,
The trace was very clean but because of some mistake in design, we stopped the print in the middle and milled a new pcb with different design
and same broken vbit and same settings of 0.0800 mm cut depth and max depth. This was the result after the trace,
The traces came out better than the 1/64 endmill.
Some conclusions according to me:
In the electronics predictions week, i milled the fabISP with the 1/64 endmill which was assigned to each student. At that time i had no issue
with the milling, like no burr in the trace or no breaking of the endmill. Everything with milling went well in the first try
In the same week of electronics production, i milled the JTAG pcb with the vbit. For the toolpath, i used the same setting i use for 1/64
endmill. You can see the outcome in the tab for electronics production. At that time i got great results with the vbit for the tracing part,
like there were no major burr on the pads or traces and also the vbit didn’t break. Faced no issue while soldering too.
In the week of electronics production, before i had milled my PCB, few of my colleagues had already broken their endmills. Our instructor
assumed that the reason behind the breaking of endmill was that the endmill was too much outside the chuck so what happens is that at 9000
rpm, the endmill starts to wobble and hence result into breaking the tip of endmill. So when our instructor set the endmill inside the chuck
for me, i clicked the photo of that and inserted the same amount of endmill inside the chuck this time as our instructor had done before, by
referring to the photo. So positioning of the endmill inside the chuck is not the issue. This week, i checked the bed level AFTER the endmill
was broken and it was fine, so bed level is not an issue either. Before starting the milling, i did check if the copper clad was warped, and
it was fine. After sticking the copper clad onto the bed, i pressed the copper clad firmly onto the bed to remove any bubbles at the bottom of
the copper clad, so the copper clad is also fine(we are using the FR1 copper clad). The speed of the spindle rotating is always around
9000-9600 rpm. The speed of tracing is always 4mm/s. Apart from setting the absolute coordinates to 0 for XYZ and changing the offset to -1,
I am keeping all the settings as it is while generating the toolpath with mods community project.. To operate the SRM-20, i am using the
Vpanel.
I am not able to conclude why my 1/64 endmill broke or why everyone’s(literally) 1/64 endmill broke.
Talking about the vbit, i set the same amount of vbit inside the chuck as i did the last time. Used the same toolpath settings which i had
used earlier which is use the settings for 1/64 endmill and use vbit instead, and yet every single vbit we used this week, broke.
There are 2 cases,
- Using the vbit which is already broken
If you have read the description above, when i used the broken vbit to mill, my pcb came out to be full of burr. When my colleague used
another broken vbit, the result was even better than the 1/64 endmill. I guess the outcome of the trace is dependent on how much chunk of the
vbit is broken. Even after concluding that using the 0.0800 cut depth and max depth will give better result after we milled my colleague’s
pcb with broken vbit, when my other colleague milled the pcb with same broken vbit and same settings, it again came out full of burr. So i
still don’t know if i will get the pcb full of burr or clean like we get earlier by using the broken vbit
- Using the fresh vbit
Well, every vbit we used broke at one point or another. In some cases very tiny chunk of vbit was broken and in some cases comparatively large chunk of piece was broken. So i guess the tip of the vbit is bound to be broken, all we need to take care is that a very tiny amount of the tip gets broken. So we had concluded that in the new vbit, use cut depth and max depth as 0.0700 and after one pass of the endmill see it the endmill gets broken. If not broken, see the outcome of the trace. If the trace is not properly cut because of 0.0700 cut depth, without changing the origin of XYZ, give the second pass with 0.0800 and see the result.
If the vbit do get broke do the zeroing process and with the 0.0800 cut depth and max depth, start milling the trace again and see if the pcb comes out clean or full of burr.
In a nutshell, i still don’t know for sure what are the best setting to use in order to get best results from the vbit.
In the electronics production week, i had made fabISP which is a programmer. In this week of electronics design, i made a hello world board.
To check whether the hello world board i made actually works or not, i had to program it. To program the hello world board you need a
programmer, which is the fabISP.
You need to connect both the PCB with a IDC connector and a ribbon cable. Make sure that the alignment of
MISO VCC
SCK MOSI
RST GND
of the fabISP and the hello world board is proper. What i mean is that the MISO pin of the fabISP should be connected with the MISO pin of
hello world, GND pin of the fabISP should be connected with the GND pin of the hello world board and so on.
In my case this is the proper alignment
In the electronics production week, i made the fabISP a programmer by connecting the fabISP to a programmer via IDC connector and a ribbon
cable and connecting the programmer to the pc via USB extension cable. Using the same principle i had to program my hello world board. This
time i already have my programmer and i am just programming another board with the programmer and not making another board a programmer.
Connect the hello world board to the fabISP via IDC connector and ribbon cable and connect the fabISP ot the pc via USB extension cable
For programming the hello world board, i am using Arduino IDE.
Link for downloading/installing Arduino IDE: https://www.arduino.cc/en/software
You need to setup a few things before uploading the program to the hellp world board via fabISP.
[1] Add/Change Additional Boards Manager URL to: http://drazzy.com/package_drazzy.com_index.json
Go to file > preferences and in the Additional Boards Manager URL paste the above link
[2] Install ATTinyCore board by Spence Konde
Go to tools > board > board manager and search for ATTinyCore and install the one by Spence Konde
[3] Select the following things in the tools
- Go to tools > board > ATTinyCore and select ATTiny 24/44/84(a) (no bootloader)
- Go to tools > chip and select Attiny44(a)
- Go to tools > programmer: and select USBTinyISP (ATTinyCore) SLOW, for new or 1MHZ parts
Your tools menu should look like this after selecting all the things
Go to tools and select burn bootloader and it should show message like “Done burning bootloader”. Fortunately i was able to burn the
bootloader on the second try because on the first try i forgot to select the programmer from the tool menu.
My colleague was getting the “error while burning bootloader” message on the first try too. He had downloaded the zip file from the Arduino
website and extracted the folder so I suggested installing the software rather than using the downloaded folder. He tried that and was able
to successfully burn the bootloader and upload the program too.
So apart from looking in the tool menu to see if all the necessary options are selected and check if the Arduino software you are using is
installed and not extracted, i don’t know what to do if you are unable to burn the bootloader.
<<<---BLINKING--->>>
I first tried the blink code to check if the LED works. You can get the code by going to file > examples > basics and select blink. Prefer to
the schematic of your hello world board and set the led pin number accordingly
You can copy the code from here,
you can copy the code from here too.
<<<---BUTTON AND LED--->>>
The i tried the code i had written few years ago when i was learning Arduino, i changed the led and button pin according to the schematic of
my hello world board
You can copy the code from here,
you can copy the code from here too.
<<<---BUTTON AND LED 2--->>>
Compared to my colleagues, the brightness of my led was too low. So tried the code they were using. To get that code go to file > examples >
digital and select button. Assign the led pin and button pin according to the schematic
You can copy the code from here,
you can copy the code from here too.
group assignment link
https://fabacademy.org/2022/labs/vigyanashram/groupassig/groupassignment4.html
You can download the hello world board and schematic file from here:
hello world
In this week of Computer controlled machining, we had to make something big(in meter scale) of wood from the CNC Router MAchine.
A long back I came accross this video and since then i wanted to make this,
https://www.youtube.com/watch?v=XnNk647Ko0E
Original Creator of this concept:
https://www.instagram.com/warwickturvey/
I did understand the concept of the origami door by seeing that video.
I then came accross this video, which helped me a lot with making the prototype of the door,
https://www.youtube.com/watch?v=Fu0GyFCLT0Y&t=0s
With all the things clear in my mind, I started the design in Fusion 360. I wanted to first try it out onto the cardboard so i designed the
model with parametric design so i just need to scale up if the concept works.
The upper square and the bottom square needs t be symmetric, so i designed the upper part, cut that square into three section
i took the reference of the midpoints to make that 3rd small triangle, but the easy way is to assign them the dimension which is 1/4th of the
length of the square, like this
then i copied the sections and pasted it, and with the mirror function, the door was ready, without pivot joints and hinges
i then designed the hinges and pivot joint
here is the parameters i used at that time,
I then exported parts of the door as DXF fie. You can do that using project feature. Create a sketch and press "P" on your keyboard and select
all the parts you want to export as DXF. Then Exit the sketch mode and right click on the sketch you just created and select "Export as DXF"
with the help of RDWorks software, i generated the toolpath to cut all the required number of pieces and i cut all that pieces into the laser
cutting machine, onto the cardboard
I miscalculated the number of pieces required. The circle with black patch in the middle(it was scanned) was two pieces short. So i cut them
later.
this was the door without hinges and pivot joints,
this is how i made hinges,
since the thickness of the corrugated sheet was 3mm, i stick two hinges together. For the cardboard pieces to rotate onto the single axis i used
chopsticks(3mm wooden sticks). To preven the cardboard pieces from sliding off, i used a stopper on both ends(dimension of stopper 12mm*2mm
concentric circles)
I then stuck 4 pair of hings on the front of the door,
I then stuck 4 pair pair of hinges on the back of the door. Because of the lack of space, i didn't stuck two cardboard pieces,
it turned out that the alignment of two hinges was not parallel so i was having difficulty in closing that part of the door,
i had to remove those hinges and stuck it again. The alignment and position of hinges is the key behind the smooth working of this door. Note
to self, make something in design so that i don't need to calculate/draw while attaching the hinges.
to make the pivot joints, i stuck the small diamaeter circle onto the big diameter circle,
slide that into the pivot point of the door and lock it by sticking same other big diameter circle on the opposite end.
The door will now rotate around the pivot points with the help of hinges,
Here is how the door turned out,
You can download the design file and dxf files for the origami door(cardboard) from here:
DXF file for door parts
design file
When the door i made was properly working as it should, i decided to scale up the design and make some changes so that i can cut the door onto
plywood.
I first scaled up the door from 15inch x 30inch(width x height) to 39inch x 78inch (width x height). Fortunately, the place where i was planning
to install the door had the frame size with 1:2 ratio(39inch x 78inch).
designed hinges, 5 inch one for small triangle,
designed hinges, 7 inch one for large triangle,
gave provision for hinges on the door,
the logic behind the dimensions of hinges and its provision on the door was to have the hinges in alignment,
the reason behind i set the dogbone circle's diameter to 3.16mm is that the dimension of the endmill i was going to use to cut the plywood was
3.16mm.
To avoid any confusion, i am naming hinges as male hinge and provision for hinge on door as female hinge.
I got the dimensions of female hinge after doing test cuts for press fit. Here is how made the design for test cut,
After cutting the test cut onto plywwod i checked allthe slots to see which male to female hinge ratio is better for press fit,
and it was concluded,
to keep the length of male hinge to 1.5inch(5inch hinge) and 3 inch(7inch hinge).
keep the length of female hinge to 1.5inch(5inch hinge) and 3 inch(7inch hinge).
keep the width of female hinge to 0.472inch(12mm).
Here is how my parameters look like,
after the design was ready with partial(yet enough to confirm the design is fine) assembly,
I selected the necessary parts and with the help of "Project" feature in fusion, i exported the design as DXF,
You can download the design file and dxf files for the origami door(plywood) from here:
DXF file for door parts (plywood)
origami door plywood(fusion)
You can download the design file and dxf files for the press fit from here:
press fit dxf
press fit fusion
I was using Shopbot PartWorks software, which was pre-installed in College of Engineering Pune's(COEP) lab. While generating the toolpath you can
create three kind of profile: inner, outer and pocket.
In inner profile, the machine cuts the inside edge of the design,
one usually generates the inner profile for the part which are inside the deisgn.
In outer profile, the machine cuts the outside edge of the design,
one usually generates the outer profile for the outer edge of the design.
In my case, i had to use all three profiles. Here is the step by step description about how i generated toolpath for the door,
Click on "create a new file",
Under "Material stup" i selected units as mm and set the width, height and thickness as the dimension of the plywood i was using, 8x4 feet(2400x1200mm)
and 12mm.
click on file and then import file. Select the DXF file you generated from the design,
When i imported the DXF fie, the design looked very small on the canvas,
I then realised tha the design i made was partly in inches so for the Material setup i set the parameters with inche,
At the time of documenting i realised that i accidentally left the thickness as 12 inches but i didn't faced any issue, so i guess it is fine
importing the DXF file after changing the Material setup to inches,
I copy-pasted few parts and then arranged the parts in the canvas. There was already some test design cut on one end of plywood so i wasn't
able to cut all the parts in one round, so i cut two 5 inch hinges and two 7 inch hinges in the second round, on the same plywood sheet,
Note that while arranging the parts in canvas, always position the parts closest to the origin,
or else machine will go to the position where the part is placed and will start to cut the design there. PartWorks is completely opposite of
RDworks, Partworks won't only consider the design but will also consider the canvas and where you have placed the part to cut.
The red arrow pointed is the origin,
select all the parts on the canvas and click on "Join open vector"
Select all the parts which you want to cut with inner cut then go to "Toolpaths" and click on "Create profile toolpath"
Click on "Select" under tools and select "End mill (0.125 inch)" as the tool,
In the profile toolpath, I set the cut depth as 0.4925 inch(12.5mm), selected inside as Machine vectors and then gave the name and hit calculate,
You can see the preview here,
After the toolpath is generated, click on the "toolpaths" button again and click on "save" icon and then with your inner profile selected, click
on "Save toolpath",
After the toolpath is saved, go to the "Toolpaths" button and delete the inner profile,
After the toolpath for inner cut was saved, i generated the toolpath for pocket. Select all the parts you want to cut with pocket then
Click on "Create pocket toolpath" button under toolpaths tab,
apart from the cut depth which i set to 0.079 inch(2mm) i kept the rest of the settings as it is,
The preview for pocket toolpath,
Repeat the steps of saving the toolpath and deleting the profile from Toolpaths tab, just like i mentioned above.
after the pocket toolpath was saved, click on all the parts you want to cut as outer cut and then go to Toolpaths > Create profile toolpath.
I set the cut depth to 0.4925 inch (12.5mm) and select outside as machine vectors and clicked on calculate,
i was getting the message saying "24 open vector",
I clicked on okay and there was nothing wrong with the preview,
I then join the vectors with 0.0001 inch(earlier it was 0) and re-generated all the toolpaths again,
Here are some heroshots of the machine,
The pipe connected near the spindle is for collecting the dust and debris comming from the plywood while cutting. The the dust and debris
is sucked through the pipe and goes straight to the dust collector,
just like any other routing machine, the shopbot too has a sacrificial layer on the bed,
These are the remote start(green), reset(blue) and stop(red) button. You turn the spindle on and off using the start and stop button. You reset the
previous origin using reset button. You are sometimes instructed by the shopbot software to press the reset button,
You control the movement of the spindle using the four arrow keys and the Page up-Page down key. You move the spindle on the X-axis(green)
using left-right arrow key. You move the spindle on the Y-sxis(blue) using up-downn arrow key. You move the spindle on the Z-sxis(red) using
page up-page down key,
For the group assignment, we had to do the lab's safety training. So apart from learning about how to operate the machine, here is all the things
we did for the group assignment,
Loaded the sheet to do the test cuts,
fixed the plywood onto the bed using multiple clamps,
made a small degign for test cut and generated the toolpaths,
before we cut the design on the plywood, we were instructed when to use the remote start, stop and reset button(i'll explain this later) and
were advised to always be in the close vincinity to the remote buttons in case something goes wrong.
We were instructed to always switch on the dust collector machine before starting to cut the plywood. We were instructed to use the
saftey goggles and noise cancallation ear cups while operating the machine,
cutting the design on the plywood,
Link for group assignment page:
https://fabacademy.org/2022/labs/vigyanashram/groupassig/groupassignment5.html
With the toolpath file for inner, pocket and outer cut ready, it was time to cut the pieces into the CNC wood router machine, Shopbnot. The
toolpath file gemerated is in the form of SBP file. Here is how i cut the design onto the plywood using the toolpaths generated,
I was using the shopbot console(the 2D one) software which was pre-installed in the lab's PC. This is how the interface looks like,
When you open the software, you might get asked
to press the remote reset button, so press the reset button.
You first need to set the origin. To do that use the arrow keys and page up-down keys to move the position of the spindle. But before positioning
the spindle, click on the yellow box box in the console and make sure the lever number 1 and 4 us up,
You first need to set the X and Y axis of the spindle. Once the X and Y axis is set turn the spindle manually on by pressing the remote start button.
Once the spindle is on, bring the spindle down slowly. Keep bringing the spindle down until the endmill starts scratching the surface of
the plywood. Then click on "Zero" and select "zero [3] axes (X, Y & Z)". By doing this you set the origin of the machine and the spindle must
had stopped spinning, bring the spindle up then.
with the origin set, click on "Load Part File" button and select the file you want to cut. Always the inner/pocet parts first and then cut the
outer part at the last,
Once the toolpath is loaded click on the start button,
A menu will pop up asking you to press the remote start button. So press the remote start button and once the spindle starts to spin, click
on ok,
Here are some hero shots of the machine in action,
Inner cut,
just like i anticipated, the machine just plunged once to make the dogbone circles(i already got this result when i cut the test pieces for the
press fit).
Once the machine was done cutitng the inner cuts, i observed that the machine has cut some inner parts which was very close to the clamps. I thought
the spindle might collide with the clamps while doing the outer cuts so i shifted the clamps away(the image you'll see below is for the hinge
so after shifting the clamp, the clamp was posiitoned between two outer cuts of the hinge),
Pocket cut,
Before starting the outer cut i changed the alignment of the clamps for saftey,
Outer cut,
While arranging the parts in PartWorks, i did cosider the size of the clamps but with the context to the endmill. What i should have done was
considerd the play area for the machine with the context of the spindle. The video you see above was a close call and i still change the alignment
of the clamp for safety, before the second pass.
Look at the posiiton of this part after being cut,
Because there were small parts like hinges, i had to press down the parts with a wooden stick during the last pass because the part
would shift from it's position and get crumpled with the endmill. I should have asked my instructor in charge a few more times for the nails
and used them to fix the parts,
Here is the shot of finished job,
This is how the cut part looks like,
The machihe didn't cut the hole in the center, even though i selected that part while generating the toolpath,
Up till now, i had done the job of designing, cutting and assembling the origami door on cardboard to check it's functionality. I had also done
the job of modifying the design and cutting then in the CNC wood router machine. Now the remaining job was to make the cylindrical wooden rod
for the hinges and fitting the door onto the metal frame of the place where i had planned to install the door.
I wanted cylindrical blocks of wood with 1 inch and 3 inch diameter for hinges and pivot points. I looked for the wooden block on thr campus
and found few logs of wood. I then started to cut them in lengths so that i get log of wood which are somewhat straight and favourable for the
lathe machine.
For cutting the logs of wood i used Power Hacksaw machine which was in the workshop. My colleague, Ghanshyam, helped me with cutting few logs
and taught me how to operate the machine,
The logs of wood,
With the logs of wood ready we started to cut them into the lathe machine,
I did cut one side of the log down to 1 inch(it was about 2.75 inch diameter log) and the log was sliding in the hinges pretty fine,
However it took me around 1 hour just to get single side of the log cut down to 1 inch. I had to cut total 12 pieces of log for all the hinges
and pivot points,
I did't anticipate that it would take this much of time to cut the logs on lathe. Also the wooden log i was using was small compare to the
other logs, so i didn't need any support from the other end of the lathe. I was cutting this wooden logs on June 28, 24 hours before the
local evaluation deadline, so i decided to skip the idea of cutting all the 12 logs into lathe and considered purchasing the logs from market
or to place
the order to someone who can give me logs of cylindrical wood with the dimensions provided. So i will continue to work on the door
once i get the cylindrical wooden logs for the hinges and pivot points.
Edit: 13th July, 2022
After the local evaluation was done, i tried to search for some vendors in Pabal where i can get the cylindrical wooden logs. With no success
in finding any vendor in Pabal i had to travel to Pune in search for the wooden logs. There is a timber market located in Bhavani Peth area
in Pune where i found a carpenter with wood turning lathe machine. I gave him the order for wooden logs and provide him the dimensions and
after a couple of minutes, my wooden logs were ready. Circumstances were such that i was not able to shoot any photo or video, but just to give
you an idea about how wood turning lathe machine works, here is a youtube video for that,
https://www.youtube.com/watch?v=JSEVwvrpewE
Here are the cylindrical wooden logs with 1 inch diameter and 2 inch length for hinges,
Here are the cylindrical wooden logs with 3 inch diameter and 1 inch length for pivot point(door handle),
Here are the cylindrical wooden logs with 3 inch diameter and 6 inch length for pivot point(on which the door will be mounted),
It was then that i realize that i forgot to cut the stopper for hinges in the shopbot machine. So i cut the stopper into the laser cutting
machine with 6mm plywood sheet,
There was a piece in the design files with a 3 inch hole in the middle. Now at the time of generating the toolpath i did select the circle for
cutting but still the machine didn't cut the hole,
We don't have the shopbot machine in the lab so for the assignment i had to visit COEP college in Pune. While i was there on the campus cutting
the pieces onto the shopbot, i realised that the machine has not cut the holes in two pieces. I then generated the toolpath for the two pieces
and tried to cut them again but due to some error "Parameter vakue below range for VS" i was not able to cut the pieces that day. I talked to
the instructor in charge of the machine, Ms. Apeksha, regarding the error and after getting assurance that she'll help me with cutting those
2 pieces, i travelled back to Pabal. After waiting for 5 weeks, i still didn't got any help from their side so with no option left i
had to work out with the 2 pieces that i had.
So i drilled multiple holes in the circular pattern(taking measuremenmt of 3 inch circle) and cut the wood in between the hole with the help
of hacksaw and smoothen the inside surface with sand paper,
with all the parts of the door ready, i started the assembly. I started with atatching the hinges. I used glue for better adhesion, though
even without the glue, the grip was strong but i didn't want to take any chances,
with the hinges attached, i started to insert the cylindrical wooden logs into the hinges and pivot points and locking the cylindrical
wooden log from slipping by attacing the stopper on both ends,
atatching the stopper onto the cylindrical wooden log was not that simple like put the stopper onto the wooden log and screw them together.
I had to first drill hole in the wooden log as well as the stopper and then screw them together,
while screwing stopper i should have designed and cut a piece of MDF/Plywood with the same diameter as the cylindrical log and
a hole in the centre so that i didn't had to measure the centre of the log or tentatively drill the hole in the centre which resulted
into hole being offset to the centre.
this is how the cylindrical log with the stopper for hinges looked like,
this is how the cylindrical log with the stopper for pivot point(door handle) looked like,
this is how the cylindrical log with the stopper for pivot point(on which the door will be mounted) looked like,
with the cylindrical log ready with stopper attached, i started inserting them into the hinges and pivot points of the door,
with all the cylindrical logs insterted into hinges and pivot point with stopper screwed on both ends, i tried to lift the door handle and
the door handle came right off because there wasn't enough grip in the screws. I considered buying thicker screws but then i came up with the
idea of useing bolt and nut, so i again drilled bigger hole in the stopper and cylidrical logs and then inserted them into the pivot
point of the door handle. There was need to insert the bolt and nut just for the pivot point of the door handle since the stopper for hinges
and the stopper for the pivot point on which the door is going to mount won't have to face this much pressure, the stopper was there just
to avoid the hinge log and pivot log to slip out.
this is how the cylindrical logs are inserted into the hinges,
this is how the cylindrical logs are inserted into the pivot point of the door handle,
this is how the cylindrical logs are inserted into the pivot point on which the door will be mounted,
if you watch the last video, you'll observe that i was able to lift the door and the bolt and nut was doing its job of keeping the stopper
and the log attached. However i was not able to fold the door around the hinges as i wanted,
a guy passing around the workshop told me that the two small triangle piece, where i have inserted the pivot point for door handle was clashing,
so i removed a chunk of plywood from both the small triangle with the hacksaw. I somehow managed to cut straight on one piece and not-so-straight
on the other piece,
even after cutting the small triangle, the door was still not folding! I then went to the lab and took out the prototype i made on the cardboard
and it was then that i realised that i made a HUGE mistake! I was suppose to attach the hinges on the centre trapezpoid and the small triangle
on the BACK of the door. Instead, i attached all the hinges on the front of the door!
after realizing my mistake, i re-attached the hinges. Fortunately, the hinges came off with just pressure and i didn't need to cut the piece or
whole part,
Here is the working of the door(not very smooth),
some heroshots,
I started the day with cutting the stopper inlaser cutter at 15:21 and by the time i was done re-arranging the hinges it was 09:04 the next
day. Now the only task remains is fitting the door at the office. To do that we need to weld two pipes onto the metal
frame, and through the pipe we need to insert the 3 inch diameter 6 inch length cylindrical rod and re-screw the stopper on both endes
to prevent the door from sliding. I have currently left Vigyan Ashram after getting assurance from my local instructor that he'll
help me by fitting the door into the office. Will update the documentation later if i get any response from my local instructor.
In this week of embedded programming, we were suppose to program our "Hello World" board with our "Programmer". Apart from the hello world
board we explored few other board and program them using different languages under different developement environment.
Here is the list of the boards, languages and environment i explored this week,
Boards
Arduino UNO
Hello World
esp32
Languages
Embedded C
Pure C
MicroPython
Environment
Arduino IDE
Avrdude (gitbash)
Thonny IDE
Here are the list of all the combinations i tried with their following results,
In the week of electronics design, we had to make our own hello world board and program it with the help of programmer(which we build
in the week of electronics production) to check if the board actually functions or not. At that time i had programmed the hello world board
using arduino language with the adtuino IDE so that when i press the push button, the LED will glow. I didn't tried it again this time, so I am
just mentioning the code and the results here,
the code i used,
you can copy the code from here too.
I am explaining in brief what i understand about the embedded c code written above,
In the void setup ()
you define the pin modes, whether the pin should be considered as input or output. If you want
any data to show in the serial monitor, you write Serial.begin(9600);
. In the void setup you usually declare things
In the void loop()
you write the function which you want to perform repeatedly.
In the void setup there is written pinMode(2, OUTPUT);
where we are declaring pin 2 as output pin, that is
where i have attached the LED and in the pinMode(3, INPUT);
where we are declaring pin 3 as input, that is
where i have attached the push button.
In the void loop, there is written buttonState = digitalRead(3);;
which means we are telling the controller to read
the state of the push button, whether it is pushed or released, more on this later. Later in the void loop there is written
if (buttonState == HIGH) {
where we are telling the controller that if the button state is high, mwaning if the button is being pushed, digitalWrite(2, HIGH); meaning
make the pin 2 high meaning pass the current to the pin 2 making the led glow. Else, digitalWrite(2, LOW); meaning turn the led off.
here are the results,
// turn LED on:
digitalWrite(2, HIGH);
} else {
// turn LED off:
digitalWrite(2, LOW);
i tried to program Arduino UNO using Arduino language with Arduino IDE to give blinking effect to two LED's,
Here is the code I used,
you can copy the code from here too.
Here are the results,
This time i tried to program Arduino UNO using Embedded C language with Arduino IDE to give blinking effect to two LED's,
Arduino is comparatively simple and wasy to understand languange than Embedded C. You'll get a better idea if you compare the code written in
Arduino and code written in Embedded C so here is the code i wrote with Pure c,
you can copy the code from here too.
Here are the differences between the Arduino and Embedded C,
[1] In the embedded c, you need to include the input/output pins and delay library. While in Arduino you don't need to include any such
library.
[2] In the Arduino you define the input/outpin pin by writing pinMode(2, OUTPUT);
where the "2" defines the
digital pin number written onto the UNO and "OUTPUT" defines outuput. While in the Embedded c,
you either write DDRC = 0x01;
or
DDRB = 0B001000;
Where DDR stands for data direction resistor and DDR decides whether the pins are imput pins or
output pins after giving the address of the pin. The letter following the DDR is the name of the port, DDRA means pins in port A, DDRB means
port B and so on. Every integrated circuit(IC) has their designated port pins named by PA, PB, PC and you can see that in their pin out.
This is the pinout of the UNO,
As you can see in the image above, the digital pin 9, 10, 11, 12, 13 in Arduino UNO means PB1, PB2, PB3, PB4, PB5. This clearly means that in
embedded c you cannot use the digital pins that are assigned to the board but you need to take the reference of the port pins.
After selecting the port by writing DDRA/DDRB you need to give the address of the particular pin. The address is either written in binary form,
0bx00000100;
where the 0b represents binary or the address is written in hexadecimal form,
0x01;
where the 0x represents hexadecimal.
this is how i calculated the address of the pin for UNO,
reference link: https://components101.com/microcontrollers/arduino-uno
calculating the address in binary form: after refering to the pin out of the UNO, write all the port pins(PB1/PC1) in the middle.
Write the associated digital/analog pins(1/A1) number below the port pins. Starting from PB0/PC0 make a partition after four port pins and
assign them value 1 for PB0/PA0, 2 for PB1/PC1, 4 for PB2/PC2, 8 for PB3/PC3 and write that value below port pins.
now lets say you have attached a LED onto digital pin 6(PD6) so the PD6 pin will be output hence PD6 will be 1 and rest of port D pins
will be 0. So,
PD7 = 0
PD6 = 1
PD5 = 0
PD4 = 0
PD3 = 0
PD2 = 0
PD1 = 0
PD0 = 0
so the address for defining digital pin 6 as output in binary form will be 0b01000000;
calculating the address in hexadecimal form: in hexadecimal instead of writing 1, you need to write the value of the port pin which
you want to assign as output pin amd for the rest, write 0 as the value. Now lets say you have 6 leds attached from digital pin 0 to 5(PD0 to
PD5). The value for the pins will be
PD7 = 0
PD6 = 0
PD5 = 2
PD4 = 1
PD3 = 8
PD2 = 4
PD1 = 2
PD0 = 1
the total of PD7 to PD4 is 3 and the total of PD3 to PD 0 is 15. so the address for defining digital pin 6 as output in binary form will
be 0x3F;
In hexadecimal you can write digits only upto 9. After 9 you need to assign the letter like 10 = A, 11 = B......15 = F and so on.
[3] In the arduino, you write digitalWrite(2, HIGH);
if you want to turn on the LED on pin 2 and you write
digitalWrite(2, LOW);
if you want to turn off the led on pin 2. In embedded c if you want to turn on the led you
you write PORTC |= 0x01;
where |=
is HIGH and to turn off the led you write
PORTC &= ~ 0x01;
where &= ~
is LOW. The delay in Arduino is defined as
delay(1000);
and in embedded c you write delay as _delay_ms(10);
Here are the results,
As tou have seen above, in the electronics design week i had programmed my hello world board with Arduino language where the LED will glow when
i push the push button. This time i wanted to try the same, but with embedded c language.
Here is the code I used,
you can copy the code from here too.
Here are the results,
for some reasons the outcome of the push button with led was very weird. Initially it was working fine like the led will turn on only when the
button is pushed and it will turn off when it is released. Then the led seemed to be froze, like there was no effect of the push button on the
led. And then turning off of the led was random, like sometimes the led will turn off when the button is released and sometimes the led will
froze with no effects of push button on it.
I thought there might be some issue with the connections in the board so i tweaked the code a little bit to give blinking effect when the button
is pushed. Here is the code with the blinking effect,
you can copy the code from here too.
and here is the results,
as you can see, the push button and the led works fine after adding the blinking effect. I then again tried to upload the button code with
arduino language(the fist code in this tab) and as expected, it was oworking fine(i don't know why i didn't tried it first before trying
with the blinking effect). So i knew there was something wrong with the code. I then showed all three codes with their results to one of my
local instructor and after few trials she was successful with getting a code which works exactly like the button code in the arduino language.
Here the code she edited in the buttonled.ino,
you can copy the code from here too.
Since i had yet to explore the AVRdude environment, i deccided to try the code which my instructor edited, in the AVRdude environment. Here is
how i programmed my hello world board using embedded c language with AVRdude environment,
[1] copy the code and paste it into the notepad. Save the notepad file as source file with ".c" at the end of the file name. You can
keep the file type as Text Documents or All files, it doesn't matter.
[2] you can get the make file from here: http://academy.cba.mit.edu/classes/embedded_programming/hello.ftdi.44.echo.c.make
copy that and paste it into the notepad. You need to edit the name of the source file mentioned inside, you can also change the name of the
IC and frequency. My colleagues had already done the trial and error, so i directly set the frequency to 1MZ. After making the necessary
changes save the notepad file as make file with the same name as the source file, but just add ".make" at the
end of file name. For example you have given the source file name as xyz.c then name the make file as xyz.c.make. select the file type as all
files.
With the source file and make file into one folder, execute this three commands into gitbash,
make -f buttonled2.c.make
open git bash and set the directory where you have saved the source file and make file or you can go to that folder and right click > select
git bash here. You need to write name of you make file in the place of "buttonled2.c.make"
after executing the make command, you will see that two files will be added into the folder, make file and out file.
make -f buttonled2.c.make program-usbtiny-fuses
Again you need to write name of you make file in the place of "buttonled2.c.make"
make -f buttonled2.c.make program-usbtiny
I was getting some kind of error while executing this command. I thought there was some kind of typing mistake so I again re-write the command
and this time the code was executed without any error,
the program was executed successfully but the push button and led was not functioning at all. So I tried to upload some other program using
arduino IDE and arduino language, and i was getting error while uploading the sketch,
i tried few things like changing the USB extension cable, changing the port i was using, changing the ribbon cable, but i was still having the
error while uploading the sketch. Then I burrowed my
colleague's hello world board and i was facing no error while uploading the sketch into his hello world board. I then checked few conections
using continuity function of the multimeter to see if there any problem with the connection since there is comparatively more stress on the
header pins than other components and i found there was no problem with any connections.
One of my colleague had faced the same issue of getting the error while uploading the sketch. When i asked him how did he solve the problem,
he told me that he changed his hello world board IC. Then my other colleague took my hello world board and did some reflow onto the IC pins,
after the reflow/resoldering, my hello world was back to normal and i was facing no issue while uploading the sketch.
and here is the result,
Lastly i tried esp32 board using micropython language with thonnyIDE. I was following this tutorial:
https://randomnerdtutorials.com/getting-started-thonny-micropython-python-ide-esp32-esp8266/
You can go through the blog, the steps mentioned there are well explained and fairly detailed. I will mention few of the steps here in brief,
[1] Install ThonnyIDE
you can download the thonnyIDE from here: https://thonny.org/
[2] Flashing the MicroPython firmware into ESP32
By default, esp32 cannot understand micropython language so we need to flash the micropython firmware into the esp32 using thonnyide. You can
download the micropython firmware for esp32 from here: https://micropython.org/download/esp32/
After downloading the firmware, connect tghe esp32 into your system and open thonnyide and go to Tools > Options > Interpreter. Under the
interpreter, select "MicroPythonESP32" and under port select the port. Then click on "Install or update firmware".
A new window will pop
where you again need to select the port and give the file path where you have downladed the firmware. Click on install and your firmware
will be installed. (((ss of the installations)))
[3] Checking if the firmware is installed properly
Go to Tools > Options > Interpreter and select the correct interpreter and port. Under the shell section type help()
.
If it responds back with "Welcome to MicroPython on the ESP32" that means the firmware was installed sucessfully.
In the shell section write these command one by one,
from machine import Pin
Pin(2, Pin.OUT).value(1)
and you'll see that the in-built led in your esp32 will turn on.
I then tried to program the esp32 by writing the code in the editor section. First save the file in your system and name it as "main.py"
if you give any other name, the program will not work!
this is the code i used for turning on the led,
from machine import Pin
from time import sleep
led = Pin(27, Pin.OUT)
while True:
led.value(not led.value())
sleep(0.5)
After writimng the code, go to File and select Save as and this time select "MicroPython decice" and your code will be uploaded. Unlike arduino
UNO, it won't directly show the effect. You need to press the "en" or "reset" button on the esp32 and then the code will come into effect.
here is the result,
in the individual assignment, we had to read the datasheet of microcontroller. For my final project, i initially decided to use attiny1614
IC.
You can download the datasheet for attiny1614 from here:
https://ww1.microchip.com/downloads/en/DeviceDoc/ATtiny1614-16-17-DataSheet-DS40002204A.pdf
Here is all the things i got to know after going through the data sheet,
- attiny1614 has 14 pins. 10/14 pins can be used as analog pins: PA0-PA7 and PB0-PB1. 2/14 pins can only be used as digital pins: PB2-PB3.
6/14 pins can be used as PWM pins: PA3-PA4-PA5 and PB0-PB1-PB2.
- attiny1614 has 2KB of SRAM
- attiny1614 has 16KB of FLASH memory.
- attiny1614 has 256 bytes of EEPROM.
Here are the provision of the pins,
- if you want to use I2C devices like OLED, you need to connect the SDA-SCL pins on PB1-PB0 pins of the IC.
- if you want to read the data serially into the seria monitor, you need togive the provision for TX-RX on pin PB3-PB2.
- for programing the attiny1614 you'll need a programmer and you can program it with PA0 pin which is the UPDI pin. If your programmer have
TX-RX pin instead of UPDI pins, you can use a serial to UPDI converter.
For the group assignment we explored different architecture like Arduino UNO, Hello world and esp32 with different languages like Embedded c,
Pure C and MicroPython with different environment like Arduino IDE, AVRdude(gitbash) and Thonny IDE, detailed description of which
you'll find above. For more details regarding group assignment you can visit here:
https://fabacademy.org/2022/labs/vigyanashram/groupassig/groupassignment6.html
In this week of molding and casting, we were suppose to try different molding and casting material and also read their technical and safety
datasheet for the group assignment.
I was assigned to test on one of the epoxy resin we have in our lab. This is the resin: Crafty Nibbles epoxy i used for testing,
I am mentioning some of the technical details and safety measurements for the epoxy resin i used, for more details of the crafty nibbles epoxy
resin, check the description of their website: https://createout.in/product/crafty-nibbles-deep-casting-resin/
- Epoxy resin comes in two parts, which you need to mix them in the ratio suggested by the company. One part is resin(A) and another part
is curing agent(B), also known as hardner. In my case i had to mix 100 oparts of resin with 30 parts of hardner or we can say the ratio of
resin to hardner was approximate 3:1.
- After mixing part A and B you need to stir the mixture for at least 3 minutes.
- The working time of the epoxy is 60 minutes, that means after mixing the epoxy and hardner, use that for casting within 60 munutes.
The gel time is 90 minustes, that means between 60-90 minutes the mixture will become thicker and thicker, you can use that for casting but
it won't be in its most liquid form so the epoxy won't reach into every corner of the negative mold.
- if cured at 25° it takes 24 hours to dry
- You must wear gloves while working with the epoxy. From my personal experience, if a freshly mixed epoxy is spilled in your hand, you
can easily rinse it off by washing your hands with water and soap. But if the resin is cured for a few hours and then it is spilled in your
hand, you need to deeply rinse your hands off with Isopropyl Alchohol.
- it is suggested to wear goggles while working with epoxy
We had some test molds in our lab, which the previous students had made so i decided to test the Crafty Nibbles epoxy on a small hammer mold,
First i had to find out how much grams of epoxy would be consumed to fill up the test mold. So what i did was fill the test mold with water,
measured the weight of the water which was around 9 grams so i took a tentative figure that i would need 12 grams of epoxy, considereing the
density of the epoxy is more than water.
As mentioned above, i had to make the epoxy of 12 grams with resin and hardner in 3:1 ratio, so the ratio was 9 grams of resin with 3 grams
of hardner. I then started mixing the resin and hardner in the ratio mentioned and stirred them for around 3 minutes,
The resin,
The hardner,
The mixture,
After mixing the resin and hardner, i stirred the mixture for arounf 3 minutes,
AFter the epoxy was ready, i started to pour the epoxy into the mold,
Here are the other different casting material my colleagues tested,
It took about 8 hours to cure the expoxy because the mold was very small.
However you should always wait 24 hours before removing the epoxy if your
mold is large.
Link for group assignment page:
https://fabacademy.org/2022/labs/vigyanashram/groupassig/groupassignment7.html
Before jumping into describing what i did in this week's assignment let me give a brief explaination about the negative and positive molds,
so you first make a positive mold on the machinable wax.
Then you make a negative mold with the help of casting material like silicon rubber. To make the negative mold, pour the casting material into
positive mold you made onto the machinable wax.
Then you make final positive mold with the help of casting material like expoxy, hydrostone etc. To make the positive mold, pour the
casting material into the negative mold you prepared.
In the individual assignment, we had to design, mill and cast a part. This assignment is divided into four parts,
Designing the mold
Milling the mold
Making the negative mold
Making the final model (positive mold)
I first had to decide what i want my final model to be and then had to make a mold considering the final model. I wanted to make a self balancing
toy as my final model. I came accross this youtube video,
where the person made a self balancing toy with barbecue sticks and used glue gun sticks as weights. I started making the model with the
same dimensions as he was using for the barbecue sticks,
Then with Boss extrude feature, extruded the lines,
and then added weignts and my final model was ready,
Since the final model was very huge, i scaled it down and made border around it to convert it into a mold. I also added male-female joints into the
mold which will act as lock when i press both side of the negative mold together, you'll
get a better idea about this later,
Instead of making a pipe like structure to pour the casting material, I made the border passing through the weight and that wil act as a entrance
for the casting material to get poured. Usually, while making the mold, you need to give the provision for two holes, one for pouring the
casting material and other for the air to vent out while you're pouring the casting material. With the border passing through both the weights,
my design was serving that purpose.
after the mold was ready, i reduced the thickness of the mold from one side so that there is only 0.1 mm space left at the end of the design(the
end of the design is the female joint),
because the thickness of the machinable wax was twice the size of design and the milling machine was only going to cut upto the female joint,
the rest of the space below the female joint was anyways going to be extra,
Exported the design as .STL format and my mold was ready for the milling.
Here is the overview of the self balancing toy (mold),
I decided to mill the machinable wax into the Roland SRM 20 machine. To move the XYZ axis of the spindle and to set the origin, i was using
V-panel software and for generating the toolpaths for the mold, i was using Modela Player 4 software.
Milling the machining wax is divided into three stages: Surfacing, roughing and finishing. I used 1/8 inch flat endmill for all the three
stages,
Before generating the toolpath, i first fixed the machinable wax into the machine. Unlike the PCB/coper clad, a 3M double sided tape is not
enough to keep the machinable wax in it's place so i had to use hot glue in addition for better adhesion. I glued on the front, left and right
side of the wax and i also glued the sacrificial layer because the vibrations can remove the sacrificial layer too,
Surfacing means removing few layer from the top surface so that you'll get a smooth and even surface from the top. Here is how i generated
the toolpath for surfacing,
Open the STL file of the mold,
Go to File > Select machine and select "SRM-20" as Model name and select "Roland SRM-20" as printer name,
Go to Set > Model and under Size and Orientation tab, select the top surface. The orientation you select will be the orientstion in which the
machine will mill your mold. You
can see the overview of the top surface in the box under orientation
Under origin tab, select the bottom left corner,
Since i was going to use machinable wax, i selected "Modeling Wax" for Material and then click on New process button. In the peocess menu,
i selected surfaccing,
Kept Top[+z] as default and didn't change anything,
Select "3.15mm Square" as tool,
Under "Specified area" tab, depending on how uneven is the surface of your wax, select the depth cut. The dimension you enter there is the amount of inches that will be
removed from the top surface. Also tally the dimension mentioned: X and Y of the lower left should be 0 and X and Y of the upper right should
be the dimension of your mold,
I kept the scale line as "X"
I then kept the settings as default for the Cutting Parameters,
Select right now,
This was the overview of the surfacing,
Click on the surfacing toolpath and then click on "Cutting" icon and kept all the settings in there as default and didn't changed anything,
After clicking on the "continue" button milling machine will start to remove the layers from top surface for surfacing, so make sure
you have set the origin of XYZ axis from the Vpanel before clicking on the continue button
Problem faced while surfacing,
So my goal was to set the XYZ origin just once and then call the spindle to the XYZ origin before doing surface, rough and
finish cut. So considering the total depth of my mold, which was around 20mm i was going to insert the endmill into the collet in a way
that 25mm of the endmill sticks out of the spindle,
However, when i set the origin and started to cut for surfacing, i was getting an error where the LED onto the machine atarted to
blink. Here is the video showing that,
In the above video, after i set the origin, i moved the spindle up a little bit(on the Z axis) and then i started the milling process from the
generated toolpath.
How i solved the problem
One of colleague suggested to insert the endmill a little bit more inside the collet so that only 10-15mm of the endmill sticks out of the
collet. I tried doing that and again set the XYZ origin and then when i started the milling process from the generated toolpath, the machine started
to mill,
After the milling machine is done with the surfacing, collect all the debris of wax into the tray. You can melt them into new wax block and use
it again. This is how the wax block looked like after surfacing,
For roughing, the procedure for generating the toolpath is same like surfacing, except i selected "Roughing" while generating the toolpath. Here
are all the steps for generating the toolpath for roughing,
tally the dimension of the end height, it should be the same as your mold's height
Preview of roughing,
Here are the results after roughing was done,
For finishing, the procedure for generating the toolpath is same like surfacing and roughing, except i selected "Finishing" while generating the
toolpath. Here are all the steps for generating the toolpath for finishing,
problem faced while finishing
After the milling process for finishing started it was milling fine for few minutes, but after a point, the spindle started milling deeper
and deeper until i got some error in PC(the one i mentioned above where the LED on the machine was blinking) and also the endmill got loose
from the collet,
and yes, i did tighten the screw of the collet properly with the endmill inside, while doing the gravity for Z axis.
I again set the origin and re-started the milling process. Once again, the machine was milling fine for the first few minutes and then after a
point, the spindle started milling deeper and depper until i got the error(mentoined above) and again the endmill got loose from the collet.
However, this time i managed to capture that while recording,
Because the endmill plunged deeper into the mold, the wax block slide an inch or two from one side of the plate. I managed to slide it back to
it's place and again used hot glue to stick it but there has to be some offset becasue it can't be possible that i placed the wax block
exactly on the same place.
how i solved the problem
The only thing i remember is that my colleague, Kiran Wakchaure, did something with re-setting the origin. He first called the spindle at its
origin and then he slide the spindle to the left a bit, making offset in the X axis and then set that position as the new origin. The offset was
very minimal. And then i again started the milling process and this time the machine didn't plunge the endmill deeper.
This is how the mold looked like after the finishing was complete,
It took me 12 hours to surface, rough and finish cut the mold, supervising the machine most of the time.
And yet the mold that came out had smooth finish on some places and rough finish on some places. I don't know whether it was because the wax
block slide
on it's place or did i made some mistake in generating the toolpath or was the machine malfunctioning?
After the mold was ready on the wax, it was time to make the negative mold. I used silicon rubber to make the negative mold. We had this silicon
rubber cast in our lab,
There is a base compound and catalyst and you have to mix it in 100:5 ratio, 100 parts of base compound and 5 parts of catalyst. To know how much
silicon rubber would require to make the negative mold, i pour water in one side of the wax mold and measured the weight of the water. The measurement
came out as 70 grams for one side. So i tentatively considered that i would need 80 grams of silicon rubber for one side of the mold. If the
measurement turned out to be wrong, i would have compensated while making the silicon rubber for the other side of the mold. With that
i had to mix 76 grams of base compound with 4 grams of catalyst.
In the below photos, you'll see that i am taking 3-3.5 grams extra when taking the base compound and catalyst. The reason is that the weight
of the cup was 3-3.5 grams and i was not able to set the weight measurement of the weighing machine to 0 after putting the empty cup.
I first poured the base compound: 76 grams (76 grams + 3 grams of empty cup),
then i poured the catalyst: 4 grams,
I then stirred the mixture for a couple minutes,
after the silicon rubber was ready, it was time to pour it into one side of the wax mold. My colleague suggested to apply petroleum jelly inside the
wax mold so that i can easily remove the silicon rubber once it is cured,
As you can see in the last image above, the the mixture turned out to be sufficient. Few more grams of mixture wouldn't have wasted, however i
decided to make another mixtre with the same measurements for the other side of the wax mold
I set the mold aside and let it cure for 24 hours. Here is how the negative mold turned out,
The rough surface of the wax mold did reflect in the negative mold and also there was some offset in the male-female joint(i checked the design
and the joints are mirrored),
so i had to wrap multiple rubber bands around the negative mold/rubber mold to fix them together, i made sure that the rubber mold was not
squeezed
After the rubber mold was fix together with rubber band wrapped around, it was time to pour a casting material into it. I decided to use epoxy,
the crafty nibble one i tested during the group assignment.
Before fixig the rubber old together, i had poured water in it and took the weight
measurement of the water and with that measurement, i took the tentative measurement that i would need 25 grams of epoxy. So it would
require 18 grams of resin and 6 grams of hardner to make the epoxy. As mentioned above, the weight you'll see in the photo will be 3-3.5 grams
more which is the weight of the cup since the weighing machine was not able to set the measurement to 0 after placing the cup,
The empty cup,
The resin: 18 grams (18 grams resin + 3.42 grams of empty cup),
The hardner: 6 grams,
After that i stirred the mixture for 3 minutes,
after the epoxy was ready i started pouring the epoxy into the rubber mold,
Fortunately/unfortunately the mixture of epxoy i made this time was few grams more(5-8 grams), however, because the rubber mold was not fixed
together properly due to offset in the male-femakle joints, the epxoy was leaking from the gaps of the rubber mold. So i had to continuously
pour the epoxy every 15-20 minutes for 1-2 hour to a point where all the extra epoxy that was left got used in re-filling the rubber mold. After
1-2 hour, the epoxy started curing and was becoming thich enough that it stopped leaking from the gaps.
I let the epoxy cure for 24 hours and here is how is turned out,
(((vid 04)))
after little bit of cleaning,
i trid to balance the toy onto a 3d printed bolt and here is how it looks,
i then inserted a needle into the toy. I had to heat the bottom of the toy with heat gun to insert the needle,
I tried to balance the toy with the needle inserted, onto the tip of the pencil and here is how it turned out,
You can downlaod the design file of mold from here:
self balancing toy
In this week of Output devices, I explored a few component that comes under output devices. I initially tried them onto the Arduino UNO
board with Arduino language because the wiring is easy, you don't need to solder anything and you can quickly re-wire if there is any mistake
and the Arduino language is easy to understand and also you'll find a lot of tutorials online of how to operate a specific output device with
Arduino. In my final project of detecting water leakage, I would require something to give feedback if the leakage is detected. For the instant
feedback I can use buzzer and led, for giving feedback in the form of data, i can use a LCD or OLED display. So in this week, apart from
LED's(which I have already explored while making hello world board), buzzer, LCD and OLED, I explored few others output components, more on
that later.
For buzzer and LED, I used digitalWrite
for the buzzer which is either HIGH or LOW(on or off)
and for the LED i used analogWrite
where you can set the brightness between 0 and 255 where 0 is
lowest brightness and 255 is highest brightness. For using the analogWrite
command you'll need
to use PWM pins(pin number 3, 5, 6, 9, 10, 11), the one indicicated by the symbol "~" onto the arduino board.
<<<---WIRING--->>>
For the buzzer, i attached the anode pin onto digitalpin 8 and cathode pin to the ground.
for thr LED, i attached the anode pin onto digitalpin 3 and cathode pin to the ground.
(to identify which pin is anode or cathode look at the size of the pins, anode pin will alwayes be longer than the cathode pin.)
<<<---CODE--->>>
This is the code i used for programming,
you can copy the code from here too.
In the first two lines, i defined the pin number of the LED and buzzer. In the void setup() {
i defind whether the LED pin and
buazzer pin are input or output. In the void loop() {
, with the help of digitalWrite
i turned the buzzer on and then
turned if off. In between turning the buzzer on and off, with the help of analogWrite
, i turined the LED on from lowest brightness
to the highest brightness and then back to the lowest brightness. At the end i gave the delay of 2 seconds(2000 milisecond)
<<<---OUTCOME--->>>
Here is the results after uploading the code to the Arduino UNO,
I am using the 16x2 character LCD. To operate the LCD, one can connect the LCD with the Arduino in two ways. One way is to directly connect the LCD with the Arduino which would
require 16 pins and that would be very messy. Another way is to connect the LCD with the I2C module then connect the I2C module with Arduino
which would require 4 pins.
<<<---WIRING--->>>
In the I2C module, you will observe a single pin surrounded by a box. You need to attach the I2C with the LCD in the orientation where the box
pin is connected with the pin1(VSS) of the LCD. Now connect the GND and VCC of I2C with GND and VCC of Arduino and connect the SDA and SCL of the
I2C with A4 and A5 of the Arduino respectively. SDA and SCL are assigned to the specific pins of any IC, you cannot use any other pins. For
better understanding of wiring refer to https://lastminuteengineers.b-cdn.net/wp-content/uploads/arduino/I2C-LCD-Display-Pinout.png. This is a
website where you'll find a lot of information regardiing how to connect and run multiple devices with arduino:
https://lastminuteengineers.com/
<<<---CODE--->>>
This is the code I used for programming,
you can copy the code from here too.
Source of the sketch i used: https://github.com/futureshocked/ArduinoSbS2017/blob/master/_0710_-_LCD_I2C/_0710_-_LCD_I2C.ino
I installed this library called "LiquidCrystal I2C" by Marco Schwartz from sketch > libraries > manage libraries.
There is a line in the sketch LiquidCrystal_I2C lcd(0x27,16,2);
where 0x27 is the hexadecimal address of the I2C device. Each
I2C device has different Hexadecimal Address and to find that you need to upload the below sketch while your I2C is connnected in your system
and after the sketch is uploaded, you'll find the I2C address in the serial monitor,
you can copy the code from here too.
Source of the sketch I used for finding hexadecimal address of the i2c: https://www.instructables.com/OLED-I2C-DISPLAY-WITH-ARDUINO-Tutorial/
In the void setup()
there is a line lcd.setCursor(4, 0);
which is setting the row and column number where you want to
start displaying. lcd.setCursor(x, y); where y means is on which row you want to display the text, 0 means first row and 1 means
second row. x means on which column you want to start displaying the text, 0 means first column and so on.
<<<---OUTCOME--->>>
You can see me tweaking the x and y value to change the alignment of the texts.
I was using the 0.96 inch OLED display. OLED is quite similar to the 16x2 character LCD display. Unlike the LCD you don't need a separate I2C
module to operate the OLED. OLED works on pixels so apart from text, you can do a lot of other creative stuff like form an image and you can
also form animations on the OLED.
<<<---WIRING--->>>
There are four pins onthe OLED display. Connect the GND and VCC of the OLED display with the GND and VCC of the UNO. Connect the SCK/SCL pin of
the OLED with Analog pin A5 and connect SDA pin of the OLED with the analog pin A4 of the Arduino UNO.
OLED Text
<<<---CODE--->>>
This is the code is used for displaying the text on the OELD,
you can copy the code from here too.
Reference link for the OLED text: https://www.youtube.com/watch?v=_KD7skmusTQ
You'll meed to first install these libraries from sketch > include libraries > Manage Libraries,
- Adafruit GFX library by Adafruit
- Adafruit SSD1306 by Adafruit
Just like the LCD, you'll first need to find hexadecimal address of you OLED by uploading the I2C finder code to your UNO while your OLED is
connected. You'll find the code above. display.begin(SSD1306_SWITCHCAPVCC, 0X3C);
replace the 0x3C with the hexadecimal address
you find in the serial monitor.
In the void loop() {
there is a line display.setTextSize(1);
where you need to set the size of the text. When i was
testing, i was only able to set the size as a whole number like 1, 2, 3 and not 0.5.
Just like in the LCD there is display.setCursor(0,0);
where uou can set the row and column number where you want to start displaying
the text. display.setCursor(x, y); where y means is on which row you want to display the text, 0 means first row, 1 means
second row and so on. x means on which column you want to start displaying the text, 0 means first column and so on.
<<<---OUTCOME--->>>
OLED Image
To show an image onto the OLED, we will take and image and convert it into bitmap and upload it to the Arduino UNO.
<<<---CODE--->>>
This is the code i used for displaying an image onto the OLED,
you can copy the code from here too.
To show an image into the OLED, you need to to convert the image into the bitmap. The bunch of hexadecimal numbers(0xff) that you are seeing
are the bitmap of the image.
Below is the blank sketch for you to paste the bitmap,
you can copy the code from here too.
Converting an image to bitmap
For testing i was using black and white icons, without a lot of details. You can download free icons from website like: https://iconarchive.com/
AFter sellecting the image, go to this website: https://javl.github.io/image2cpp/
and follow these steps to convert your image into bitmap,
- under "select image" tab upload the image which you want to convert into bitmap.
- under the "image settings" tab set the canvas size to 128x32 pixels
- For scaling select "scale to fit, keeping proportions"
- select "horizantally" for the Center
- tweak the Brightness/alpha threshold by looking at the preview until you get the desired results.
- under "Output" tab select Arduino code
- click on "Generate code" and it will generate the bitmap of your image.
- copy the whole set of hexadecimal number and paste it just before the void setup() {
- YOu can copy the const unsigned char myBitmap [] PROGMEM = {
too from the generated code ,but make sure the word after
char
and before []
in the line const unsigned char frame0 [] PROGMEM = {
in the void setup () {
and the word after 0, 0
in the line display.drawBitmap(0, 0, myBitmap, 128, 64, WHITE);
in the void loop
() {}
are same
<<<---OUTCOME--->>>
Reference link: https://www.youtube.com/watch?v=kSRytu8Q0Vo
OLED Animation
TO display an image into the OLED we were taking an image and converting into bitmap. In the animation, we will take a GIF file and split that
GIF file into frames. Then convert each frame into bitmap format and upload the array of bitmap into the Arduino UNO.
<<<---CODE--->>>
This is the code i used for displaying an animation onto the OLED,
you can copy the code from here too.
follow these steps to display an animation into your OLED,
- download a GIF file or an animated icon. You'll find some free animated icons from here: https://icons8.com/free-animated-icons
- split that GIF into frames. There is a website where you can split a GIF into frames online: https://ezgif.com/split . You can download a zip
file of all the frames after the GIF is split into frames.
- convert every frames of the GIF(which will be in .gif format) into bitmap. For that i used xnconvert software to convert images in .gif
format to images in .bmp format. While converting into .bmp format make sure you set 32x32 pixels while converting the file, in xnconvert you
can set the size under "Actions" tab. After that open the OLEDAnimations software and click on "select folder" and give the path where you have
exported the .bmp files. Link for downloading OLEDAnimations: https://drive.google.com/open?id=1ECufN2p8tpTUwq2UFgZK_Rq3wDmOACDo
After selecting the path you'll get the bitmap for all the images. Click on "Copy to clipboard" on the left side with bunch of hexadecimal numbers
and pate it above void setup() {
(you'll find a blank sketch above to paste the bitmap). On the right, click on "Copy to clipboard"
and paste it in the void loop () {
and uplaod the code.
You'll find the blank sketch for oled animation here:
you can copy the code from here too.
This is the reference link from where i learned how to do animation in OLED: https://www.youtube.com/watch?v=0KGMFhFQ0YY
He followed the similar steps that i have mentioned and he got the expected results while i was not able to display the animation properly. You'll
see that in the first 2 minutes 23 seconds of the video,
<<<---OUTCOME--->>>
So i then tried to display the animation in a different way which is similar to displaying the image, however quite tideous.
OLED Animation v2
<<<---CODE--->>>
This is the code i used for displaying the same animation with another way,
you can copy the code from here too.
I followed this steps,
- Download any GIF file and split it into frames, you'll find the steps in detail above.
- open this website: https://javl.github.io/image2cpp/ and upload all the frame that are in .gif format.
- set the canvas size 128x32 pixel under "Image settings" You don't need to change the size of every image one by one manually, just scroll
down and click on "all same size"
- For scaling select "scale to fit, keeping proportions"
- select "horizantally" for the Center
- tweak the Brightness/alpha threshold by looking at the preview until you get the desired results.
- under "Output" tab select Arduino code
- click on "Generate code" and it will generate the bitmap of all the frames.
- Replace/paste all the hexadecimal numbers above void setup () {
- as mentioned above, make sure the word after
char
and before []
in the line const unsigned char frame0 [] PROGMEM = {
in the void setup () {
and the word after 0, 0
in the line display.drawBitmap(0, 0, myBitmap, 128, 64, WHITE);
in the void loop
() {}
are same
so you need to make changes in the sketch accordingly.
- lastly, replace 32, 32 with 128, 32 in all the lines like display.drawBitmap(xx, yy,frame27,128,32, 1);
in the void loop
() {
<<<---OUTCOME--->>>
Here is the result,
The 7 segment display i was using was 4 digit display with 7 segment for each digit. You need to activate each segment with the help of array
in order to display the
digit you desired. You will get a better idea looking at this GIF, :https://lastminuteengineers.b-cdn.net/wp-content/uploads/arduino/Common-Cathode-7-Segment-Display-Internal-Working.gif
Using a kibrary you can easily display any digit, you can download the library from Sketch > include library > manage libraries and install
the ‘tm1637‘ library by Avishay Orpaz.
<<<---WIRING--->>>
There are 4 pins on the 7 segment display, Ground - VCC - CLock input(CLK) - Data input ouput(DIO). Connect the GND and VCC of the 7 segment
with the GND and VCC of the Arduino UNO and connect the CLK and DIO to any digital pins of the UNO. You just need to define the CLK and DIO
pin in your sketch.
<<<---CODE--->>>
You can get an example sketch from File > examples > TM1637 > TM1637test, which is very similar to the sketch i used for testing. Refernce link
of the website from where i learned how to operate 7 segment and the sketch: https://lastminuteengineers.com/tm1637-arduino-tutorial/
and this is the code i used,
you can copy the code from here too.
FIrst i included a the library and then i defined the CLK and DIO pin.
There are bunch of arrays before void setup () {
where each segment is declared for each digit. Looking at that and the image(link
i shared above) i wrote an array for the dash on all 4 digit.
In the void setup () {
you can set the brightness of the display and i have declared to initally turn off the display after displaying
dash on all 4 digit.
There is a line in void loop () {
like display.showNumberDec(14, false, 2, 1);
where 14 means the number you want to
display in the 7 segment. false means only the digits 14 will display, if you write true instead, 0014 will display in the 7 segment. 2 means
digit count, 14 has 2 digits, 0014 has 4 digits and so on. 1 means the starting position of the display, where 0 means 14--, 1 means -14-
2 means --14 and so on.
In the line display.setSegments(done);
you can call the array that you have defined above.
<<<---OUTCOME--->>>
You'll see me tweaking bunch of lines in the sketch with bunch of different outcomes,
I was using SG-90 servo motor with plastic gears whichcan rotate 90° on both direction. The one good thing about servo motor is unlike stepper
motor, servo motor remember its shaft's position.
<<<---WIRING--->>>
There are 3 pins on the servo motor, GND - VCC - DATA pin. Connect the GND and VCC pin of the servo to the GND and VCC of the UNO and connect
the data pin of the servo to any digital pin of the UNO. You just need to declare the data pin into your sketch.
<<<---CODE--->>>
This is the code i used for testing the servo,
you can copy the code from here too.
You can get this sketch from file > example > servo > sweep.
Before the void setup () {
there is a line int pos = 0;
where 0 is setting the position of the servo to 0° when the
UNO is powered up or reset.
In the void loop () {
there is a line for (pos = 0; pos <= 180; pos += 1) {
where it is telling the motor to rotate
from 0° to 180° with 1° increment for every step, every 15 milisecond. And then back to 0° from 180°. SO from 0° to 180° it is 0° to less than
or equal to 180° with increment of 1°(+) and from 180° to 0° it is 180° to more than or equal to 0° with decrement of 1°(-).
You can see me changing the rotation from anticlockwise (0° to 180°) to clockwise (180° to 0°) by changing this
line for (pos = 0; pos <= 180; pos += 1) {
. I actually should have interchanged both the lines rather than editing both line one
by one.
if you want your servo to start from a particular degree position it is better to write that degree in this line myservo.write(90);
in void setup () {
rather than in void loop () {
because the void loop will consider that initial position in every
cycle.
<<<---OUTCOME--->>>
You can see all the outcome after tweaking bunch of lines in the sketch,
I used the NEMA 17 stepper motor and the A3967 easy driver to run the stepper motor.
<<<---WIRING--->>>
You can operate the stepper with just 4 pins, 2 for power supply and other 2 for step and direction(any 2 digitial pin) and even i used that 4
pins to rotate the stepper motor, however I did considered wiring the other 3 pins, MS1 - MS2 - EN but didn't use them. You can see the
schematic for wiring here: https://cdn.sparkfun.com/assets/learn_tutorials/2/4/1/EasyDriverHookup_bb2.png .
Source of the schematic: https://learn.sparkfun.com/tutorials/easy-driver-hook-up-guide/all
<<<---CODE--->>>
This is the code i used to operate the stepper motor,
you can copy the code from here too.
Source of the code(The 101): https://www.norwegiancreations.com/2014/12/arduino-tutorial-stepper-motor-with-easydriver/
In the first few line i defined the direction(dir), step(stp), ms1, ms2 and enable pin and in the void setup () {
i declared the stp
and dir pin as output.
The 360° in the stepper motor is divided into 1600 steps. So in the void loop () {
there is a line
for (int i = 0; i < 1600; i++){
where it is telling the motor to rotate 1600 steps and the line
delayMicroseconds(100);
is telling the motor to rotate 1600 steps WITHIN 100 miliseconds, which is wuite opposite compared to
the servo when the miliseconds mentioned in the sketch is the delay between each step/degree.
In the line digitalWrite(dir, HIGH);
direction HIGH was anticlockwise for me.
<<<---OUTCOME--->>>
You can see me changing the direcrtion, number of steps and the delay to rotate the motor back and forth continuously in loop,
I intended to use LED which will turn on when plugged in with the programmer and so it will act as one of the output device. I then planned
to give provision for buzzer, OLED, LCD, 7 segment and 2 pin for input device(future use). I started adding the parts in the schematic file
and this is the schematic i ended up with,
I was not able to route the board without adding 3x 0ohms resistor that were acting as a resistor. This is the how I routed the board,
In the "fab" library, there were only 2x2, 2x3 & 2x5 SMD pin header. So to add 1x2 and 1x4 SMD pin header i use the "pinhead" library which was
pre-installed in the eagle. Now these pin header had a small hole in the middle which i thought that the machine would cut while tarcing, so
i filled them with white color in inkscape,
These are the mod settings i used to generate the toolpath/rml file,
When i saw the generated toolpath for the outline, i saw that it was cutting extra border at few places,
I tried tweaking few settings to see if the error goes, but i was getting the same result.
I then started milling the PCB. I used a VBIT whose tip was already broken previously. This is the trace i got(after a bit of cleaning),
These are the components I used for the PCB,
2x female header pin(flat)
2x female header pin(90°)
2x male header pin
Attiny44
2x LED
3x 100ohms resistor
3x 0ohms resistor
after solder the IC and 2 LED,
My colleague was asking me about the wiring of the MISO/MOSI pin in the output board that is to be connected with the fabISP while he was routing
his output device board, it was then that i realised that i didn't give 2 connection for the fabISP connector in the output board. I don't know
why i did that, only connected 4 pins that was required and forgot to connect the other 2 pin. I also realised that i didn't add the capacitor.
So i then added the capacitor and re-rout the whole design, this was the final schematic and board,
Before re-routing, i should have checked the my hello world board that i designed previously, that way i would have realised that i forgot to
add a resonator in the PCB! And this time i had to use 2x 0ohms resistor that acted as a jumper,
and this was the settings i used for generating the toolpath/rml file for the trace and cutting,
This time too i used the VBIT, another broken one (So the thing with the vbit we are using is that the tip of the vbit is very thin, so it is
bound to broken no matter what. So all we need to take care of is that a very tiny bit of the vbit gets broken. And for the same reason, instead
of using the default setting in mods, i am using 0.0800 as cut depth and max depth, so the vbit doesn't go too deep inside the copper clad.
so in a nutshell, a fresh vbit is bound to breake 1-2 times so we need to take care that very minimal amout gets broken, and after vbit breaks
1-2 times, it will give you a fine finish just like 1/64 endmill)
this is the outcome of the milling,
and these are the components i used,
Attiny44
2x 0ohms resistor
3x 100ohms resistor
1x 1 microfarad capacitor
2x female header pin(flat)
2x female header pin(90°)
2x male header pin
once the components were sorted, i started soldering,
FInally the output board was ready(without resonator),
The four header pin on the right was dedicated for the 7 segment display. The four header pin on the left was dedicated for the buzzer. On the
top left there are 2 header pins, left one was for lcd and the right one was for OLED. You can see the placement of component here,
while testing the output board, the 7 segment display was not working. SO i tried checking the connectivity, and it seemed fine. Then i checked
each and every pin by turning it high and putting a buzzer on the said pin when it was high, and it turned out that the PB8 pin of the IC was
not working!
Since 7 segment display can be operated by any 2 digital pin and VCC&GND i tried using the slot for the LCD and it worked fine, more on that later.
I tried using the OLED, LCD and 7 segment display to test the output board.
<<<---OLED--->>>
I was not even able to uplaod the sketch of the OLED_text to the output board.
<<<---LCD--->>>
Unlike the OLED, i was able to successfully upload the sketch however nothing was displaying on the LCD.
<<<---7 SEGMENT--->>>
As mentioned above, 1 out of 4 pin that was dedicated for the 7 segment was not working so instead i used the slot that was dedicated for the
LCD. I was using the same code as i had used for running 7 segment with UNO.
With the 7 segment connected to the output board and output board connected with fabISP, i observed that the green light in the fabISP, which
usually lit up when the code is being uploaded, was constantly stable and also there was an error while uplaoding the code.
when i removed the 7 segment, the green light turned off and i was even able to sucessfully upload the sketch.
After the code was uploaded, when i connected the 7 segment, it was still not displaying anything. After a while, i thought there might be some
issue with the power supply because of the USB extension i was using. So thn i tried to power the output board with the arduino which
can supply 5V of power and after powering the output board with 5V, it started displaying the digits.
here is an exception where the the 7 segment was displaying digit without any external power supply,
I then changed the slot of 7 segment from the header pin decdicated to LCD to the header pin dedicated to OLED. Same like before, when i connected
the 7 segment, the green light of the fabISP was constantly lit, but unlike the header pin dedicated to the LCD, i was able to uplaod the sketch
without first removing the 7 segment and also i didn't need to power the output board with external power supply, when i connected the 7 segment
to the header pin dedicated to the OLED.
You can see all the outcomes of the description that was mentioned above,
In this week i exlplored a lot of output devices like LED-buzzer, LCD, OLED, 7 segmen, Servo motor and stepper motor. I learned how to control
the devices with the arduino UNO by making modifications in the code and how to give connections to operate them. After learning how to operate
those devices on UNO and how to give the connections, i applied the same principles while making the output board with attiny44 IC. After i
designed and fabricated the output board, i found out that i was not even able to compile the sketch of OLED for the output booard. Then i found
out that the LCD too was not working with the output board. Then i tried the 7 segment display with the output board with same connections and
code and it seem to work. There were some power supply issue, which i solved by supplying the power externally. You'll find all the details above.
You can download the board file of output device from here:
output board
In the group assignment we measured the power consumption of the DC motor and RGB LED. You'll find it's documentation here:
https://fabacademy.org/2022/labs/vigyanashram/groupassig/groupassignment8.html
In this week we had to make a machine while working in a group. The purpose was to make such a machine where there is use of several
mechanical parts like bearings, timing belt, pulley, gears, aluminium extrusions, nut-bolts, guide rails and electronics parts like stepper
motor, servo motor, motor drivers, shield for the motors, micorcontroller
so that we can get to know about their principles and how it works
and with that knowledge we can make any machine of different mechanism in the future.
After some discussion, it was decided to make a conductive ink printing machine. So there were major two task, building the machine and making
the conductive ink. Conductive ink means an ink through which we can pass the electricity. With this we can print circuits and then attach the
components onto the ink traces and use it as a large size PCB which will help the children to understand about circuit more easily.
To make the conductive ink, Kiran Wakchaure used ingredients like charcol, fevicol, water, lemon, salt and water
and after miximg them well till the texture looks like a liquid paste we tested the conductivity of the ink,
After some discussion, we decided to build the machine with CoreXY mechanism.
Reference link for CoreXY mechanism: http://corexy.com/
CoreXY mechanism basically is the movement of X and Y axis with the help of two stepper motor, 10 pulley(two pulley needs to be mounted onto
the stepper motor and rest 8 are idle pulley) and two set of timing belt. One timing belt needs to be on one height entwined around fIve pulley
(one of which is mounted onto the motor and rest 4 idle pulley) and the rest 5 pulley and timing belt needs to be on another height. Diagram for
the CoreXY mechanism: http://corexy.com/reference.png
You'll find detailed description about the CoreXY mechanism and its videos from their website.
So after designing, I was participating in assembling of the machine. It took a few days to assemble and re-assemble the parts until the machine
was working. I'll try to mention everyting that was going on from April 07, the start of the make a machine week.
We had orientation in the morning where we decided to make the machine with the CoreXY mechanism, until then we just had decided to make the
conductive ink printer. On this day we were divided into groups and assigned task between groups like designing gantry, programming, designing
extruder and making the conductive ink. Between me and Kishore Gaikwad, we had the responsibilty to design the Gantry of the machine.
After the task were assigned, we were looking for all the parts that were available in our inventory. We already had the aluminium extrusions,
guide rail, aluminium plate for the bed, stepper motors, RAMPS 1.4 shield, Arduino Mega and the power supply.
We had in our inventory two 20x20x200 aluminium extrusion and one 20x20x600(which we dismantle it from the previous student project and I am sure
next year students are going to dismantle our machine and use the componments for their project.)
so we had to cut the 20x20x600 in order to fulfil our requirement of
four 20x20x200 aluminuum extrusion. So here is me and Kishore Gaikwad marking the aluminium extrusion,
Here is Kiran Wakchaure attempting to cut the aluminuim extrusion,
later we had to take help from the felow student from DBRT at Vigyan Ashram,
AFter that our set of aluminium extrusion was ready,
Later we started the assembly of the aluminium extrusion frame,
At the end of the day, I started the designing of the Gantry by the timei completed 30-40% of the Gantry, it was six in the morning so i decided
to continue the design the next day(same day, technically)
This whole day went into completeing the design of the Gantry. I have mentioned the description of the designing in detail above.
With the design ready, we cut them into cardboard to see if there is any obvious change needed to make,
after confirming that the design was fine, we cut them with Acrylic sheet into laser cutting machine.
The guide rail we had in our inventory was a bit longer so we had to cut them too,
The acrylic sheet we had in our inventory was 5mm thick so we cut two pieces of every part and them stuck them with fevikwik. A few times
when there was misalignment after sticking the trwo acrylic parts, we had to again file the holes down in order to insert the guide rail
properly. It was already midnight so we called it a day. (((instructor gathering on this day)))
with the acrylic sheets glued together, Jaydeep Parejiya spray painted them with black color,
The width of the slot for the t-holder was 10mm considering we were going to stick two 5mm acrylic piece, but when we tried to fit them, the
t-holder was loose. So we had to cut them in 11mm sheet, which is much thicker than 10mm, so i had to sand/grind the t-holder in order to fit into
the main frame. Later changes was made in the design.
It was this day that our linear bearing arrived that we had ordered earlier.
As mentioned above, the holes for mounting the linear bearing were either too short or we didn't had the thinner bolt in the inventory at that
time, so we had to file/drill them. Initially we were using the file to make the hole bigger but that was a very tedious job, so then we
started using drill machine. We were having difficulty inserting the guide rail onto the t-holder so we had to file the holes of t-holder too.
Later we changed the design of t-holder.
With every part ready, we started the assembly,
we were having difficulty moving the sub frame onto the guide rail along the Y axis. The movement was not smooth. It was concluded that the t-holder
i had sanded/grinded was not even so it was wobbling onto the frame. The L shape that we stick to make the sub-frame was not a proper 90°.
So we cut the new main frame with bigger t-holder slot of 11mm with 5mm
acrylic sheet and cut new t-holder with 11mm arcylic sheet.
We were having a lot of difficulty with the laser cutting machine, because it was not consistent at all. Here is the preview of t-holder with 8mm
hole onto the guide rail,
Note that earlier when we were filing the holes down because it was too tight, that was 8mm too. After cutting the t-holder with 8mm, 8.1mm, 8.2mm
holes, we were back to keeping the t-holder with 8mm holes.
After the t-hoder and the new main frame was cut, we call it a day since it was already 4:30 in the morining.
((( it was today Kiran bhai brought the pulley, timing belt, and bolts of rmounting the linear bearing)))
We again started the assembly with newly cut main frame and t-holder.
This time we assembled the parts a bit differently. After observing that the movement of the subframe was still not smooth along the Y-axis,
i suggested that instead of fixing the linear bearing first and then mount the whole sub frame onto the guide rail, why not try to first
mount the linear bearing onto the guide rail first and then fix the sub frame onto the linear bearing later? So here we are trying that to see
if this has any impact,
This surely made some improvement in the movement of the sub frame but there were still a lot of changes to be made.
The t-holder was still wobbling a bit, so we decided to stick them onto the main frame with hot glue,
When we tested the mvement of sub frame again, the guide rail was moving along the sub frame when in actual the guide rail is suppose to be fixed
onto the t-holder. So Jaydeep Parejiya suggested to set the guide rail so that the 15mm of the guide rail will stick out on both end of the t-holder
(the dimention of the guide rail was 30mm bigger than the distance between the two t-holder). He did that by sticking masking tape onto both
of the guide rails. From what i think, the size and position of the guide rail doesn't matter as long as both end of the guide rail is fixed
by the t-holder. What actually was happening was that when we move the sub frame, the guide rail was sliding along too resulting into diaginal
movement along the Y axis. So after sticking the masking tape, the movement of the guide rail along the sub frame was restricted and i guess that
was something that contributed inb the smooth movement of the sub frame.
After making all these changes in the assembly there was sure a huge change in the movement of the sub frame. The movement was now a lot smoother than earlier,
We then mounted the stepper motor and pulley onto the Gantry. After setting different height for two sets of pulley, we started mounting
timing belt onto the pulley,
After everythng was set we tried the manual actuation to see if the if we can move the sub frame and extrusion base plate by just rotating the
pulley manually, and here is the result:
It was already midnight so we decided that we'll test the Gantry by rotating the pulley with the help of the motor(automatic actuation) and
call it a day
The other day (Day-5) when we were facing the issue with the movement of sub frame even after cutting the new frame and t-holder, few of my
colleagues decided to start printing the L shape of the sub frame into 3D printer since the L shape of the sub frame was still not at a
perfect 90° angle.
As decided, we were suppose to test the automatic actuation of the Gantry with the help of motor, Devesh Nair tested and I was being told (i was
not in the lab at the timme of testing) that due to some reason, the movement of the sub frame and the extruder base plate was very jerky, complete
opposite of what i anticipated. I thought that manually rotating the pulley can still have some room for error my motors can't have any error.
Unfortunately, they didn't record the result of the automatic actuation done by motors, so i do not have anything to show here.
So with the L shape printed, we replaced the acrylic L shape with the 3D printed L shape.
Along with the assembly of the Gantry, Kiran Wakchaure was designing the extrude case and we were testing that in our assembly,
The t-holder was still not very reliable for preveting the guide rail from sliding, Kiran Wakchaure decided model and print new t-holder,
where we can fix the t-holder onto the main frame and also fix the guide rail with the help of bolt and nut.
Now the 3D printer too was giving us trouble by printing only 50% of the model and finishing the printing,
Even after attaching the 3D printed L shape, the movement of the sub frame was not reliable enough. So it was decided to use two linear bearings
(instead of one) on both sides of the sub frame. We didn't had any extra linear bearing so we temporarily took those two linear bearing
from the extrudr base plate and attached to the sub frame to test if it would make things any better,
after attaching two linear bearing, there was a drastic chage in the movement of the sub frame. More than smooth, the movement became
very stable,
It was already midnight and with new t-holder in print and no extra linear bearing for the extruder base plate we decided to purchase new
linear bearing and continue the assemble later and called it a day.
With the new t-holder printed and two linear bearing on both end of the sub frame attached(((kishore bhai bought the linear bearing))),
the machine was ready for the final test.
and it did pass with the flying colors,
<<<---MANUAL ACTUATION--->>>
<<<---AUTOMATIC ACTUATION--->>>
It took the rest of the day and the next day for Devesh Nair and Vrushabh Zunjunkar to setup limit switch and configure the machine with the
marlin firmware so that it behaves the way we want.
We had to print a lot of circuits and do a lots of trial and error with making the conductive ink, sometimes the ink would become very thick and
it woun't extrude from the syringe and sometimes it would be very thin and would do a messy print.
Finally this is the result of the machine fully functioning by printing a simple circuit by extruding the conductive ink,
Here you'll find all the design files that i made in solidworks: design files
link for the page of group assignment: https://fabacademy.org/2022/labs/vigyanashram/machine.html
Link for all my colleague's webpage:
Devesh Nair: https://fabacademy.org/2022/labs/vigyanashram/students/deveshs-nair/
Jaydeep Parejiya: https://fabacademy.org/2022/labs/vigyanashram/students/jaydeep-parejiya/
Kiran Wakchaure: https://fabacademy.org/2022/labs/vigyanashram/students/kiran-wakchaure/
kishor Gaikwad: https://fabacademy.org/2022/labs/vigyanashram/students/kishor-gaikwad/
Vrushabh Zunjunkar: https://fabacademy.org/2022/labs/vigyanashram/students/kishor-gaikwad/
Ashish Shende: https://in.linkedin.com/in/ashish-shende-designs?original_referer=https%3A%2F%2Fwww.bing.com%2F
In this week of input devices we were suppose to add a sensor to the microcontroller board that i have designed and read the outcome. In the
output device week i had designed a circuit board specially for the output devices i had explored that week. For this week, instead of
exploring different components and designing the circuit board specially for operating input devices and then desgin another board for the final
project, i decided to designed the circuit board for my final project in this week.
I had a discussion with my local instructor regarding the sensore/components that are going to be used for my final project. My final project
circuit board will be divided in main two parts,
imput part
FOr the input part, i need to detect motion/movement and water. For the movement/motion, i tested the ultrasonic sensor and PIR sensor with my
UNO and either i was ddoing it wrong or that's how PIR sensor works but I was finding it very difficult working with PIR sensor. It sometimes
detect
even the slightest of the movement instantly and sometimes it just won't give any feedback. SOmetimes after detecting the movementor, it will
give some feedback
very late and so i was more comfortable with selecting ultrasonic sensor as it was easy to operate and i was able to get the reading in the form
of distance.
For detecting the water, i decided to give the provision for both, the raindrop sensor and the step response. For some reasons, i had to first
make the final project board without spending too much time exploring the input devices and that is the reason i didn't tested the raindrop sensor
and the step response and finalize which sensor i am going to use for my final project on the basis of the results i got and hence gave the provision
for both.
output part
For the output part, i had to give the feedback after detecting the leakage. For the instant feedback i decided to use LED and Buzzer. And to read
the data regarding the leakage, i decided to use OLED. I was even planning to send the data throughan app and so i considered to give proviison
for the wifi modeule while designing the board.
With all the components decided, i had to decide what IC i will use for my final project circuit board. I wanted to use OLED so i had to look
for the IC with I2C protocol/ has SDA & SCl pins. I wanted to use a wifi module and step response so i had to look for TX and RX pins in the IC.
So apart from wifi module/step response and OLED i was going to require 2 prpgrammable pins for led and buzzer, 2 programmable pins for
ultrasonic sensor, 2 programmable pins for rain drop sensor(one of which should be analog) so 12-14 pins would be sufficient for my project.
In the output devices i had designed a board with attiny44 ic and i wasn't able to upload the sketch of the OLED and i was not able to display
anything onto the LCD. So after exploring a bit i decided to use the attiny1614 ic because it had all the things that were required for my
project.
attiny1614 has
14 pins. 10 of which are analog/digital and 6 of them are PWM pins.
2Kb of SRAM.
16 Kb of FLASH.
256 Bytes of EEPROM
and here are the provision for SDA/SCL and TX/RX pins,
I designed the schematic and board in eagle. As decided i gave all the provisions for the header pins(for mounting module) and componnets and
this was the schematic i ended up with,
I then confirmed with my local instructor if everything is correct with the schematic and when he approved, i started routing the board.
After routing for few hours, i had to add 5 jumpers in order to give all the connections. This was my connection after adding 5
jumpers,
This is how my board looks like,
I was getting airwire error at the places where i had placed the resistor as jumper. I was getting the same error at the time of making hello
world board so i didn't spend much time removing the error.
I then gave the border for the outline of PCB,
I then wanted add some logo regarding my final project so i first exported the inner and outer image(png) of the board and added a logo in inkscape.
I downloaded the image from https://pixabay.com/ . Since the traces are white when exported as monochrome from the eagle, i needed to convert
the image to monochrome too(white) so i converted the image into monochrome from this website: https://manytools.org/image/colorize-filter/ .
I then inserted the logo into my PCB in inkscape.
library installed:
pinheader: https://github.com/zumbik/Eagle-Libraries/blob/master/pinhead-2.lbr
attiny1614: https://www.snapeda.com/parts/ATTINY1614-SSNR/Atmel/view-part/
I used mods community project: http://modsproject.org/ for generating the toolpath/rml file and vpanel software for communicating with the
machine.
Visit the mods community project website and go to programs > open programs > PCB CBA(under SRM-20 mill) and Upload png file of the inner
trace under "read png". Don't forget to check the dpi of the image, it should be 1000dpi.
select mill traces 1/64 under "set PCB defaults"
set the "Roland SRM-20 Absolute coordinates" to 0 for X, Y and Z axis,
Disable both, the websocket device and websocket print and enable the save file option,
I set the cut depth and max depth as 0.0800mm while using VBIT and set the offset number to 4,
this was the preview after i hit calculate,
For generating toolpath for outer trace, i selected mill outline 1/32 under "set PCB defaults and apart from that i kept the rest of the settings
as it is,
this was the preview of the outline trace,
For milling the PCB i used the broken VBIT from the previous assignment. I don't know how much i have explained about these broken VBIT but i'll
explain once again in brief: So the VBIT we were using till now was the 30° VBIT which is very pointy and from using numerous VBIT's i can say that
the tip of the VBIT is bound to be broken if you generate the toolpath with the default settings of 0.1016mm cut depth and max depth. If a large
chunk of the vbit gets broken, you won't be able to use it afterwards and if youdo use it, you'll get the PCB full of burr. So the goal is
to try to break a very small amount of vbit. In order to achieve that, what we use to do was reduce the cut depth and max depth to 0.0800mm. If
we were using a fresh vbit it would break once(or twice if we are unlucky). After the VBIT breaks set the Z axis coordinate again and re-trace
and then you will get fine results with the broken VBIT.
This is the position of the VBIT inside the collet,
This time, unlike previous traces, the vbit was not able to remove the copper layer with 0.0800mm cut depth,
I was able to see the trace but the surface of the copper clad was smooth without any grooves. I retrace the inner file again and was getting
the same results. I then generated the toolpath again with 0.0900mm cut depth and max depth, (however the vpanel was showing -0.10 as z axis
coordinates while tracing)
with the new toolpath of 0.0900mm cut depth and max depth, i started tracing again and this is the result,
and this was the position of the vbit inside the collet,
this is the result after tracing the outline of the PCB,
My instructor told me that in order to program the final project board(attiny1614) i would require a programmer - UPDI(SAMD11C14) and it
was decided for me to re-design and mill this particular UPDI: https://gitlab.fabcloud.org/pub/programmers/programmer-updi-d11c
The reason why i had to re-design the UPDI was because the voltage regulator that was being used in the original UPDI was LM3480 3.3V regulator
and we didn't had that package of regulator in our inventory. We had instead AMS1117 3.3V regulator.
So I downloaded the project, schematic and board file and also installed the KiCAD software because the original design files were made from
KiCAD. Since I had never used KiCACD before, it took me a bit long time to figure out how to replace the component. This is what i did to replace
the component,
I first deleted the LM3480 component from the schematic and added the AMS117 regulator and wired them just like it was wired with LM3480.
AFter that go to Tools and select Update PCB from schematic. If you are asked to annote the schematic, click on the annote button.
After that it will re-direct you to the board environment, there you'll be asked if you want to update the PCB, click on Update PCb,
(Earlier, what i used to do was replace and rewire the component in the schematic and then go to the PCB to see if there are any changes reflected,
because this is how you make changes in your PCB in eagle. Then i figured there was a refresh button in the Board environment but even after clicking
on that there was no change reflecting.)
After clicking on Update PCB, I finally saw the AMS1117 regulator showing in the board environment, however even after deleting the LM3480
regulator from schematc i was seeing that component in the board environment with the wires routed. So I first placed the AMS regulator somewhere
random and manually deleted the LM3480 regulator and placed the AMS1117 regulator in the place of LM2480 regulator and rerouted the wire.
Since the AMS1117 package was larger than the LM3480, i had to make changes in the edge cut, and this was the final result.
I then exported the inner and outer traces as black and white from KiCAD. The one thing i don't like about KiCAD is that it will export with
black color traces with white color background, so i had to invert the image from inkscape. The option of invert in mods doesn't work for me,
it just shows me a blank screen whe inverted.
((( consider putting image of this from mods)))
The exported file was in SVG format so i imported it to inkscape and added my final project logo(becase, why not).
This is the procedure i went through to export an inverted image,
I imported the inner trace file and added the logo and exported the file in png format,
Create a new file and import the png file you just exported. Go to Path and select Trace Bitmap, with Brightness cutoff selected, check the invert
image option and click on apply. You will get the inverted image ready to generate the toolpath.
select the inverted image and export the image as png format with the help of selection tool. Do not forget to set the dpi to 1000 while
exporting.
This was the preview of the inner trace after i generated the toolpath,
The border of the inner trace was edge to edge due to which, few part of the trace won't cut properly so what i did was added a line on all
4 sides go make the border bigger than the trace.
this was the preview after generating the toolpath,
I used the same broken vbit for doing the inner traces of UPDI.
This was the result of the trace with 0.0800mm cut depth and max depth,
just like before, the vbit didn't remove the copper properly so i retraced it with 0.0900mm cut depth and max depth and here is the result,
The traces were not proper and were full of burr. I then changed the vbit and traced the inner file with the same 0.0900mm cut depth and max
depth toolpath. And here are the results,
with the traces looking fine, i traced the outline file with 1/32 endmill,
after little cleaning the PCB,
With the final project board and UPDI milled, i started gathering the componnets for soldering.
components used for updi are,
1x SAMD11C14 IC
1x AMS1117 3.3V regulator
1x 2x2 and 2x3 header pins (male)
1x 1uf capacitor
2x 4.99K ohms resistor
components used for final project board are,
1x attiny1614
1x 1uf capacitor
5x 0 ohms resistor
1x 49.9 ohms resistor
3x 1K resistor (if you have 2K ohms resistor in your inventory, consider 1K and 2K ohms resistor instead)
2x 100 ohms resisotr
2x 1M ohms resistor
3x LED
1x 2x4 header pin (male)
1x 1x6 header pin (male)
4x 1x4 header pin (male)
2x 1x2 header pin (male)
1x push botton
I started with soldering the UPDI,
then i started soldering final project board,
here are m final project board and UPDI stuffed,
While designing the final project board, i had given the provision for the voltage divider for converting 5V to 3V for the wifi module. The voltage
divider requires a 1K ohms resistor and 2K ohms resistor and i didn't checked the inventory so i didn't know we did not have a 2K resistor. So
i had to place 2x 1K ohms resistor in series but the board was already milled with only one pad for 2 resistor.
So this is how i placed 2 resistor in series on a single resistor pad,
For the programming part, me and my instructor started with refering to the Quentin's website:
http://fabacademy.org/2020/labs/ulb/students/quentin-bolsee/projects/samd11c_uart-updi/
.
We then downloaded the sam_ba bootloader and the zip file of the edbg(i was suppose to download the exe file).
I was using the MAX32625PICO board for programming the UPDI-d11c. I connected the Reset - Clock - Digital Input/output - Gronnd pin of the
MAX32625PICO to the UPDI by cutting the pin of through hole resistor and soldering it on one end of the jumper wire.
And then connected the MAXPICO board and UDPI to the PC,
With the UPDI and MAXPICO board connected, we first ran this code,
edbg -bpv -e -t samd11 -f sam_ba_Generic_D11C14A_SAMD11C14A.bin
bu we were getting the error: bash: edbg: command not found .
We figured that we need to install the "edbg" . My instructor found this website from where i downloaded the edbg.exe file:
https://fabacademy.org/2021/labs/kannai/instruction/tips/fa2022_usbserial_win_edbg/
And later he found another website where we discovered that we need to give the file path of the edbg.exe file into the environment variables:
https://fab.cba.mit.edu/classes/863.21/Architecture/people/LauraMaria/index.html
So i followed the steps mentioned in that website:
Go to Setting > System > About > Advanced system settings > Environment Variables.
Inside environment variables select Path and click on edit. Click on new button and paste the file path where you have the edbg.exe file.
If i have given the file path correctly, if i run this code edbg-windows-r24 -h
it should how you this results,
https://fab.cba.mit.edu/classes/863.21/Architecture/people/LauraMaria/assets/sucinstalledbg.png
Now what happened was that i had the edbg.exe file iny Downloads folder. When i copied the file path, it was only copying Downloads
instead of C:\Users\fenil\Downloads
and when i pasted the path inside the environment variables it was showing juat
Downloads
. So when i ran the edbg-windows-r24 -h
command it was showing me this error,
I was arranging my files and shifted the edbg.exe file from Downloads to my Fab Academy folder in F drive and i thought let me try
it once again and this time code worked, becase i gave the correct file path.
I had the bootloader and the edbg.exe file in the same folder. So i open the gitbash by right clicking on the said folder and selecting Git Bash
here, this way i set the command directory to that particular folder. I then ran this command again with my UPDI and MAXPICO board connected
to the PC,
edbg -bpv -e -t samd11 -f sam_ba_Generic_D11C14A_SAMD11C14A.bin
and i was getting this error: "Error: invalid response during transfer (count = 0/1, status = 7)".
I tried checking the conection between PICO board and udpi but the connections were fine. I came accross a few websites where they had
mentioned the same error but not the solution. Then my instructor told me to make another UPDI with FT230XS IC where the IC wil be pre-programmed so i won't need to program
it.
I downloaded the design files from here:
https://gitlab.fabcloud.org/pub/programmers/programmer-updi-ft230xs
Since the traces of the IC was very thin i had to use the 1/64 endmill because when i tried to mill with the broken VBIT, the traces were full
of burr.
I imported the SVG file of the inner tarce into mods and then inverted the image and then generated the toolpath with the default settings.
when i milled the inner trace, the traces of the IC were hardly sticking onto the board. It was comming off and i had to press the trace down and
carefully aligned thr trace of the IC. In doing that i already broke a part of the IC(broke one pin of ic in half). You can see that in the
trace at the bototm,
I then again milled the inner trace wiht the same toolpath and this was the result, the trace on top,
If you have observed, both of the IC had two bridges between two pins. I tried to remove the bridge manually with the cutter but ended up
damaging the other traces.
I then open the board file and export the
SVG file of the inner trace and the edge cut. THen import the inner and edge cut into inkscape and export them as png file with 1000 DPI.
Again import that PNG file and draw line on four sides to make the border bigger and then export them as PNG file. THen import the PNG file with
extended border and then invert the image with the help of trace bitmap and then export the inverted image as PNG file with 1000 DPI. All these
because i thought it might help me getting rid of the bridge.
I then again generated the toolpath with new files i made in inkscape and this is the preview of the trace,
I milled the inner traces wiht 1/64 endmill and this time there were 3 unnecessary bridges!(the one on top row is necessary)
I then took help of my colleague, Ashish Shende to remove the bridge and he too used the cutter to remove the bridge, but i guess he has more patience then me!
((( add photo of cutting the bridge )))
THis was the result after removing the bridge,
Once the board was ready i started gathering the components and started the soldering. These are the components i used,
SOldering the FT230XS IC was the hardest part given how thin the pins of IC are.
No matter how hard i tried, i was accidentally making solder bridges onto the IC. I had to use eye loupe and solder wick in order to remove
them,
((( image with eye loup yet to click)))
While removing bridges, i am sure i atleast removed one trace on the board but it has to be the trace of the pin on the IC which was not in use.
After a lot of patience my UPDI with FT230XS was ready,
Now it was time to program to see if my final project board and the UPDI - FT230XS are working or not.
To upload the code i was using Arduino IDE. I installed a library called "megaTinyCore" by Spence Konde from tools > Board > Board Manager.
Make sure you have this link pasted in Additional Boards Manager URl's : http://drazzy.com/package_drazzy.com_index.json .
Go to File > preference and you'll find Additional Boards Manager URL.
After installing the library and seledcted these settings inside tools,
I uploaded the example sketch blink which you can find in File > Examples > Basics > Blink and here are the results,
I also designed and milled(with broken VBIT. The UPDI - FT230XS and the fabISP are the only two boards i milled with 1/64
and rest all i have milled with broken VBIT) the rain drop like pad for detecting the drops,
After the blink code was succesfully uploaded to the final project board with the UPDI-FT230XS it was concluded that the boards are working and
there is no issue with the connection or the soldering.
As mentioned above we had to add sensor to the microcontroller board and read the outcome so i tried ultrasonic sensor, step response and
rain drop sensor which was also the part of my final project,
To read the data from any sensor with the help of Arduio board, you just need to upload the code with Serial.begin (9600);
and
Serial.println("");
without adding any library and just open the serial monitor and you'll be able to read the data. However, to
ready the data from the board with attiny1614 chip, you need to install the library called SoftwareSerial: https://github.com/PaulStoffregen/SoftwareSerial
You can add the library from Arduino IDE by going to Sketch > Include library > add .ZIP library.
<<<---WIRING--->>>
To avoid any confusion, i am naming UPDI-GND-VCC pins as UPDI pins and GND-CTS-VCC-TX-RX-RTS pins as Serial pins.
The programmer i made, UPDI-FT230XS, doesn't have the Serial pins, instead it has UPDI pins. So in order to read the data into the serial
monitor, my local instructor suggested to make the Serial UPDI converterter.
Generally, people have the Serial pins into their UPDI programmer
and then uses Serial UPDI converter to convert Serial pins to UPDI pins, in my case I was doing the reverse, converting the UPDI pins to Serial
pins with the help of Serial UPDI converter.
Here is the connection I was using to just uplaod the code into my final project board,
And here is the connection i use for reading the data into the serial monitor,
I was not able to uplaod the code if the RX-TX pins of the UPDI and final project board is connected so i used to dicsonnect the UPDI pins from
the UPDI progreammer while the code was being uplaoded and then connect again to read the data into the serial monitor.
<<<---CODE--->>>
This is the simple code I was using for displaying the text "hello world"
you can copy the code from here too.
I edited his code from the example code which you can find from File > Examples > SoftwareSerial > SoftwareSerialExample.
<<<---OUTCOME--->>>
This is the outcome of the code,
To detect the human presence i am going to use the ultrasonic sensor, sice it gives me the feedback in the form of distance. The ultrasonic
sensor i am using is hc-sr04 ultrasonic sensor.
<<<---WIRING--->>>
So the ultrasonic has four pins: ground, VCC, trigger and echo. You can use any digital pin for the trigger and echo, however i have seen people
generally using the PWM pin for the echo. Here is the connection i used for ultrasonic sensor,
ultrasonic sensor attiny 1614
GND GND
VCC VCC
TRIGGER PA1
ECHO PA2
<<<---CODE--->>>
This is the code i used,
you can copy the code from here too.
Reference of the code: https://github.com/futureshocked/ArduinoSbS2017/blob/master/_0510_-_Ultrasonic_Distance_Sensor/_0510_-_Ultrasonic_Distance_Sensor.ino
<<<---OUTCOME--->>>
This is the outcome of the code,
For detectng the drops, i tried using yl-69 sensor which is same for detecting rain drops and soil moisture.
<<<---WIRING--->>>
In the yl-69 sensor/module there are 6 pins. Four on one side and two on other side. The two pins are meant to be attached to the board with
comb like pattern made with two set of traces. I designed and milled a similar looking board,
the remainig four pins are ground-VCC-digital output pin-analog output pin. If you use the DO(digital output), the data you will get will be
in form of digital signal i.e. 0&1. If you use the AO(analog output pin) the data you'll get will be in form of analog signal i.e. 0 to 1023.
Here is the connection i used,
yl-69 attiny 1614
GND GND
VCC VCC
A0 PA6
<<<---CODE--->>>
This is the code i used,
you can copy the code from here too.
you can find this code from File > Examples > Basics > AnalogReadSerial.
<<<---OUTCOME--->>>
This is the outcome,
Since my final project board had the attiny1614 chip, instead of making separate module, i gave the provision of the step response onto my board
itself. Reference:
http://academy.cba.mit.edu/classes/input_devices/step/hello.txrx.t1624.png
http://academy.cba.mit.edu/classes/input_devices/step/hello.txrx.t1624.jpg
<<<---WIRING--->>>
Step response requires just 2 digital pins that act as TX-RX(transmitting and receiving). Now i had given the provision for TX-RX of wifi module,
step response and serial pins, all threee on same two pins i.e. RX-PA4 and TX-PA5 because i didn't had knowledge that I can define different
RX-TX pins for different modules and that RX-TX pins are nothiung but digital pins that transmit and receive signals. SO what was
happening was that the microcontroller can either show the data onto the serial monitor with
the help of RX-TX pins or it can collect the data from the step response with the help of same RX-TX pins, it cannot perform both of the task
at the same time, given that pins of both the module are connected on same pins. Until now i was only using the serial pins to read the data
into the serial monitor.
Since the step response just requires two pins as RX-TX and the the pins i had given provision for rain drop sensor had two pins too(pins can be
used as analog as well as digital) i connected the RX-TX pins of the pad into the pins that were assigned for rain drop sensor for the time being.
so i connected the TX pin to PA6 and RX pin to PA7.
<<<---CODE--->>>
This is the code i used,
you can copy the code from here too.
Source of the code: http://fabacademy.org/2020/labs/leon/students/adrian-torres/assignments/adrianino/step_response_txrx/step_response_txrx.ino
<<<---OUTCOME--->>>
This is the outcome,
Since the step responcse and the rain drop sensor was behaving in the same way for me, like for rain drop sensor the reading went from 1023 to
500 when the water was dropped on the pad and for the step response the reading went from 24K to 32K and since it would require me to
use a module for rain drop sensor while i just need to put two 1M ohms resistor for the step response, i decided to use te step response for my
final project. I have to re-design the board, i'll mention more on this in the final project tab.
If you have observed, two things were happening with the pad i was using for detecting water drops,
1- The water was sticking onto the pad and not sliding down easily,
2- I had to clean the pad/dehumidify the pad manually.
for the real application, i won't be cleaning the pad so what will happen is, a drop will get stuck on the pad and it will give false data of
the leakage until the drop evaporates. So dehumidifying the pad is going to be a challenge.
After testing the ultrasonic sensor, i accidentally pluck the two pins along with thre pads of my final project board, that were UPDI-GND,
I soldered the two pins onto mere trace lines and for better adhesion i used fevikwik gel,
The pins survived for a couple hours and then it came off again.
There was an unwanted pad near the trace of the UPDI pin so i bridged the trace and the pad with the pin of a through hole resistor and then
soldered a screw connector there,
I didn't had single screw connector so i broke the pin of one connector and soldered only one pin of the screw connector(only one screw connector
is functional).
This week i learned how to select the IC of the board as per my requirements and how to define the pins as per the sensors i am using. I also
interfaced a few input devices with my attiny1614 board like ultrasonic sensor, YL-69 soil moisture module and step response. If you compare
the step response video of adrian:
http://fabacademy.org/2020/labs/leon/students/adrian-torres/images/adrianino/step1.mp4
and my step response video, you'll see a vast difference in the readings and the reason is the insulation between two electrodes and the number
of electrodes. Adrian was using just two copper plates while i was using multiple copper traces and so this is how it affected the readings.
Design files,
water drop pad
final project board
serial UPDI converter
UPDI-D11C
UPDI-FT230xs
For the group assignment we probed the analog and digital signals of IR sensor and Potentiometer. You'll find the details regarding the work done
in group assignment here:
https://fabacademy.org/2022/labs/vigyanashram/groupassig/groupassignment9.html
In this week of networking and communication, we had to explore different networking and communication protocols. I'll explain some of the
communication protocol i tried during the electronics production, electronics design, output device and interface and application week.
The Serial Peripheral Interface (SPI) is a synchronous interface which means the data sent are synchronized and that
data bits are transferred one by one at regular intervals of time set by a reference clock line. SPI is a full duplex communication
which means the SPI device can either be configured as master or secondary device. For the comunication or to send/receive data, SPI protocol
requires 6 wires:
MISO
MOSI
SCK
CHIP SELECT(reset)
GROUND
VCC
.
In the week of electronics design i made a hello world board with attiny44 IC and in the week of output device I made another board with attiny44
IC too, and to program those board you need a programmer. In the electronics design week i made a fabISP with attiny45 IC. There is SPI communication
between the attiny44 board and the fabISP while programming. While programming you need to connect MISO-MOSI-SCK-RESET-GROUND-VCC pins of the
fabISP with the MISO-MOSI-SCK-RESET-GROUND-VCC pins of the attiny44 boards,
Then you need to connect the fabISP with your PC and upload the sketch,
The sketch will be uploaded to your attiny44 board via fabISP. This was an example of SPI communication protocol.
I2C, short for inter-imtegrated circuits is a type of synchronous serial communication protocol which means that data bits are transferred one
by one at regular intervals of time set by a reference clock line. I2C protocol requires just two common wires to control any device on I2C
network which are Serial clock(SCL) and Serial data(SDA). The data to be transferred is sent through the SDA wire and is synchronized with the
clock signal from SCL. SDA is the line for the master and secondary to send and receive data. SCL is the line that
carries the clock signal. I2C is a half duplex communication.
In the week of input device, i made a board with attiny1614 IC on which i tried usinng 0.96 inch OLED, which operates on I2C protocol. Each
device has a unique I2C address and you need to define that address in the sketch in order to operate that. To find the unique address of
you I2C device you need to upload the I2C address finder sketch to your board with the I2C device connected and after the code is uploaded
you need to open the serial monitor where you'll find the address.
In case of attiny1614, you need to connect the SDA-SCL-GND-VCC pins of the OLED with the PB1-PB0-GND-VCC pins of the attiny1614. In case of
esp32, you need to connect the SDA-SCL-GND-VCC pins of the OLED with the IO21-IO22-GND-VCC pins of the esp32.
The code to find the unique I2C address,
you can copy the code from here too.
Here is the I2C address shown in the serial monitor,
Here is the sketch i used to display the text in OLED with attiny1614 board,
you can copy the code from here too.
and here is the outcome of the code,
This was an example of I2C communication protocol.
Note that for clicking the screenshot of serial monitor showing the I2C address i used my esp32 board. You ccan find the I2C address of the device
on one board and use the device on another board, since the address you're getting is of the device and not board.
Serial communication is a form of asynchronus communication where the communicating endpoints' interfaces are not continuously synchronized by
a common clock signal. UART, short for Universal Asynchronous Receiver/Transmitter is a physical circuit in a microcontroller, or a
stand-alone IC whose main purpose is to transmit and receive serial data. Only two wires are needed to transmit data between two UARTs. Data
flows from the Tx pin of the transmitting UART to the Rx pin of the receiving UART.
In the week of input device i made a board with attiny1614 IC where i was reading the data of some input devices into the serial monitor of
the Arduino IDE. After maiking the attiny1614 board, it was much later that i realized that i had not assigned the TX-RX pin to the default
TX-RX pins that are asisgned to the attiny1614 IC. The default TX-RX pin assigned to attiny1614 IC is pin PB2-PB3. While designing the board,
i assigned the TX-RX pin to pin PA4-PA5. I then discoverd that i can still get the readings in the serial monitor using Hardware Serial.
So there are two types when it comes to reading the data serially: Hardware Serial and Software Serial. In the Hardware Serial, you simply write
the code,
Serial.begin(9600);
}
void loop() {
Serial.println("hello world");
}
and upload it to your board and when you open the serial monitor, the board will automatically consider default TX-RX pins assigned to it's IC
to send the data serially and so
you'll see the output in the serial monitor after selecting the correct baud rate,
9600 in my case. Baud rate means the rate at which data/information is transferred so the buad rate in the code and the baud rate in the serial
monitor should match.
Since i had given the wrong connection for the TX-RX pin, i am using my esp32 board to show the serial communication between my board and PC. Here
is the outcome,
Here is the brief explaination of the connections,
This is how my esp32 board looks like,
This is how my UART serial converter i am using as a prograammer looks like,
To avoid any confusion, i am naming the GND-VCC-TX-RX pins as serial pins and i am naming UPDI-GND-VCC as UPDI pins.
If you observe, the orientation of the serial pins on my esp32 board(top right) doesn't match the serial pins on my UART serial converter. My
colleague, Vrushabh Zunjunkar, was also using the same UART serial converter so he designed and fabricated a serial converter, which turned out to
be of no use to him so i borrowed it from him and this is how the converter looks like,
if you see the video above, i have connected the UART serial converter to my PC, connected serial converter to the UART serial converter and connected
the esp32 board with the serial converter so this is the connection of the serial pins:
GND-VCC-TX-RX pin of the UART serial converter is connected to the GND-VCC-TX-RX pin of the serial converter. The GND-VCC-TX-RX pins of the serial
converter is connected to the GND-VCC-RX-TX pins of the esp32 board. So basically the TX-RX pin of the programmer:UART serial converter is connected
to the RX-TX pin of the esp32 and so if you want to serially read the data of the board into your PC, you need to connect the TX-RX pins of
the programmer to the RX-TX pins of the board.
In the software serial, you define the TX-RX pins in your sketch. So you board, instead of considering the default TX-RX pins assigned to it's
IC, will consider the TX-RX pin that you have defined and so you board will send the data through the TX-RX pins that you have deifined.
This is the simple code of printing hello world using software serial,
you can copy the code from here too.
Link for download the software serial library: https://github.com/PaulStoffregen/SoftwareSerial
Since i made a mistake in wiring the attiny1614 board, i had to use the software serial. For programming the attiny1614 board, i was using
UPDI with FT230XS IC having UPDI pins and to read the data into the serial monitor i was using a Serial UPDI converter. Here is how my attiny1614
board looks like,
Here is how the serial UPDI converter looks like,
This is the connection i use while uploading the sketch onto the attiny1614 board,
and here is the connection i used while reading the data into the serial monitor,
just like in hardware serial, you need to connect the TX-RX pins of the serial UPDI converter to the RX-TX pin of the attiny1614 board. But with
the software serial, you have the advantage of defining the TX-RX pins in the sketch, so you just need to interchange the pin number instead of
changing the wiring.
I was not able to uplaod the code if the RX-TX pins of the UPDI and final project board is connected so i used to dicsonnect the UPDI pins
from the UPDI progreammer while the code was being uplaoded and then connect again to read the data into the serial monitor. You just need to
disconnect the TX-RX communication between the attiny1614 board and the serial UPDI converter.
Here is the outcome,
The description mentioned above was the case of wired serial communication where you can get the data from your baord into the serial
monitor. You can get the data from your board to an app via bluetooth or wifi through serial communication too.
In the week of interface and application programming we had to make an application and interface/interact with the board i made. So i made
an app in the MIT app inventor and with that app i controlled an on-board LED through bluetooth module. So here is how i did that,
I first made an app in the MIT app inventor. I have mentioned detailed steps regarding how i made the app in the interface and application
programming tab.
Then i uploaded this code into my attiny1614 board via FT230XS programmer,
you can copy the code from here too.
I took the reference of Adrian's code: http://fabacademy.org/2020/labs/leon/students/adrian-torres/assignments/adrianino/bluetooth/bluetooth.ino
so what this code does is that when you tap on 1, the LED will blink once, if you tap on 2, the LED will blink twice and so on.
after the code is being uploaded, disconnect the programmer from your attiny1614 board and connect the bluetooth module with your attiny1614
board. Here is how you connect the bluetooth module to your board: connect the GND-VCC-RX-TX pins of the bluetooth module with the GND-VCC-TX-RX
pins of the board, and this applies on both, hardware serial and software serial. In my case, since i was using software serial, i connected
the bluetooth module on the RX-TX pins defined in the sketch.
AFter the that you just need to give the power supply to your board. However while recording, i forgot to disconnect the programmer so i was
supplying the power through the programmer.
And this is the outcome,
Why esp32?
Initially i wanted to use attiny1614 for my final project but i later realised that the the code for just blinking the LED through wifi using
wifi module esp826601/12e itself was cunsuming 99% of the storage(16KB) and so i decided to switch to esp32 since it has in-built wifi and has
4MB of flash memory(storage),
You can download the datasheet of the esp32 from here:
https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_en.pdf
I got better idea of the pin out refering to this image,
source: https://www.mischianti.org/2021/05/30/esp32-wroom-32-esp32-s-flash-pinout-specs-and-ide-configuration-1/
I learned that GPIO 34, 35, 36, 39 are the input only pins,
if you want to conenct I2C devices, you need to connect the SDA-SCL pin on GPIO21-22,
for programming esp32 you need to use the TX-RX pins assigned on GPIO01-03 and use the same pins for reading the data serially into the
serial monitor
For the group assignment we send the data from one esp32 board to another esp32 board via wifi. You can see the details of the assignment here:
https://fabacademy.org/2022/labs/vigyanashram/groupassig/groupassignment10.html
In this week of interface and application, we had to make an application and interface/interact with the device i made. So i made an application
with the help of MIT app inventor and communicated with the attiny1614 board i made through bluetooth. I had two things in my mind before
making the application, 1- interface LED(output device) by turining it on and off with the mobile application i made through bluetooth and
2- interface ultrasonic sensor(imput device) by reading the data onto the mobile application i made through bluetooth.
Interfacing the LED onto the board i made with the mobile application i made through mobile is divided into 3 steps,
1- making the application
2- wiring the bluetooth module with attiny 1614 board
3- programming
I had no idea how to make an application let alone interfacing with my attiny 1614 board so i searched for tutorials so that i can interface the
Arduino UNO through an app with the help of a bluetooth module and then apply the same principle onto my attiny 1614 board. I came across this
tutorial from where i learned how to make an app via MIT app inventor:
https://youtu.be/aQcJ4uHdQEA
So this is how i made the application for blinking the led in the MIT app inventor,
Go to this site and click on the "Create apps" icon on the top left ; https://appinventor.mit.edu/
You'll be re-directed to a new page where you have to sign in via google account. AFter signing in, you'll see this page where you need to click
on "start new project"
Give your project a name. After that you will see an interface which is divided into 4 sections,
Palette: Where you will find all the components/tools you require to make the app which you just need to drag and drop onto the viewer section,
Viewer: Where you can see how your app will look in you device,
Components: where you'll find all the components that are being used in your app,
Properties: where you can change the properties of the app/components like change color, text, size etc.
These are the sections under "Designer" section which is the frontend of the application. Then there is "block" section which is the backend of
the application where you need to add blocks/cells to configure all the components you added in the "designer" section.
I first wanted to add a menu where i can find the list of all the bluetooth device nearby so i add a component called "ListPicker" under "user
interface"and changed the tab size, text size and color from the properties section,
I then wanted to add 9 buttons with number 1-9 which will send the data in form of numbers to the attiny board(more on this later) but i cannot
add the buttons directly. So i added "HorizantalArrangement" under "Layout" and changed the width,
Then i added 3 buttons into each into each horizantal arrangement and changed it's color, size and text,
Lastly i added "BlurtoothClient" under "Connectivity",
This was how my design of app was looking at the end,
To make the listpicker and every butotn work i went to the block section and added all the blocks/cells necessary. The block section is divideed
into two section,
Blocks: where you will pick up all the necessary blocks,
Viewer: where you'll connect all the blocks(you just need to drag and drop the blocks in order to connect them).
this is how my block section looked after adding and connecting all the blocks,
I first worked on the listpicker,
Added BeforePicking and AfterPicking block from the ListPicker,
Added Elements block from the ListPicker and connect it with BeforePicking block ,
Added AddressesAndNames block from BluetoothClient and connect it with Elements block ,
Added Selection block and connect it with AfterPicking block,
Added .Connect block from BluetoothClient and connect it with Selection block,
Added Selection block from ListPicker and connect it with .Connect block,
Added Text block from ListPicker and connect it with AfterPicking block,
Added text string from the Text and wrote "Connected" inside the text string and connect it with Text block,
I then worked on the buttons,
Added .Click block from the Button1,
Added .SendText from BluetoothClient and connect it with .Click block,
Added text string from the Text and wrote "1" inside the text string and connect it with .SendText block,
I then did the same with all 9 buttons by asigning number 2 to button 2, asigning number 3 to button 3 and so on.
Finally my blocks were ready,
After the components are added in the designer section and blocks are connected in the blocks section, your app is ready to use. After that you can
download the app by clicking on "Android App(.apk)" under build button. You will get option to either download the .apk file into your system(you'll
then need to transfer the file from your system to your phone)
or you can scan the QR code from your android phone and then you can directly download the app into your phone.
There is another option called "AI companion" under Connect where you need to scan the QR code and you can access the your app into your phone
without downloading the apk. This option is very handy if you are making a lot of changes and need to see the outcome of the changes in your app
without installing and uninstalling it again and again.
You need to download the app called "MIT AI2 Companion": https://play.google.com/store/apps/details?id=edu.mit.appinventor.aicompanion3&hl=en_IN&gl=US
where you can scan the QR code to use the AI companion feature or download the apk file,
For wiring and programming, i referred Adrian's website: http://fabacademy.org/2020/labs/leon/students/adrian-torres/adrianino.html#hc05
Wiring of the bluetooth module with the attiny board is similar to the wiring of the attiny board with the UPDI. I first need
to upload the code by connecting the UPDI pins(UPDI-GND-VCC) of the programmer with the UPDI pins of the attiny board,
after the code is uploaded disconnect the UPDI programnmer from the attiny board and
connect the GND-VCC-RX-TX pins of the bluetooth module with the GND-VCC-TX-RX pins of the attiny board. You would
then just need to give the power supply to your attiny board after code is uploaded and your bluetooth module is attached. You will get a better
idea refering to this image and video provided by Adrian,
http://fabacademy.org/2020/labs/leon/students/adrian-torres/images/adrianino/a_47.jpg
http://fabacademy.org/2020/labs/leon/students/adrian-torres/images/adrianino/bluetooth.mp4
The reason why i didn't showed the wiring that i used is because instead of powering the atting board externally via battery, i was powering the
atting board via UPDI and i even forgot to disconnenct the UPDI pin from the UPDI programmer and so i don't want to crearte any confusion to the
people refering to my documentation.
I took the reference of the code that Adrian used: http://fabacademy.org/2020/labs/leon/students/adrian-torres/assignments/adrianino/bluetooth/bluetooth.ino
After modifying the code a bit, this is the code i used for my attiny board,
you can copy the code from here too.
The code is such that when number "1" is sent to the microcontroller, the led will blink once. If number "2" is sent to the microcontroller, the
led will blink twice and so on. Here SoftwareSerial mySerial(1, 0); // RX, TX
you define the RX/TX pins of the bluetooth.
if you compare my modified code and the code Adrian used, you'll observe that unlike me Adrian didn't declare the RX/TX pins in his code.
The reason is simple, he assigned the RX/TX pins to PB3/PB2 pins of the attiny 1614 board respectively and since the default pins for RX/TX for
the attiny 1614 board is PB3/PB2 respectively, he didn't need to declare that pins number into his code because the attiny IC will by default show the
data onto the serial monitor on pins PB3 and PB2.
http://fabacademy.org/2020/labs/leon/students/adrian-torres/images/adrianino/a_58.jpg
while i assigned the RX/TX pins to PB4/PB5 pins on the attiny1614 board respectively and one of the PB3/PB2 pins is already consumed by
the button.
and this is the reason why i cannot use codes like this which i use i for Arduino UNO,
Serial.begin(9600);
}
void loop(){
Serial.println("Hello world")
delay(1000);
}
instead i have to use code where i have to use SoftwareSerial library where i can define the RX/TX pins,
It was when my colleague, who is using attiny 1614 ic too, was reading the data into the serial monitor without using the SoftwareSerial
library, when i realised that i made a mistake in designing the board and that i should have defined the RX/TX pins as PB3/PB2 respectively.
this is the outcome,
The bluetooth module i was using at the time of testing was HC-02, and it was working fine. However while recording i was using HC-05. I'll
explain the reason why i used HC-02 in the first place later.
So i completed making the app by adding components in the designer section and adding blocks in blocks section and this was how it looked like,
I tested it with my attiny board and it was working fine. However, i thought the size of the button is small so i edited the properties of the button
and this was how the designer and block section looked like,
When i checked the app on my phone through "AI Companion" feature, i was not able to see the list of the bluetooth devices after clicking on the
"Device list" button,
This was the blocks i was using for another app for reading data of ultrasonic sensor(i'll give explaination in more detail later),
As you see the blocks of ListPicker of the led blink and ultrasonc app is same but still i was not getitng the list of bluetooth devices. And yes, i
did tried to download the apk and see if this was a bug, but i still wasn't getting the list.
I then made the whole app again by adding all the components in the designer section and connecting the blocks in the block section again and sure
enough it was working from then on.
Downloadable files of the project from MIT app inventor,
LedBlink
AFter controlling the led onto the attiny 1614 board(output device) through the app, i wanted to read the data of the ultrasonic sensor onto the
app. So again, the procedure is same like blinking the led. Making the app, wiring the bluetooth module and programming.
I had no idea how to make app which gives me the reading of the ultrasonic sensor, so i again looked up for the tutorials from where i learned
how to interface the
Arduino UNO through an app with the help of a bluetooth module and then apply the same principle onto my attiny 1614 board. I came across this
tutorial from where i learned how to make an app via MIT app inventor: https://www.youtube.com/watch?v=iAYcOHAgMKM
Making the app for reading the ultrasonic data was similar to making the app for blinking the led. This is how my designer section looked like,
This too has a ListPucker and horizantal arrangement. However instead of using buttons i was using labels(you can use buttons too, i tested that
and it works). I added a fearure called "Clock" under Sensors. So apart from labels and Clock everything is similar to the led blink app.
this is how my block section looked like,
Again, adding and connecting the blocks for the ListPicker was same as the one one for ledblink app. Apart from the blocks for ListPicker, i'll
explain what blocks i added and which blocks i connected below,
I added .Timer block from Clock,
added if/then block from Control and connected it with ,Timer block,
added IsConnected block from BluetoothClient and connected it beside if block,
added Text block from Label and connected it beside then,
added .ReceiveText block from BluetoothClient and connect it with Text block,
added .BytesAvailableToReceive block from BluetoothClient and connected it with .ReceiveText block,
and finally this was how my block section looked at the end,
No matter what sensor you want to interface through bluetooth, the connection of the bluetooth with the attiny1614 board(or any other microcontroller
board) will be the same. After the code is uploaded into your attiny1614 board, disconnect the UPDI programmer and then connect
GND-VCC-RX-TX of the bluetooth module with the GND-VCC-TX-RX pins of the attiny1614 board. You'll then need to give the power supply
externally. I however forgot to disconnect the UPDI programmer so i was giving the power supply to the attiny1614 board through the UPDI programmer.
It was much later(june 24, 2022 while writing the assignment for networking and communication) that i realised that while sending the data
to the app via bluetooth, there was no need to
attach the serial UPDI converter either! You just need to connect the HC-05 bluetooth and ultrasonic sensor with the connections mentioned
above and just give power supply to the board externally and you're good to go.
Ultrasonic sensor requires two digital pins for echo and trigger pins so connect GND-VCC-ECHO-TRIGGER pins of the ultrasonic sensor to the
GND-VCC-TwoDigitalPins of the attiny1614 board.
I took the reference of this code: https://github.com/futureshocked/ArduinoSbS2017/blob/master/_0510_-_Ultrasonic_Distance_Sensor/_0510_-_Ultrasonic_Distance_Sensor.ino
and then modified a bit for my attiny1614board by declaring the RX/TX pins of the bluetooth through software serial liibrary. After a little
modification this was the code i was using(which is the same code i used in the input devices week),
you can copy the code from here too.
As mentioned above, i was using HC-02 module for blinking LED. Since the module was working fine for blinking the LED i continued using the HC-02
module for reading the ultrasonic data too not realizing that HC-02 is NOT compatible when it comes to transmitting the data to the app. I spent
countless hours watching tutorials after tutorials, switching from attinyboard to UNO, trying different codes, using readymade apps, modifying
the blocks in the MIT app inventor and not giving attention to the mention of the HC-05 module and only paying attention to the
wiring and code and the design of the app.
Before giving up on the idea of reading the data through bluetooth module, i borrowed my colleague's HC-05 module and sure enough, it worked.
If only i had patience to pay attention to all the details in the tutorials, i would have saved lot of my time. I learned it the hard way, but
if anyone is reading this documentations, use HC-05 module!
Here is the outcome,
Downloadable files of the project from MIT app inventor,
Ultrasonic
My goal was to send some feedback/data to the app/website, either custom build or readymade and i didn't wanted any distance barrier and that
is why i gave the provision for the wifi module as per my local instructor's instruction.
Using this wifi module was a headache. Every tutorial i see had different board selectoin, different wiring and still all of them were getting
the same results, while i was struggling with getting success with even one of the combination.
To see if the wifi module is working or not, we first need to run the AT commands in the serial monitor
and if it responds back, the module is working. To start with, you need to openthe serial monitor and typr AT and hit enter and the IDE should
respond "OK".
Just like bluetooth module, i was first trying the esp8266-01 module with the Arduino UNO first becasue it is easy to find it's tutorial.
There were tutorials like this where they were selecting esp8266 as their board,
https://www.youtube.com/watch?v=N5MoXarCF_4
https://www.youtube.com/watch?v=ji71cHaGW8w
You can do that by first adding this link into the Additional board manager URl:
https://arduino.esp8266.com/stable/package_esp8266com_index.json
if there is already a link there, you can paste another link by adding a "," between two links.
After installing the library, i selected the board as "Generic esp8266 module" and i was getting this error when i tried to uplaod a blank sketch,
i tried all the combinations like connecting and disconnecting the esp8266-01 module while uploading the sketch, checked the wiring, changing
baud rates but still i was
facing the error everytime.
I then came accross tutorials like this,
https://www.youtube.com/watch?v=KpI9l8xa0MU
https://www.youtube.com/watch?v=6rx-iyUq1Po
where they were selecting Arduino UNO as their board. I again tried all the combinations mentioned above, but still i wasn't getting any response
from the AT commands.
Just like selecting the board, i came accross a bunch of tutorial and all were having different kind of connection for their esp8266-01 module.
like this tutorial,
https://www.instructables.com/Getting-Started-With-the-ESP8266-ESP-01/
the person is using connections like,
esp8266-01 | Arduino UNO |
---|---|
vcc | 3.3V |
gnd | gnd |
rx | tx |
tx | rx |
CH_EN | 3.3v |
gpio0 | nil |
gpio2 | nil |
reset | nil |
without using any resistors.
Then i came accross this tutorial where the person was using 1Kohm resistor for the CH-EN pin,
https://hackster.imgix.net/uploads/attachments/987715/ReprogramModuleNano.png?auto=compress%2Cformat&w=680&h=510&fit=max
https://create.arduino.cc/projecthub/ahmedibrrahim/iot-using-esp8266-01-and-arduino-afa35e
Then i came accross this tutorial where the person is using a voltage divider for the RX pins and also using 10Kohm resistor for the VCC and CH_EN
pin.
https://hackster.imgix.net/uploads/attachments/743851/esp-uno-diagram_FhozIF3OCj.png?auto=compress%2Cformat&w=680&h=510&fit=max
https://create.arduino.cc/projecthub/imjeffparedes/add-wifi-to-arduino-uno-663b9e
I tried and tested all the connections mentioned above but i was still getting no response from the seria monitor when i typed the AT commands.
Finally i came accross this tutorial, which was suggested by my one of my instructor- Suvarna Sawant, where the perosn was using a 10Kohm resistor for the CH_EN pin,
https://www.youtube.com/watch?v=01BtAGrSJmc
and when i tested i was finally getting the "ok" response when i typed "AT" in serial monitor. So this is the connectin that worked for the
module i was using,
esp8266-01 | Arduino UNO |
---|---|
vcc | 3.3V |
gnd | gnd |
rx | tx |
tx | rx |
CH_EN | 3.3v via 10Kohm resistor |
gpio0 | nil |
gpio2 | nil |
reset | nil |
and the board i was selecting was Arduino UNO.
(((ss of at commands ran)))
Once the AT commands ran with the bluetooth attached, i started searching for the tutorial where i can control led through wifi and i came accross
this tutorial: https://www.youtube.com/watch?v=hZAX2d8qrbs
where the person was controlling the led with the blynk cloud website. So this is how i SET UP the website/app for controlling led
through wifi,
go to the blynk cloud website and create an account: https://blynk.cloud/dashboard/login
after signing in, click on "New template" buton,
select Arduino as hardware andwifi as connection and fill the other necessary details,
after that go to "Datastreams" tab and click on "new datastream" and then click on Digital,
after that assign the pin number onwhichyou are going to connect the led and set pin mode as "output",
After that go to "webdashboard" tab and drag anddrop the "switch",
Hover over the switch and click on settings icon and you'll be asked to either choose data stream or create datastream. Since i had
already created the datastream, i clicked on choose data stream and seleted the data stream i created,
then go to the "search" section and click on new device > Fromn template > select the template you just created,
You'll be provided TemplateID, Device name and Authentication token. Copy that because you'll need to paste it in the code.
Now youe need to setup the app in your mobile. Download the blynk IoT app: https://play.google.com/store/apps/details?id=cloud.blynk&hl=en_IN&gl=US
Open the app and sign in with the same account in which you made the template. After logging in you'll see the template in your home screen.
click on that template,
then click on "Setup Dashboard",
click on the three line icon on the top right corner and tap on button and the button will be put on the canvas,
click on the button that is added and select the data stream that you created in the web browser. Give it a title, assign them the value and mode
as you wish,
And your app is ready to use. Now the button you added in the web browser and in the app are in sync now. If you turn on the buttonm in the app,
the button on the web browser will also turn on and vice-a-versa.
Go to this webvsite: https://examples.blynk.cc/
For the board, select "Arduino UNO". For the connection, select "esp8266 wifi shield". For the Example select "Blynk blink" .
Copth the code and pasrte it in your Arduino IDE. After pasting the code, these are the changes i made in my sketch,
Paste the template id, device name and authentication token here, which you had copied earlier,
Comment the line Blynk.begin(auth, wifi, ssid, pass);
and uncomment the line Blynk.begin(auth, wifi, ssid, pass, "blynk.cloud", 80);
define the RX/TX pins of your wifi module here, SoftwareSerial EspSerial(8, 9); // RX, TX
set the esp8266 buad rate to 15200, as i was unable to initiate the connection with 38400 baud rate,
You can change the baudrate of the esp8266 by the using AT+UART commands, but i was getting "Error" message when i tried to run this particular
command.
Once the changes are made, upload the sketch with Arduini UNO board selected and after the code is uploaded open the serial monitor and it will
initiate the connection between your wifi module and UNO. You should see line like "Connected to wifi" and "Ready (ping: 12ms)"
This is the sletch i used, you can just change the RX,TX pins that are defined in the sketch,
you can copy the code from here too.
After the connection is made between your wifi module and UNO, connect a led to the digital pin which you had defined while making the
template. And turn on/off the led from your web browser or app,
1 As you saw in the video, the led did turn on and off once without any lag, but after that, though the app and web browser were in sync,
the led was not turning on wheven when i was switching the button on and off. I thought there was some issue with the connwction of the module
and jumper wire so after i adjusted a bit, it was again working properly. It was just a coincidence though, becase off the recording, the led
was again not very responsive ot the button in the app/browser.
2 the module i was using was on of my colleague's. When i got my own module, which i had ordered earlier, i was not able to run the
AT commands. When i searched online, i discovered that the esp8266-01 module needs to be flahsed with the AT firmware. I followed a lot
of tutorials and flahsed a lot of firmwares from different sources but i still wasn't getting any "ok" response when i entered the "AT" in
the serial monitor.
I am sharing one of the tutorials here, you'll find other tutorials onlline if this one doesn't work for you,
https://www.youtube.com/watch?v=Ag_Yk_0AFxs
For the wiring, use the connection mentioned in the video tutorial.
Since controllig the led with esp8266-01 was not as responsive as it was with the bluetooth, and also i was not able to run the AT commands with
the new esp8266-01 i ordered, i found the module very unreliable. I then decided to switch the module from esp8266-01 to esp8266-12e.
Since the esp8266-12e module is such where i cannot even insert a jumper wire, i decided to design a board where i will add 22 header pins(8 on the
left 8 on the right 6 at the bottom) and a footprint of the esp8266-12e. However, my instructor Rohan Rege suggested that instead of just
giving header pins, make a breakout board. I was again in the search for some documentation where someone has made a breakout board for esp8266-12e.
I did came accross this one where the person has made a breakout board, but they didn't provide the design file,
http://fabacademy.org/2020/labs/oulu/students/xinhui-hu/Week14_Interface_and_Application.html .
So i had to design the board from the scratch. Rohan Rege did help me make the complete schematic of the board. We took the reference of the
esp-32 WROOM board from the fab academy website,
http://academy.cba.mit.edu/classes/networking_communications/ESP32/hello.ESP32-WROOM.png
apart from the connection and components mentioned in the schematic mentioned above, Rohan suggested to use BSS138 N-Chanel Logic Level Mosfet
for the RX and TX pins
because the the operating voltage of the the attiny1614 board as well as UNO is 5V where the operating voltage of the esp8266-12e/01 is 3V. From
what i understood the signal transmitting from the TX pins of the esp8266-12e won't be understood by the RX pin of the attiny1614 board and
the signal transmitting from the TX pins of the attiny1614 board won't be understood by the RX pin of the esp8266-12e board.
So thia was my final schematic and board for the esp8266-12e,
I did a big mistake in making the board. I considered the esp89266-12e as one such IC and kept it in the middle, not realizing that the antena of
the esp8266-12e should be outside of the board. Another thing i could have done was take out all the unassigned pins and connect them to
the header pins(just like rohan suggested me) but i was in a rush so i just took out 6 unassigned pins.
This was some weird error in the design rule check, I however ignored the error and proceeded with miling and stuffing.
I then added the logo of my final project onto the board from inkscape,
These were the components required to make the esp8266-12e board,
1x esp8266-12e chip
1x 1x6 male header pin(i decided to solder the 6 unassigned pins when i require them and oly solderd the serial pins)
2x BSS138 N-Chanel Logic Level Mosfet
1x SMD slider switch
1x AMS1117 3.3V regulator
1x push button
6x 10Kohm resistor
2x 0ohms resistor
1x 1UF capacitor
1x 10UF capacitor
after the soldering was done, this was how my esp8266-12e board looked
like,
Wiring of the esp8266-12e was simple. Since i have used a 3.3V regulator in the breakout board, i had to connect,
GND pin of the esp8266-12e board with GND pin of UNO,
VCC pin of the esp8266-12e board with 5V pin of UNO,
RX pin of the esp8266-12e board with digital pin pin 9(defined TX in the sketch) of UNO,
TX pin of the esp8266-12e board with digital pin pin 8(defined RX in the sketch) of UNO
I used the same sketch (the one i used for esp8266-01) for the esp8266-12e,
you can copy the code from here too.
I attached a led to the digital pin 10 since the app i made for the esp8266-01 had digital pin 10 assigned for the led.
After the sketch was uploaded and wiring was set, this was the outcome with the esp8266-12e,
There were two things in the esp8266-12e board that different from the esp8266-01 module i was using,
esp8266-01 | esp8266-12e |
---|---|
use of jumper wire and breadboard | every component soldered |
no use of logic level mosfet | used logic level mosfet for the RX and TX pins |
with these changes applied into the esp8266-12e board, i had high hopes that at least the the communication through the wifi would be very
responsive, unlike the results i was with esp8266-01 module. However, unlike my expectations, there were still some issues with turning the
LED on and off. If you see the video, the LED did turned on and off initially, but in the middle, the LED wasn't responding to the button when i
was switching the button on and off. So i guess i could just have downloaded the PNG files of inner traces and outline of this particular board
from the fab academy website,
http://academy.cba.mit.edu/classes/networking_communications/ESP8266/hello.ESP-01.jpg
instead of designing the whole board because the LED was behaving the same way with esp8266-12e board, as it was behaving with the esp8266-01 module.
AFter the esp8266-12e board was working with the UNO, it was time to test it with my attiny board. When i tried to upload the sketch to my
attiny board, i was getting this error while compiling,
Rohan saw the error and looked up on the internet and told me to change the library verison of blynk to 0.6.0
And after updating the library the code was successfully compiled.
HOWEVER, if you see the message at the bottom, it says "Sketch uses 16284 bytes (99%) of program storage space. Maximum is 16384 bytes."
Since the esp8266-12e alone was consuming 99% of the memory, there was no way i wan squeeze the program for step response, OLED and ultrasonic
in 1%. I know that there could be a different way, just like bluetooth module, to communicate through the esp8266-12e othere than using
blynk cloud, but at this point i didn't want to waste a single second working either with attiny1614 or esp8266. So i decided to change the
IC of my final project board from atting1614 to esp32, since there is an in-build wifi in it and i'll find a lot of documnetation regarding the
esp32 from the previous year students.
Here are all the mistakes i made while making the board with attiny1614 IC,
What i did | What i should have done |
---|---|
For the programming i gave provision for two pins: UPDI-GND | Sould hae given provision for 3 pins: UPDI-GND-VCC |
soldered two 1Kohm resistor in pyramid structure | Should have gave provision for 2 resistor in series while designing the board |
For converting 5V to 3V, i used voltage divider with 1K and 2K ohms resistor | Should have used a voltage regulator of 3.3V |
assigned the RX-TX pins on pins PA4 and PA5(not the default for the IC) | should have assigned RX-TX pins on pins PB3 and PB2(default pins for the IC) |
assigned the RX-TX pins for wifi module, step response and serial communication(ftdi) to pins PA4 and PA5 | should have assigned different set of pins for RX-TX for every individual module |
assigned pins for the sensors with this orientation: GND-VCC-SignalPin1-SignalPin2 | should have taken the reference of actual module for the orientation of pins |
For the group assignment, apart from making the app in the MIT app inventor, we tried using other tools like Processing software. Processing
is a tool to show you the data of your input/output device in the form of visual arts which is better than seeing digits when it comes
to interfacing few devices. We also exploerd how to send the data to the firebase and into the the custom app we made. You'll
find more details about processing and firebase in the group asisgnment page here:
https://fabacademy.org/2022/labs/vigyanashram/groupassig/groupassignment11.html
In this Wildcard week, we had to design and produce something with a digital fabrication process that we had not covered in the previous assignments.
Out of the few options i had, i decided to explore the CNC sewing machine(Usha MC-200E), which is in the fabricademy lab at Vigyan Ashram. Just
like operating any other machine, I had to go through three stages to complete the assignment: computer aided design, computer aided machining
and operating the acutal machine.
I made a tic-tac-toe design in the solidworks.
I kept the thickness of the "X", "O" and the "#" as 2mm,
I kept the thickness of the line that connects the three circle as 1 mm,
After the model was ready, i exported the file as .png format,
This is the .png file that got exported,
I then went to this website: https://manytools.org/image/colorize-filter/
and converted the image into monochrome. I set the color to black(0,0,0) and contrast to maximum level,
Here is the monochrome png of the deisgn,
You can download the solidworks design file from here:
xo cloth design
For generating the toolpath, i was using Digitizer Jr. software version 5 which was pre-installed in the
fabricademy lab's PC. Digitizer Jr. is a paid software and you'll need a licence key. Link for Digitizer Jr. v5: https://www.elna.com/en-gw/downloads.php?type=5&id=590
These are the steps i followed for generating the toolapth,
Since i wanted to generate the toolpath for the Usha MC-200E embroidery machine, i selected "MC200E/Elna8100" as the machine,
select the hoop size,
import the monochrome image by selecting "Insert artwork" from file,
You can see the size of your design at the top. The software considers the background image too, when calculating the size of the design,
so your actual design might be small and can fit into 50x50 hoop but it is better to select a bigger hoop.
Select "Click-to-fill" under Auto-Digitize and then click on the image,
a menu will pop up. Select "Cartoon processing" under processing options and set the value of cartoon processing to 94,
Now select every part of the design to assign them the toolpath,
Select the "Select" tab and click on the design and then press delete, to remove the backgroud,
now select each part of the design and assign them with the color in which you want to sew your design. This is just for your reference
while changing the reel of the thread,
To export the toolpath, select "Write to Card/USB" under Output Design,
Click on the "name" tab and givyou toolpath file a name. The toolpath file for the CNC Sewing machine is .jef
Select the path where you want to export the toolpath file and then click on "write" button,
you can download the toolpath from here,
xo cloth toolpath
As i was opeating the machine for the first time, i first sew the design on a spare piece of cloth with a single color thread just so i can
get to know how the machine works. This was the outcome after the sewing was done,
Looking at the outcome, i decided to change the thickness of "X", "O" and "#" to 1.5mm
I wanted the tic-tac-toe design in three colors, the "X" in red color, the "O" and the line connecting the "O" in green color and the "#" in
black color. But since the line connecting the "0" was merging with the "#", i was not able to select the "O" and the "#" individually and
when i select just one "O", every "O" and the "#" was getting selected,
So what i had to do was break he connection between the line connecting the "O" and the "#" so that i can assign individual toolpath to every
"O+line connecting the O", "X" and the "#". To make that edit, i added a thin white line from inkscape,
here is the png file after making the edit,
you can download the solidworks design file after changing the thickness from here:
xo tshirt design
I'll again explain the steps for generating the toolpath,
i selected "MC200E/Elna8100" as the machine,
select the hoop size,
import the monochrome image by selecting "Insert artwork" under Auto-Digitize,
Select "Click-to-fill" under Auto-Digitize and then click on the image,
a menu will pop up. Select "Cartoon processing" under processing options and set the value of cartoon processing to 94,
the white line that i added in the inkscape did work! Now when i select the "#" only the "#" was getting selected and not the "O",
Now select every part of the design to assign them the toolpath,
Select the "Select" tab and click on the design and then press delete, to remove the backgroud,
before assigning the color to each part of the design, i made some changes in the object properties. Select each part of the design or just press
Ctrl+A and then go to "Object properties" under "Design settings",
On the "Fill" tab, under Stitch type, select "Tatami",
under stitch settings, set the spacing to 0.10mm. By default it is 0.4mm,
now select each part of the design and assign them with the color in which you want to sew your design. This is just for your reference
while changing the reel of the thread,
To export the toolpath, select "Write to Card/USB" under Output Design,
Click on the "name" tab and givyou toolpath file a name. The toolpath file for the CNC Sewing machine is .jef
Select the path where you want to export the toolpath file and then click on "write" button,
you can download the toolpath from here,
xo tshirt toolpath
After sewing the first design on a spare piece of cloth, i now wanted to stich the new design on the tshirt. I'll explain in brief about how to
operate the machine and the steps i followed,
This is how the CNC sewing machine looks like,
I first prepared the machine by inserting the thread reel and bobbin into it's place. Placing the thread reel,
Placing the bobbin into it's place,
you can refill the bobbin with the help of the thread reel. First manually fill the bobbin by interwining the thread clockwise and then place
the bobbin into the metal rod and slide it on the right side with thread reel onto its place,
IF you see the control panel, when you slide the metal rod to the right, the mode will change from sewing to refill. With the metal
rod switched to the right, press the start/stop button and the bobbin will start to refill the thread from the thread reel and it will
automatically stop once it is completely filled.
after the bobbin is refilled, place it in it's place and keep the end of the thread outside and then close the case,
once the bobbin is set, you need to insert the thread of the reel into the needle. However you cannot directly insert the thread into the needle,
you have to pass the thread through the specific path/route,
With the machine prepared with thread reel and bobbin, i started preparing the t-shirt by attaching the hoop. This is the 140x140 hoop.
the hoop on the left is the bottom hoop which is meant to be put under the cloth and that hoop will be locked into the hatch of the machine. You
need to put a canvas onto the bottom hoop before fixing it with the cloth. So there will be the bottom hoop, on top of that there will be
canvas, on top of that there will be cloth and on top of that there will be the top hoop.
After fixing the top hoop, you need to stretch the cloth so that there is no crease onto the cloth,
Once the tshirt is ready with the hoop attached, lock the hoop into the hatch of the machine. Before locking the hoop into the machine, make
sure that the bobbin is already in the case with the thread out AND only one side of the tshirt is is being slid under the needle or else both
side of the tshirt will be stiched together and you won't be able to wear the tshirt. In another words, make sure this is the orientation:
at the bottom there is the bottom hoop, on top of that there is canvas, on top of that there is one side of the tshirt and on top of that there
is top hoop.
To lock the hoop into the hatch: pull the slider on the hoop down, slide the hoop into the hatch and release the slider to lock the hoop into
the hatch,
after the hoop is locked, we can start sewing the design. There is a slot for inserting the USB on the right side of the machine, insert the
USB with the generated toolpath/.JEF file into the slot and click on the USB button in the control panel,
select the folder where the toolpath is saved,
select the toolpath/.JEF file,
Once you design is opened, you can select which part of the design you want to sew first, the "#" one or the "X" one ot the "O" one. You can
navigate through the parts of the design through these button,
I decided to sew the "#" first,
Then click on the start/stop button and the sewing will start,
I was facing this common issue countless number of times, which was "Rethread and start". This means that the thread in the needle is broke si
i had to rethread. So first i need to pull the thread from the machine and again insert the thread into the needle through that specific path/route.
While sewing, the needle tore a part of the tshirt. Because of this, when the machine was sewing on that particular part where there was no cloth,
the thread started to clog
in the bobbin case, due to which i had to open the whole case to remove the debris of thread,
I knew the sewing was going to take a lot of time to finish the design, so instead of investing the time on this tshirt with the hole in it,
i decided to design the same logo onto a new tshirt.
Earlier, there was clogging in the bobbin case after the needle tore a small part of the tshirt and the machine kept sewing on the part where
there was hole. This time, there was clogging in the bobbin case
even with the tshirt in perfect condition,
due to which i was getting the Rethread error every 2 seconds and the thread in the needle was fine so i knew there was some issue with the bobbin
thread and i had to open the bobbin case
to clear the clogging. The tshirt was stuck with the bobbin thread and in order to cut the thread, the tshirt got stuck in the flap under the
needle and tore off,
First time the needle tore the tshirt and kept sewing in the place where the tshirt was torn so there was clogging in the bobbin case. This might
have happened due to poor quality tshirt. But i still don't know what happend for the second time where the tshirt was completely fine but somehow
there was still clogging in the bobbin case. I will try to sew the same design on the other cloth and this time i will sew with different color
thread, which was my intention and it is yet to explore, if the time permits.
My final project is about detecting water leakage from the taps/faucets. The issue is that in public places, due to constant use of taps, they
are bound to get damaged because of which water will start to leak. Sometimes people keep the tap partially/fully open. I made a device
that detects the running water and gives instant feedback through LED and buzzer and also stores the data,
this is what my device will do:
since the running water can be in the form of usage and leakage, we need to differenciate between them. To
do that i am using an ultrasonic sensor to detect the human presence,
so if the range of ultrasonic sensor is upto 60-70 centimeters and the water is running then it means that there is a person nearby and
so the microcontroller will consider this situation as usage and won't give any feedback or store the data. If
the range of ultrasonic sensor is more than 60-70 centimeters and the water is running then it means that there is no person nearby and
so the microcontroller will consider this situation as leakage and it will start storing the data in the form of drop and stream.
To detect the running water, i am using a water sensor that i mnade from screw connector and needle,
every odd pins and even pins are connected together and the odd pin and even pin is connected to the YL-69 moisture detector module. The
YL-69 moisture detector module checks the resistivity/DC conductivity so when the water falls onto the water sensor, the resistivity
will decrease and the microcontroller will know the presence of the water.
The device will keep the data for drops and stream separately and show it in the OLED and also send the data to the thingspeak through
wifi,
and for the instant feedback it will indicate through LED and buzzer.
I am using a custom made printer circut board with esp32 IC as the microcontroller,
Before joining Fab Academy, i had worked on this project. At that time i had the idea that i want to detect the running water in the form
of drops and stream. So with the help of my friend, Mithilesh Barasara, we made a custom through hole PCB,
Here is what the first version of the project does:
- It detects the running water with the help of voltage divider that calculates resistivity,
I tried using two set of mesh wire to connect to the
screw connector, but the result was not very accurate because sometimes the water would either got stuck between two mesh wire or the
water just wont get detected,
- to detect the human presence we were using photoresistor/LDR sensor. I plaaned to install the photoresistor(receiver) on one end of the washbasin
and install the light(transmitter) on the other end of the machine. So if there is a person nearby, the light being received by the photoresistor
will break and the microcontroller will know there is person nearby and vice-a-versa.
- we were using a LCD without I2C module to display the data of stream and drops,
- we were using Arduio NANO as the microcontroller.
- before we stopped working on the project, the device we made was sucessfully able to store the data of drops and stream separately
considering the behaviour of the leakage, able to display the data onto the LCD, able to give instant feedback through LED and able to differenciate
between usage and leakage through the photoresistor. What was remainig was to design a water sensor to connect it to the screw connector mounted
on the custom made through hole PCB.
Firstly i designed the final project board using Autodesk Eagle,
i then designed the case and holder for the ultrasonic sensor,
i then designed the case for the water sensor,
i later had to change the needle which was shorter so i had to re-design the base part of the case,
i designed the shielf for OLED and LED-buzzer and some washer/spacer rings for the project board to lift,
I then finally designed the case for my final project board,
Refer the bill of material:
The Bill of material doesn't include,
all the SMD components used for making the esp32 board,
200 grams of filament used for 3D printing,
Acrylic sheet used for making the shield for OLED and LED-Buzzer and for makingthe studs/washer.
You can download the word file for the links of each component from here:
Bill of material
To detect the running water, i made a water sensor with the help of screw connector and needle,
I also made a case so that it directly mounts onto the tap,
here is the working of the water sensor,
I also designed and made an embedded system: a custom made printed circuit board interfacing all the sensor that are going to be used
for the final project
computer aided design
for: making the design of the cases for the components and project board
CAD software used: solidworks
CAM software used: fractory
computer controlled cutting
for: cuttint the shield for the OLED and LED-buzzer
CAD software used: solidworks
CAM software used: RDWorks
Electronis production
for: milling the circuit board for the project
CAD software used: Eagle
CAM software used: Vpanel
3D Printing
for: fabricating the cases for the components and project board
CAD software used: solidworks
CAM software used: fractory
Electronics design
for: designing the custom board for the project
CAD software used: eagle
Embedded programming
for: programming the project board
software used: Arduino IDE
Input/Output device
for: deciding what input and output devices to use for the final project
Interface and application programming
for: to send the data of leakage to a cloud through wifi
software used: Arduino IDE
tools used: ThingSpeak
Here are all the questions i had at the initial stage of working on this project,
1. what sensor do i need to use to detect human presense? Is there any sensor where the transmitter and receiver are on a
single module?
2. Should i use LCD with the I2C module to display the data or should i go for something less bulky like OLED?
3. How can i make the water sensor which detects drops and stream separately and also water doesn't stick/clog
onto the water sensor?
4. How and where can i send the data of drop and stream thorugh wifi?
5. what IC/microcontroller should i select for my final project?
Currently i have installed the system in the kitchen of vigyan ashram. I will observe how the system is behaving with the usage and leakage of
the water like if there is any need to tweak the range of ultrasonic sensor, if the water is sticking onto the water sensor, if there is
any flaw in the code which is making the system ineffective. Considering all this
i will make some changes if necesary. In the next spiral, i will add water sensor on all taps of the wahsbasin and will try to get the
data of each taps separately.
P.S. All the answers are in the past tense and not future because i am writing this assignment after the completion of final project and it's
documentation.
when discussing the idea with others and working on the project, a lot of times i had to make it clear that the device i want to make will only
give feedback regarding the leakage, it won't solve the issue. The device i made will only show you the data of leaking drop and stream
and give instant feedback and then it will be upon the person in charge of maintainance to examine the reason behind the leakage and fix it. So
if you(institute or public place) are someone who finds the leaking water from the taps an issue worth solving and wants to install some device
that will just indicate them and give you data of the leakage so that you can take initiative to solve the leakage problem as soon as possible,
then i have the perfect solution.
currently the final project is in a prototype stage and it is working as per my expectation. However it not not ready to be installed it in
public places. To start with, the case for the water sensor i made is very bulky and the height of it's case is very big. Because of these
two reasons, the water gets stuck in the water sensor resulting into microcontroller constantly incrementing value in the stream even though
there is no running water, which is something we don't want
so if i can decrease the height so that the water sensor is just below the tap and also make the case very small then i believe i can solve
this problem of water sticking onto the sensor.
Other modification i can do is install the water sensor in multiple taps and get the data of each taps separately.
The issue with the ignorance and lack of communication whenit comes to leaking water from the tap, this device will be effective in public
places, where there is constant use of water. So I'll start with approaching places like Bus statiuon, Railway
station, schools, colleges, big companies and institutes, find if there is a problem of leaking water after over a period od time and whether
they see this as a problem. If they do need a solution, i'll provide them by installing the device i made.
I have already made the device which is easy to install, like you do not need to make huge changes in the washbasin like replacing the tap and
drill a lot of holes for installing the sensor and main board and there was not much of wiring too. I can still make some improvement by
making the case for water sensor less bulky which would be hardly noticable. So in the end, you just need to install the water sensor onto the
tap, install the ultrasonic sensor and the microcontroller case near the washbasin which again would be hardle noticable.
To make this project a big scale, i would require funds to purchase the components and fabricate the casings. I can approach some companies
and investors or I can even get subsidy from the government for all the one who are willing to install the system into their premises.
To protect the idea from getting stolen or used without my permission i have taken a creative commerce licence by following this steps,
Go to the website of creative commerce: https://creativecommons.org/
then click on "Get started",
then click on "Chooser beta",
Then you'll need to answer a bunch of questions regarding the kind of licence you want to take for your final project.
I wamted people to give me proper attribution/credits who use my work so i selected this option,
i didn't want people to use my project for commercial use so i selected this option,
i didn't want people to remix, adapt or build upon my work so i selected this option,
confirm that CC licence is appropriate,
filled up details of my project. In the "Link to work" i pasted the link for my final project tab and in the "Link to creator profile" i pasted
the link for my website and then click on "Done"
on the right side you can copy the rich text or HTML embed link of the licence. I copied the embed HTML link from under the "HTML" tab and
pasted that link into my website,
here is how my Attribution, NonCommercial, NoDerivatives 4.0 International licence looks like,
It would be great if installing this device for detecting the leaking/running water at every washbasin at the public place becomes a standard
norm. To do that i can directly approach the contractors who builds washbasin in the public places so at the time of construction when the
washbasin is being is being build, you'll get this device pre-installed.
My final project slide,
My final project video,
My final project was make a device that detects water leakage from the taps, you'll find detailed description about that in my final project
tab. To detect
the running water, i had to make/use some kind of sensor that tells the microcontroller if there is any presense of water. The running water
can be in use or it can be a leak and to differenciate between them, i had to use a sensor that detects human presence. So if there is running
water and there is no human presence, the microcontroller should start storing the data for the leaking stream or drop.
(The "X" in the above image is possible places to put the sensor to detect running water, however i decided to finally put the sensor
directly under the tap)
With this tentative plan in my mind, I started with making a custom PCB and gave the provision for all the compoents required for the project,
then with the help of my local instructors, Suhas Labade and Suvarna Sawant and my friend Mithilesh Barasara(who wrote the code the first version
of the code) we completed the programming part where the microcontroller will store the values in the form of drops and stream depending
on the behaviour of the runnig water, show the value of drop and stream on OLED and lastly gives feedback via LED and buzzer if the value
of stream and drop exceeds a certain value
lastly we modified the code so that the value of drop and stream is sent to thingspeak through wifi,
After the programming was done, i made the cases for the project board and all the components,
In the first week of fab academy, we had to draft a potential final project idea where i had some expectations from the final project, one
of which was that the device should show the amount of water wasted due to leakage or since how long the water is being wasted(calculated measurement), However
currently
the data shown in OLED and thingspeak is just the incremented values of stream and drop. Another one was to send a notification to any device
if the value of drop or stream exceedsa certain value. So these are the two task that i have yet to complete.
I made a device with custom made PCB and multiple brought out components like ultrasonic sensor, OLED, YL-69 moisture detecting module, LED
and buzzer which is sucessfully able to detect the behaviour of drop and stream, store the incremented value of drop and stream separately,
showz the value
of incremented drops and stream onto the OLED as well as thingspeak, able to give feedbaack through LED-buzzer, able to turn the LED-buzzer
off with the push button,
the water sensor i made with the help of screw connector and neeedle,
where every alternative pins if the RX and TX and when the water makes contatct between two needle it indicates the microcontroller about the
water presense,
was able to detect the running water in the form of stream and drop SEPARATELY. However, due the bluky case and the position of the water
sensor being too away from the tip of the tap, the water gets stuck into the water sensor,
because of that, the microcontroller will constantly increment the values in stream, even though there is no running water.
so making the case for water sensor or re-considering the water sensor is something i have work on.
1.
What changes in the code do I need to make so that instead of just showing the incremented values of drop and stream,
the microontroller shows the amount of leaking water or the amount of time for which water is leaking in the form of drop and stream?
2.
What can i do so that the water doesn't stick onto the water sensor? Do i need to re-design the case or do i need to change the water
sensor?
3.
Can i replace the brought out components with the custom made one? If so, which components can i replace?
4.
Can i make a custom app where i can read the data of incremeted stream and drops? If so how can i make one? Can i also get notifications from
the custom app if the value of stream or drop exceeds a certain value?
Back in July 2018, i completed the first spiral of this project with the help of my friend, Mithilesh Barasara, where we made a custom through
hole PCB and did the programming part where the Arduino NANO was sucessfully able to store the data of stream and drop according to it's
behaviour, show the data onto the LCD and getting the feedback from LED when the value of stream and drop exceeds a certain value,
During the fab academy, June 2022, i completed the second spiral of this project by replacing components like LCD to OLED, LDR sensor/photoresistor
to ultrasonic sensor. I also made a water sensor and with the help of my local instructors, we were able to send the data onto the
thingspeak. This time, i made a better prototype by making a custom PCB and also made the cases for the PCB, OLED, utrasonic sensor and water
sensor,
In the third spiral i am planning to,
- change the case of water sensor or change the water sensor itself, so that the water doesn't get stuck.
- replace the brought out component with the custom made ones
- install the water sensor and sensor to detect human presense on multiple taps and also modify the code so that i get the data of
each tap separately.
- install the device at a public place. Currently the project is in a prototpe stage and i have tested it by installing it in the kitchen
at Vigyan Ashram. I a want to made the device sturdy and reliable enough to install it in public place.
I have leared a lot of things from the processes through which the project has gone through,
- computer aided design, where i learned 2D and 3D software to make design of the cases for project board and components
- computer controlled cutting, where i learned how to use a laser cutter.
- Electronis production, where i learned how to mill the PCB into the milling machine.
- 3D Printing, where i learned about using 3D printer and how i can get better prints by making tweaks in the slicing software
- Electronics design, where i learned the Autodesk Eagle software and learned to design my own custom made PCB
- Embedded programming, where i got the glimpse of programming and how we can add logic for all the comopnents so that the microcontroller
board works the way we want.
- Input & Output devices, where i leared how all the componnets used in the project, work individually and collectively.
- Interface and application programming, where i learned that i can send the data of any componnet or the microcontroller to an app or
a website through bluetooth and wifi