Skip to content

Development of the final project

The idea

I live in a small town in the east of Iceland, Neskaupstaður. The town is in a fjord called Norðfjörður. We are surrounded by tall mountains and the sea is so close. Sometimes whales, small and big, appear above the surface and I am so faccinated by the thought about everything that is hidden under the surface.

I find the Humpback whale very interesting. It is beautiful and playful animal. It is a large whale and i don't think it has visited our fjord but it can be found all around Iceland. Fortunately, this is not an endangered species. It is common for the Humpback whale to travel all the way to the Caribbean ocean and back to Iceland. You can read about a research on it here.

MapOfHumpbackTravelingRoutes

Map of Humpback's traveling routes. Mackay, 2015.

What will the final project look like?

In Week 02 I developed the idea and here you can see what it could possibly look like:

FinalProject

As you can see, the idea is to 3D print a model of a whale and make it hover over a map. To be able to let it float in the air I wanted to use a levitation module that uses magnetic force to let a float hover in the air. Then I would design the model in a way that the float would stay inside the model. I would rasterize the map on to a plexiglass plate and maybe mould and cast a small replica of Iceland, where I live. Then I would use LED that would light up one by one to show the traveling route of the whale.

This project would be made for people who want to visualize, and in a certain way connect themselves to an animal or species. It should also be an reminder that we, the human kind, should respect and care for our nature and the living beings that share it with us. This could also be used by teachers in STEM education.

Levitation

As I mentioned in Week 01, I saw a levitation model used in the final project called Cloudio in Fab Academy by Wim Lance and it made me want to use levitation.

My instructor, Svavar Konráðsson sent me a link to this video. Here it is explained how the levitation module works, where it can be bought (Bambu Lab) and how to make 3D printed models levitate. it also has links to other information on using a levitation module with different types of 3D models. In the video it is also shown how a 3D module can be balanced with steel balls that Bambu Lab suggests using when it is difficult to balance models.

This video gave me important information because in the beginning I was worried that it might be hard to find the right balancing point. I bought the levitation module before Fab Academy began and tested it. When trying it out I found that when I didn't find the right balance everything collapsed. Since I want to 3D print a whale, which is very irregular in shape, I might have problems with balancing it right. Maybe it might be a good idea to make room for steel balls to be able to balance it if necessary.

Here you can see information about the levitation model and how it works. I bought my levitation model Here.

Tracking of whales

I contacted the Marine and freshwater research institute in Iceland and they were so kind to send me GPS information on the travels of Humpback whale and a Mink whale. I was surprised to see that the paths didn't show their travels further south, but I was told that the batteries run out. After the batteries run out the whales can be identified by taking photos of their tail and over 1000 individual Humpback whales have been identified, as you can read about here. I find that very interesting.

On this Tracking map for whales - website you can see the tracking routes map that the the Marine and freshwater research institute sent me. It is the North Atlantic Marine Mammal Commision, or NAMMCO, that does these researches on the Humpback whale. You can read more about them here.

When I looked at information on Mink whales, I started to think about changing from Humpback whale to Mink whale, because I like the too, but I have to make a decision soon. Updated: I have decided to go on with the Humpback whale.

HumpbackwhaleTravels Travels of Humpback whales, Marine and freshwater research institute, 2025.

MinkWhaleTravels Travels of a Mink whale, Marine and freshwater research institute, 2025.

Videos of mini model of final project

In week 05 I made a mini model of the whale, the box and the plexiglass map (in blue and matt clear).

Video of the mini whale model that was 3D printed

Here you can see the 3D model that I printed in Bambu Lab X1 Carbon. With the model I was trying to visualize what the final model should look like. If the whale is supposed to hover in the air with the help of magnetic force, the levitation module will be placed in a base and the float has to be placed inside the 3D model. The float is round and flat, so the bottom part of the ocean in the 3D model, should contain the float. I think I made the sea too tall because if the model is too tall it might be hard to balance it. In the final model I need to create space outside and around the float so that I can add steel balls or something alike in the right places to balance it. P.s. In the background you can see the fjord where I live; Norðfjörður. We often see whales appear, not the Humpback whale but other species.

Mini whale model that I 3D printed

Video of the mini model

This video shows a mini version of the base, the whale and the plexiglass map.

Mini model of the final project

System integration

System integration

Read about the system integration in week 16.

Spiral development

Spiral development

In the student bootcamp Miriam Choi talked about spiral development and explained how the idea should be developed from a basic idea and then add details and further development one step at a time. This image from the slides explaines it visually. Rico Kanthatham created this image:

Spiral Development by Rico

Spiral development - main tasks

I used spiral development when working on my final project. This is the whole story of how each task was solved.

The enclosure

Spiral 1

Spiral 2

Spiral 3

The base

Step file for PCB used to make everything fit

When I had exported the step file from Kicad and imported it into the Fusion file, I could see what fitted and what needed adjustment. The PCB for the Raspberry Pi Pico was too big for the design and I saw that I needed to change the brackets. I was also planning on using the holes in the PCB as a reference when creating the holes for the screws.

More adjustments needed

There were a few things that needed to be changed in this model. After testing the model in the System integration week, I saw that to keep a short distance between the magnetic levitation module and the magnetic float, the columns under the module were far too high and they could not be smaller unless I changed the height of the enclosure.

Svavar Konráðsson also told me that by using a 5V, 3A Step-Up/Step-Down Voltage Regulator S13V30F5 I could use one cord to power both the magnetic levitation model and all the electronics with the microcontroller. This means that I only need one hole for power input.

The almost final model in Fusion

I thought this would be the final model but then I saw that I had not given the USB cable enough space.

The final model in Fusion

I moved the brackets for the PCB with the microcontroller and added walls to keep the power cables in place.

Plexiglass map and plexiglass PCB

Plexiglass for Neopixels and plexiglass at the top

I used this map when I made the plexiglass map at the top of the enclosure.

The whale model

Spiral 1

In spiral 1 I tried to create the basic form of the whale. I experimented with this both in Blender and by modelling it out of clay and then 3D scanning it.

Designing a whale in Blender

Blender

When designing the whale in Blender in week 02, I have been using three images as a reference:

  • This image from ABC News supplied by ORRCA member, Wayne Reynolds.

  • This image taken by photographer David Edgar and appeared on his Instagram account.

  • This image taken by photographer David Edgar and appeared at Daily Mail.

  • This image by Jón Baldur Hlíðberg. Jón Baldur Hlíðberg is an amazing icelandic artist who has done many artworks from icelandic nature, both animals and plants. I searched for his phone number, contacted him and asked if I was allowed to use his artwork as a reference and he approved.

Modelling a whale out of clay and 3D scan it

Whale modelled out of clay and then 3D scanned.

When I modeled the whale out of clay in week 05 I did a Google image search and used the overall results with many images when I modelled the whale. Here is a link to the Google search results.

Second attempt at drawing a whale in Blender

Drawing in Blender

I decided to give Blender a second chance after awful results in drawing a whale in week 02. This was done in week 15, but document it all here, so there is no link to it.

I used this video to begin with. It shows how to draw a great white shark, but I like the way he explains things. This is what I did when following the instructions.

In the video the default cube was deleted, so I began by doing that. Then I split the screen into two screens by moving my mouse up to the right corner of the screen until it showed a cross cursor. Then I dragged the splitting line over to the middle and then I had two seperate screens. After that I chose which view I wanted in each screen and this image from the video shows which views are chosen:

 Here you can see what my screen looked like and how I chose the right view. I used the front view in the left window and the right view in the right window. Then I added one more as seen from the bottom. My numpads were not working as in the video, so this is how I chose the view:

Choosing views

 To add a reference image I pressed on **Shift** and **A**. Then I chose **Image** and then **Reference**. Then I could add an image to use as a reference in Blender.

Image reference

Name the reference and use opacity

I named the reference image as Front.

I clicked on the image symbol (Data) down on the right and checked in the box marked Opacity.

I added three images in total as references.

Shortcuts in Blender

A few shortcuts in Blender that I learned about in week 02:

Shortcuts in Blender

Here is a list of shortcuts in Blender. If you have an active keyboard:

By hitting the number 1 on your keyboard you get the front orthographic view. Nr. 3 takes you to the right orthographic view or side view.

SHIFT+D = Duplicate SHIFT+A = Opens up list of actions, f.ex. if you want to select an image and then click on Reference.

If you want commands to happen on a specific axis, x-, y- or z-axis, then you can hit the button with the first letter in the command and then write x, y or z after that. This way you can f.ex. hit the letter S (scaling) and then right after that, the letter Y. Then you can scale the object along the y-axis.

Hitting G and then x means that you can move it on the x-axis. Choosing E and then Y is for extruding on the y-axis. Use the R-key to rotate a line, plane or point.

I used the G and then x, y or z to move the images so that they would align at the same beginning point.

Aligning

The whales in the images were not of the same size so I adjusted the sizes until they looked similar. Here below you can see how I was adjusting the sizes of two images.

Adjusting sizes

I moved the images so that they look as if they are walls and a floor with room for the model between them.

Then I used Shift+A and chose Mesh and then Cube.

By clicking on S I could scale the cube down.

Edit mode or object mode

You have to be in Edit mode to edit the model and object mode to move the model. By clicking on TAB you go into edit mode or you switch between Object mode and Edit mode** at the top, as you can see in the image here.

I moved the cube where I could see it in the front view. Then I clicked on CTRL+R for creating a loop cut right in the center of the cube. It splits the cube in two parts. Then I dragged the mouse over the left half of it and chose Delete vertices. As you can see, the vertices that are chosen are orange in colour.

Then I dragged the mouse over the half of the cube that wasn't deleted, clicked on the Modifiers tool and clicked on the plus for Add modifier.

After clicking on Add modifier I chose Generate and then Mirror.

Object mode or edit mode

You have to choose between Object mode to see and move a model or Edit mode to be able to change the model.

ObjectModeOrEditMode

In FreeCad and Fusion you can use the mouse to select a point, line or face, but in Blender you first have to choose which of these you want to select and work with. These tools are at the top left on the screen.

By clicking on the small Tool logo on the right of the screen you can choose a Modifier. I chose the "Mirror". Then I clicked on clipping.

By hitting Z you can click on Wireframe and then you can see through the object and it's split in half by the mirroring axis. If you want to remove the face where the two mirroring objects touch, you have to delete it. You click on Face select on the upper right, click on the face and delete it. To delete you can click on x and then choose Delete

Swithcing betweeen Wireframe and Solid view

To go back from Wireframe and to Solid view you just click on Z and then choose Solid.

ZandWireFrame

Should I continue?

Maybe this is not my cup of tea. I am not sure if I should continue in Blender....

Spiral 2

Spiral 2

In spiral 2 I thought about how to connect the model to a base with the float that will make the model hover in mid air.

The PCBs

Spiral 1

Spiral 1

In spiral 1 I designed and produced a PCB board with a Raspberry Pi Pico microcontroller and two Neopixels. The board was designed in week 02 and produced in week 08. The plan was to have the Raspberry Pi Pico and the Neopixels on one PCB and fasten it with screws to a plexiglass plate. Then I planned on having a button on a seperate PCB.

Spiral 2

Spiral 2

In spiral 2 I decided to create three seperate boards for the Raspberry Pi Pico microcontroller, the Neopixels and the button. This was just a decision and was not performed.

Spiral 3

Spiral 3

In spiral 3 I decided to add a Doppler radar to the final project. I tested the Doppler radar in week 11 and managed to use it to communicate with Neopixels, so that the Neopixels turned on the light when the Doppler radar sensed movement. When I thought about how to organize the PCBs, I decided that it would be best to place the Doppler radar on one board. It think it's not necessary to mill traces, because the Doppler radar is ready on a board, but I needed to fasten it on a bigger plate. That would make it easier to fasten it to brackets.

Since the previous plan was to have the other components on three PCBs, the final number of PCBs was up to four.

PCB with Raspberry Pi Pico W

PCB with Neopixels

PCB board for Neopixels

I found a video that explained how you could import images into Kicad. I did a quick check and saw that I would have to zoom in on the world map for the Neopixels to fit on the map. Then I realized that it would probably be best to cut the traces in the vinyl cutter instead of using a FR4 PCB board.

Details...

Connect Neopixels to these pins

According to Adafruit Neopixels only work if they are connected to GPIO10, GPIO12, GPIO18 or GPIO21. The standard pin is GPIO18.

The program

Spiral 1

Spiral 1

In spiral 1 I learned how to use Neopixels and made two Neopixels change colours. This was done in week 08.This is the code I used and it was Svavar Konráðsson who helped me write it:

import neopixel
from machine import Pin
import time

pixPin = 0  # Numper of pin
pixSize = 2  # How many LEDs
pix = neopixel.NeoPixel(Pin(pixPin), pixSize)  # Initialization

yellow = (255,255,0)
red = (255,0,0)

while True:
    pix[0] = yellow
    pix[1] = red
    pix.write()  # Tells the LED to perform the command

    time.sleep(1)
    pix[0] = red
    pix[1] = yellow
    pix.write()  # Tells the LED to perform the command
    time.sleep(1)

Spiral 2

Spiral 2

In spiral 2 I had decided to add a Doppler radar to the program as an input. In the program the Neopixels start blinking when the Doppler radar senses movement. In this code I mixed the code from spiral 1 (here above) and a code that I used for Doppler radar in week 11.

I noticed that my Neopixels did not turn off in my previous experiments, so I have to tell them to turn off. I found here that I could possibly set the Neopixel to (0,0,0) to turn them off. I decided to set it up as off = (0,0,0) and it worked!

Here you can see the code after I mixed them together:

from machine import Pin, I2C
import network
import time
import neopixel

sensor_pin = 26
sensor = Pin(sensor_pin, Pin.IN)
pixPin = 0  # Numper of pin
pixSize = 2  # How many LEDs
pix = neopixel.NeoPixel(Pin(pixPin), pixSize)  
blue = (0,0,255)
white = (255,255,255)
off = (0,0,0)
state = 0
val = 0

while True:
    val = sensor.value()  # read sensor value
    if val == 1:  # check if the sensor is HIGH       
        pix[0] = blue
        pix[1] = white
        pix.write()  # Tells the LED to perform the command
        if state == 0:
            print("Motion detected!")
            state = 1  # update variable state to HIGH
    else:
        if state == 1:
            print("Motion stopped!")
            state = 0  # update variable state to LOW          
            pix[0] = off
            pix[1] = off
            pix.write() 

    time.sleep(0.1)

Video from Spiral 2 - programming

Here you can see a video that shows how the Neopixels are activated when the Doppler radar senses movement.

Turning the globe

Spiral 3

The final code

In spiral 3 I added Neopixels to the code....(work in progress)

I want the path to light up all the way from Iceland and to the Dominican Republic and then I want it to go backwards, because the whales travel back and forth. Each time a new Neopixel lights up I want the previous one to turn off, so I begin by setting the previous one to off, which I defined as (0,0,0). Then I tell the next Neopixel to turn on the blue light by writing blue, which is defined as (0,0,255).

I have to find out the best way to create a loop and I found these information on different ways to create repetition or loop. (work in progress - have to test it)

The final code

from machine import Pin, I2C
import network
import time
import neopixel

sensor_pin = 26
sensor = Pin(sensor_pin, Pin.IN)

pixPin = 0  # Numper of pin
pixSize = 10  # How many LEDs
pix = neopixel.NeoPixel(Pin(pixPin), pixSize)  # Initialization

blue = (0,0,255)
off = (0,0,0)

# Initialize state variables
state = 0
val = 0

while True:
    val = sensor.value()  # read sensor value

    if val == 1:  # check if the sensor is HIGH

          pix[0] = blue
          pix.write()  
          time.sleep(1)

          pix[0] = off
          pix[1] = blue
          pix.write() 
          time.sleep(1)

          pix[1] = off
          pix[2] = blue
          pix.write() 
          time.sleep(1)

          pix[2] = off
          pix[3] = blue
          pix.write()  
          time.sleep(1)

          pix[3] = off
          pix[4] = blue
          pix.write()  
          time.sleep(1)

          pix[4] = off
          pix[5] = blue
          pix.write() 
          time.sleep(1) 

          pix[5] = off
          pix[6] = blue
          pix.write() 
          time.sleep(1)

          pix[6] = off
          pix[7] = blue
          pix.write() 
          time.sleep(1) 

          pix[7] = off
          pix[8] = blue
          pix.write() 
          time.sleep(1)  

          pix[8] = off
          pix[9] = blue
          pix.write() 
          time.sleep(1) 

          pix[9] = off
          pix[10] = blue
          pix.write()
          time.sleep(1)  

          pix[10] = off
          pix[9] = blue
          pix.write() 
          time.sleep(1) 

          pix[9] = off
          pix[8] = blue
          pix.write() 
          time.sleep(1)  

          pix[8] = off
          pix[7] = blue
          pix.write() 
          time.sleep(1) 

          pix[7] = off
          pix[6] = blue
          pix.write() 
          time.sleep(1)

          pix[6] = off
          pix[5] = blue
          pix.write() 
          time.sleep(1)

          pix[5] = off
          pix[4] = blue
          pix.write()  
          time.sleep(1)

          pix[4] = off
          pix[3] = blue
          pix.write()  
          time.sleep(1)

          pix[3] = off
          pix[2] = blue
          pix.write()  
          time.sleep(1)

          pix[2] = off
          pix[1] = blue
          pix.write() 
          time.sleep(1)

          pix[1] = off
          pix[0] = blue
          pix.write()  
          time.sleep(1)

        if state == 0:
            print("Motion detected!")
            state = 1  # update variable state to HIGH
    else:

        if state == 1:
            print("Motion stopped!")
            state = 0  # update variable state to LOW

            pix[0] = off
            pix[1] = off
            pix[2] = off
            pix[3] = off
            pix[4] = off
            pix[5] = off
            pix[6] = off
            pix[7] = off
            pix[8] = off
            pix[9] = off
            pix[10] = off
            pix.write() 

    time.sleep(0.1)

Files for final project

File for tracking of whales

File for webpage with the tracking of whales

This webpage with information about the tracking of different species of whales comes from the North Atlantic Marine Mammal Commision.

File for tracking of whales

File for mini 3D model of whale

File for mini 3D model of whale

This model was made in week 05. It was first sculpted out of clay and then scanned with the Kiri Engine app. Next it was resized and painted in Bambu Studio and finally 3D printed in Bambu Lab X1 Carbon.

This is a link to the .stl model on Sketchfab.

File very large

I downloaded the .3mf file from Bambu Studio after painting it and it was very large, or 10.2MB. I could neither upload the file to SketchFab nor my Repository. For that reason I uploaded it to my personal drive and here is a link to it. It is a read only file:

Model.

File for mini plexiglass map

File for mini plexiglass map

These mini plexiglass maps were made in week 07 (not as a part of the schedule). This small version of the final project helped visualizing how the final project could be done. I used a world map that I found on this site.

PDF file for mini plexiglass map with rounded corners_1

svg file for mini plexiglass map with rounded corners_1

PDF file for mini plexiglass map with rounded corners_2

svg file for mini plexiglass map with rounded corners_2

File for mini 3D printed base

File for mini 3D model of base

I made this model in week 07. It was not a part of the schedule, but I wanted to see how it would turn out.

Box file 2

File for mini 3D model of base

This is a file of the first version of the base for final project.

Box_40mm

Electronics files

PCB with Raspberry Pi Pico W - first attempt (mistake)

PCB with Raspberry Pi Pico W - second attempt (final)

PCB with button