Category Archives: Uncategorized

Group 6 12/9/2017

Current progress (12.09.2017)

its been a while since last post and this is what we have done and what we are going to do.  Early in the process we aquired the xv11 360 lidar. witch is a laser sensor device. What this device does is that it spinns in a circle and sends out lasers to meassure distance from nearest object. (picture below)

As you can see on the picture it has a little motor intigrated on the left. This means that we need to power both the lidar and the motor in order to get it to work. we plan to use this if we can get it to work. in case this dosent work we’re planning to experiment with the CJVL53 lidar witch is a simpler version of the lidar system. it functions similar but as shown below in a straight line instead of in a 360 degree angle

So continuing the project mechanical will look at designing parts for the car using lasercutting and modeling on the computer and computer and electrical will look at connecting the different electrical components

Medisch wangedrag (Group 7H17) Week 43

Analyzing images to find blood vessels.

Our goal is have the system automatically recognize blood vessels in images taken by our NIR camera. Preferably a big and easy to reach blood vessel, but any blood vessel large enough to be stabbed with a needle is acceptable.

We have not yet reached a final solution, but we have a rough outline of what the program will do.

First we want to remove noise and unnecessary information from the images, by filtering the image. To do this we are considering using a FIR filter with machine learning to improve filtering over time, or the color thresholder app in matlab.

The goal is to have an image containing only clearly visible blood vessels. To enhance them we can use the fibermetric function in matlab, which “Enhances elongated or tubular structures in image”. With this we will hopefully have an image which is easy to analyze.

The image analyzer will send a point on a grid to the robot, which used the grid to place the needle. To find a point on a blood vessel we have currently settled on a hough transform, which identifies lines in images. A point on a blood vessel can be found by simply choosing a start or end point on a line found by the hough transform, but this is sub-optimal, since the point will be on the edge of the vessel, and not in center. This is why we have to analyze the resulting lines from the houghes transform, in order to find the center of a blood vessel. We have not yet settled on a method for doing this.

We have create 2-D grid coordinates in Matlab, with x-coordinates defined by the vector x and y-coordinates defined by the vector y. Set 1 mm between each dot. Can move 6.5 cm on the x-axis and 12 cm on the y-axis. This gives 120 dots in the y-axis and 65 dots in  x-axis. Before testing this in Raspberry pi, we want too  get the camera working.

 

 

 

 

 

Matlab meshgrid

But we have tested the servo motors in Arduino, just too see how they worked. They did not respond as they should, because it was  just one of them who worked. Not the both of them at the same time.

Servo motor tested by Arduino

Two servo motor tested by Arduino

 

Still working with optical response and  troubleshooting to get the camera working.

Medisch wangedrag (Group 7H17) Week 41

 

Had trouble getting Raspberry pi 3 to work.

On the website:

https://elinux.org/RPi_SD_cards#Which_SD_card.3F

Found this message:

“Doesn’t work with N0390-002.A00LF though (tested with Raspbian “wheezy”) – mmc0 timeouts, waiting for hw int. I wouldn’t recommend buying this card. N0460-002.A00LF: Does not boot / io error from dmesg with os running from usb. 31488-007.A00LF Boots 2 or 3 times, then mmc0 timeouts and errors (Raspbian “wheezy” in a RPI 2 Model B). – Doesn’t boot with NOOBS, the red and green led doesn’t blink, are kept lit (RPI 1 Model B+).”

Checked which memory card was compatible.

Replaced memory card, then Raspberry pi worked.

 

Medisch wangedrag (Group 7H17) Week 38

Figure 1:
We have started to draw a sketch of the frame in SolidWorks. The length of the arm is approximately 20 cm. We used this dimension for the length of the frame.

Figure 1

Figure 2:
According to the weight, we want to make the frame as light as possible. First, we wanted to use a 1 mm thickness, but the frame will not be strong enough when you print it. We adjust the thickness to 2 mm. To make the frame more solid, we used an extra reinforcement in every corner and extra ribs for the straps.

Figure 2

Figure 3:
For making it possible to print the frame with the Ultimaker, we had to devide the frame in three parts.

Figure 3

Figure 4 (the gears and roll bearings are not drawn yet):
To make the 2 coordinate system, we are going to use gears connected to stepmotors (1). On the other side (2) we are going to use an axis with a roll bearing and a gear, to guide the system.

Following are the reasons why we’re using this system:

  • The components are small and light (required).
  • The device and components are too small for a chain drive/ belt drive.
  • It is an easy and cheap way to drive the system.

Figure 4

 

This link shows a simple video of the coordinate system:

https://www.youtube.com/watch?v=ITnPJ9eS61g

Chose to use servomotor instead of stepper.

Needs 3 servomotors:
1 to x axis (rotate 360 degrees)
1 to y axis (rotate 360 degrees)
1 to angle (rotate max 180 degrees)

Medisch wangedrag (Group 7H17) Week 40

Pi NoIR Camera V2

 

Obtaining access to blood vessels can be difficult. Near-infrared light might be a option since subsurface blood vessels can be visualized in high contrast due to less absorption and scattering in tissue compared to visible light. Instead of using a camera with ingaas detectors, we use a near-infrared sensitivity inexpensive silicon-based detectors. Human vision is limited to the visible spectral range that is defined by the luminous efficiency functions to range between wavelengths of 370 nm and 750 nm. In contrast Si-based sensor cameras have sensitivities extending to about 1100 nm. Blood vessels that are used for bloodtests are typically located up to a few millimeters below the skin surface. The main chromophores in epidermis, dermis and subcutaneous adipose tissue are melanin, hemoglobin, proteins and water. In the visible part of the spectrum melanin and hemoglobin are highly absorptive, counteracting deep tissue penetration. In the NIR part of the spectrum, there is much less absorption by melanin and hemoglobin. However above 900 nm absorption of water is increasing, again preventing deep tissue penetration. It is important that the light generated by the LED is safe for the eye during normal use. Since NIR light is not visible, and therefore a blinking reflex is absent, this also includes longer exposure times. The light generated by the LED is absorbed and can heat the skin.

 

Smart Drone

Introduksjon

Vi er en gruppe på fem ivrige studenter ved Høgskolen i Sørøst Norge, Campus Kongsberg. Gruppen har en tverrfaglig kompetanse, i og med at vi har studenter fra hver ingeniør linje representert på denne skolen. Vi er tre data-, en elektro- og en maskinstudent og utgjør sammen gruppe nr 1.

Maskin

Markus Hjellseth

Data

Daniel Haugnes

Fredrik Olsen

Ole Marius Norderud

Elektro

Deivy Kazokas

 

Oppgave

Smart systems-prosjektet går ut på å designe et system som skal operere i sanntid og ikke ved konstant input fra bruker, den skal med andre ord greie å ta egne avgjørelser. Oppgaven gruppa har bestemt seg for er å designe og bygge en smart drone. Den skal kunne detektere hindringer og ta avgjørelser basert på målinger den gjør. Vi kan for eksempel styre dronen mot en vegg, og forvente at den skal ved hjelp av avstandsmålinger oppdage denne hindringer, deretter overstyre brukeren for å manøvrere unna en potensiell kollisjon. Videre har vi tenkt på flere mulige ekstra funksjonsjoner, hvorav en av mulighetene vi har sett på er å få dronen til å rulle på bakken ved hjelp av gyroskopet, derfor og det runde designet.

Fremdriftsplan

 

22.08.2017

I begynnelsen av faget delte vi oss opp i grupper. Lærerne ga oss en kort introduksjon til faget med krav og forventninger til oss. De viste tidligere prosjekter og resultater samt forklarte oss fordeler og ulemper med noen av tidligere studenter sine løsninger. På slutten av dagen diskuterte vi sammen, og kom med ideer til hva slags prosjekt vi kunne tenke oss å jobbe med, samt avtalte å finne inspirasjon til neste gang vi skulle møtes.

29.08.2017

Gruppen kom med et par ideer, som en selvbalanserende robot, en maskin som kan sortere «Skittles» etter farge eller en selvkjørende bil som unngår sammenstøt. Ettersom oppgaven i faget er å designe et smart system må man modifisere produktet vårt til å reagere uten at brukeren gir ordre om det. Dette gjør produktet til et smart system. Dersom vi lager et kjøretøy vil den ha sensorer foran som gjør at den alltid kjører unna og unngår sammenstøt. Vi ønsket å høyne vanskelighetsgraden med å gjøre noe lignende i luften, derav en drone med lignende sensorer.

05.09.2017

Vi bestemte oss for at vi skal gå for drone ideen vår. Vi tok kontakt med lærerne og ba om godkjenning for planen vår, og hørte om det holdt og var innenfor rammeverket lærerne har. Sammen med Joakim, ble vi enige om at vi skulle prøve og videreutvikle dronen så mye som mulig ved tilleggsfunksjonen som å utnytte det runde designet til å få den til å rulle, GPS-styre posisjoner den skal dra til, muligheten for at man kan ha en arm under donen for å kunne fly ut livbøyer til personer i nød. Alt ut i fra hvor simpel og lettvint droneoppbygningen ville være, og hvor mye tid vi brukte på planlegging og anskaffelse av materiale.

12.09.2017

Gruppen testet ut bruk av Ultra Sonic sensorer for å måle avstand til objekter. Vi har koblet og programmert en sensor slik at vi kan lese av avstand til objekter og foreta mange og raske målinger hele tiden. Vi har koblet på en sensor, men trenger flere slik at vi kan dekke en større synsvinkel, hver av sensorene har i utgangspunktet et synsfelt på 15 grader hver. Vi skal programmere disse sensorene til å gi beskjed om vedvarende hindringer, som gir oss informasjon slik at vi kan igjen programmere handlinger dronen skal gjøre, som for eksempel å snu dersom den støter på hindringer. Etter testing ser vi at det oppstår målefeil som gjør at sensoren tror den er rett ved siden av noe, og gir oss varsel. Derfor programmerte vi inn en teller som kun reagerte når det var 5 avstandsvarsler etter hverandre for at koden skal være overbevist om at det er en hindring i nærheten, og ikke bare en feilmåling.

19.09.2017

Etter forrige ukes forsøk med en enkelt avstandssensor koblet vi nå opp tre stykker. Alle sensorene ble satt opp med hvert sitt lys som skulle lyse dersom tilhørende måler telte fem varsler, som tilsier at en hindring er nærme. Ettersom vi ikke har deler eller fungerende motorer valgte vi å bruke lys for å simulere at riktig «motor» ville økt hastighet for å styre unna nærmeste hindring. Etter flere forsøk, noen små feilkoblinger og enkelte skrivefeil i koden fikk vi tilslutt alle sensorene til å måle avstander på riktig måte, beholde hver sine varseltellere og gi melding til riktig LED lys som simulering av at hver sensor sendte meldinger til riktig motor. Varseltellerne ble satt opp slik at varsellampen lyser så varseltelleren er over en bestemt sum, og slå seg av etter hvert som den er under igjen. Varseltelleren trekker i fra en gitt sum for hver måling som ikke oppgir at den nærmer seg en hindring.

26.09.2017

En drone er avhengig av en gyro for å kunne vite hvordan tredimensjonal vinkling den har. Vi koblet en gyro til vår «Arduino Mega», men det var mye vanskeligere enn først antatt. Vi brukte forskjellige guider uten hell. Etter mye søk på nettet og lignende problemstillinger for andre, fant vi ut at problemet lå i selve brettet. Det vi måtte gjøre var å bytte mega-brettet vårt til et uno-brett. Deretter fikk vi gyroen til å fungere optimalt ganske kjapt med guidene vi hadde brukt tidligere. Neste steg ble å kalibrere gyroen slik at den leser av riktige verdier. Etter en del koding, med feiling og nye forsøk fikk vi kalibrert gyroen slik at den leser av korrekte verdier med riktige nullpunkter. Ved bruk av gyro og en 3D simulering, klarte vi å lage et bilde om hvordan den oppfører seg i det tredimensjonale rommet den befinner seg i. 3D simulering gjør det enklere for oss å forstå hvilken retning gyroen peker til enhver tid. Samtidig som data og elektro brukte tid på oppkobling av gyroen har maskin begynt med 3D modelleringen av selve rammen som sitter i midten av isopordronen vår.

3.10.2017

Deler av gruppen var bortreist, jobbing på egenhånd.

10.10.2017

Etter gjentatte forsøk på å få tak i isopor fra forskjellige bedrifter, fikk vi isopor fra Montér. Deretter brukte gruppen mye av dagen på å skjære ut, planlegge og tegne utformingen av isopordesignet. Gjenstår fortsatt litt etterarbeid på noen deler av designet, ettersom de tre øverste centimeterne skal limes på i ettertid, ettersom isopor bredden var for liten i henhold til designet vårt.

17.10.2017

Gruppen sitter sammen i dronesonen. Markus og Fredrik skjærte ut isoporen slik at rammen til dronen skulle få plass. Gruppen gjør litt research på teknologier.

24.10.2017

Gruppen er samlet i dronesonen. Jobber med koding og kobling av  stepper motor control. Vi ser da på om vi kan kontrollere farten på hver av motorene vi skal bruke i dronen, slik at vi kan styre hver enkelt motor individuelt.

Smart Mirror: CW 42

Electrical/Mechanical:

This is the first and well working draft of our arduino program to control the motors.

/* Connect 5V on Arduino to VCC on Relay Module
Connect GND on Arduino to GND on Relay Module
Connect Power on Arduino to the Common Terminal (middle terminal) on Relay Module.
*/

//////////////////Relay///////////////////////////
const int relay = 5;
// int relayVal;

//////////////////loadCell///////////////////////////
#include “HX711.h”
#define zero_factor 145230
#define DOUT 3 //gelb / yellow
#define CLK 2 //orange
float calibration_factor = ((200000 * 0.00045359237) + 52400);
HX711 scale(DOUT, CLK);

//////////////////Servo///////////////////////////
#include <Servo.h>
Servo myservo360; //continious rotation servo
Servo myservo180; // 180 servo
int direction = 1;
int pos3 = 0;
int pos1 = 0;
const int servPin360 = 9;
const int servPin180 = 8;

 

////////////////Button///////////////////////////////
const int butPin = 12;
int butVal;

 

void setup() {
pinMode(butPin, INPUT);
pinMode(relay, OUTPUT);

Serial.begin(9600);

scale.set_scale(calibration_factor);                    // when u open the serial monitor the value should be between -0.5 and + 0.5: for setting it to 0 we will have to mount it to the box
scale.set_offset(zero_factor);                    //Zero out the scale using a previously known zero_factor
Serial.println(“Reading: “);
close();
}

void loop() {
Serial.println(scale.get_units(), 1);

checkButton(); // function to check if the button is pressed
if (butVal == HIGH) {
myservo360.attach(servPin360);
digitalWrite(relay, LOW); //relay works inverse: LOW = connected to external powersupply

//push the toothpaste out of the cylinder
while (scale.get_units() <= 10) { // when the weight is more then 10, call the function
servo360(); // of the first servo
}
myservo360.detach();
myservo180.attach(servPin180); // connect the second servo

// open the door of the box, so that the user can grab the toothbrush
servo180(); // call the function of the second servo to open the door
myservo180.detach();
}
else {
digitalWrite(relay, HIGH); // disconnect powersupply
}
}
//——-End of Loop——————————-

//——-Start of Functions————————
int checkButton() {
butVal = digitalRead(butPin);
return butVal;
}

void servo360() {
direction = 100; // number < 90: movement clockwise; number > 90: movement counterclockwise; the actual number controles the speed of rotation
myservo360.write(direction);
//to be attached here: stop the movement when the toothpaste is empty. so we need to know the maximum
// in centimeters and calculate it back to the rotation, best is probably to measure it
}

 

void servo180() {
open(); // call function to open the box
while (scale.get_units() < 50) { // do nothing as long as the weight recognised is smaller then 50 (we still need to find out which number actually makes sense through making a few measurements when the toothbrush gets put into the bracket, thats the number we need here)
}
while (scale.get_units() > 50) { // call function close, when toothbrush gets put into the bracket / box
close();
}
}

void open() {
delay(2000); // this delay gives the toothpaste a little bit time to settle onto the toothbrush
direction = 1;
if (direction == 1) {
myservo180.write(140);
delay(100);
}
}
void close() {
delay(2000); // this delay is very important, it should be as accurate as possible and be the average time that a person needs to put the toothbrush back into the bracket, and remove his hand, so that the door doesnt close if the hand is still in the door. maybe we have to use a sensor to make it nicer
direction = 0;
if (direction == 0) {
myservo180.write(0);
delay(1000); // give to servo time to do the movement
}
}

Software:

The software side of the project is moving forward in terms of getting our program to the Raspberry Pi that will be used to provide information to the screen of our smartmirror.

Since we discovered that making a touch-interface would be to expensive, we’ve decided to control the smartmirror using simple voice-commands. User identification is done using facial recognition. The backbones for both the voice- and facial recognition are done, the remaining work for these parts are the configurations needed to get them working on the Pi. We also need to integrate them into our main program which is made in Kivy.

As a screen we have decided to port the Raspberry Pi to an iPad through the built-in VNC functionality of the Pi. Below is a video of the current concept.

 

Smart Mirror: KW 41

With some help we were now able to connect the two required motors to the arduino.

The hardware works in the following manner:

  1. A pushbutton activates the system
  2. the relay switches so that the motors are connected to the powersupply
  3. the 360º servo starts rotating: it presses the toothpaste out and onto the toothbrush. the toothbrush is attached to a loadcell
  4. the loadcell measures the weight and gives a signal back to the arduino
  5. if the weight reaches a certain limit, the first servo stops moving,
  6. the second 180º servo starts and opens the door so that the user can grab the toothbrush
  7. as soon as the user puts the toothbrush back into its bracket the door closes and the process is finished

The code is not yet finished completely. 

 

Selvbalanserende Robot

Fremdrift

Det går stadig fremover i prosjektet. Vi har fått på plass rammeverket, koblet sammen alle komponentene, og gjort noen tester for å sjekke at det fungerer som forventet.

Slik ser den ut

Det begynner å ligne på det vi hadde i tankene da vi startet på prosjektet.

Kobling og testing må til! Når det er gjort må det kobles og testes igjen, og igjen, og igjen…

Noen nærbilder

Mange koblinger å holde styr på, her gjelder det å holde tunga rett i munnen!

Komponenter og koblinger.

Neste steg

Det gjenstår å montere strømforsyning før vi kan begynne på den store utfordringen, nemlig å få den til å balansere på to hjul. Spenningen stiger, så det er bare å følge med…