Category Archives: Smart Systems 2015 – Firewater

Firewater – Uke 50-51

Her kommer en oppdatering fra hva vi har gjort de siste dagene i innspurten av prosjektet:

Fredag uke 50: 
Denne dagen jobbet vi fra etter eksamen og utover ettermiddagen. Det viste seg da et vi hadde noen uforutsette problemer, og at roboten ikke virket helt som ønsket lenger med software serial kommunikasjon. Vi begynte å få problemer med wifi-kommunikasjonen mellom drinkmikseren og appen. Roboten kjørte slik den skulle, men signalene kom ikke frem via wifi, og det virket som denne koden hang seg. Vi brukte mye tid på å prøve å feilsøke dette, og fant ut at noe av det mest sannsynlig skytes støy. Vi hadde ikke tilgang til utstyr vi trengte, og avsluttet derfor økten.

Mandag uke 51:
Vi fortsatte feilsøkingen, og satte inn flyback dioder på pumpene for å hindre støy.  Da dette ikke løste problemet helt, byttet vi ut arduinoen med wifi-shieldet, og dette løste problemet. Grunnen er mest sannsynlig en sliten arduino. Etter gjentatt testing, så da dette ut til å virke optimalt.

I løpet av eksamensperioden dukket endelig radiosenderne våre opp, og vi bestemte oss da for på ny å prøve å bytte over til å bruke disse. Det inkluderte på ny omskriving av robot- og drinkmixer koden, samt omkobling og innsetting av spenningsdelere. Når vi håpet dette skulle virke mandag kveld, fikk vi  ikke til noen kommunikasjon med roboten. Etter gjentatte sjekker av at koblingene var rett, bestemte vi oss for å bytte ut motstandene i spennigsdlerene til lavere verdier. Vi hadde ikke tilgang til andre motstander, og avsluttet dagen med det.

Vi la i tillegg til en liten “partyfaktor” når drinken er ferdig, en buzzer med et lite musikkstykke.

Tirsdag uke 51:
Vi begynte dagen med å få tak i nye motstander og koblet spenningsdelerene på nytt. Da virket endelig radiokommunikasjonen. Etter en del testing og småjusteringer på detaljer anser vi nå prosjektet som ferdig, og vi har nådd den funksjonaliteten som var målet vårt. Dette til tross for flere uforutsette problemer og komplikasjoner som vi har måtte løse på ulike måter, og vi har derfor løst prosjektet på en litt annen måte enn først planlagt.

Videre denne dagen planla vi presentasjon, ryddet opp i koder og prosjektet.

Nedenfor kan du se våre endelige koder, kretsskjemaer, systemoversikt  og noen bilder av det endelige resultatet:

2015-12-15 10.02.06 2015-12-15 10.24.04

 

Systemoversikt over sluttresultatet:
Vi ser at denne systemoversikten er nesten identisk med den vi begynte med, den eneste forskjellen er at solenoidventilene er byttet ut med pumper og solenoidkontrollen ble en pumpekontroll med releer, samt at vi tidlig i prosessen byttet over til wifi i stedet for bluetooth.

Systemoversikt sluttresultat

Kretsskjemaer:

Kretsskjema for arduinoene på drinkmixeren:

Drink Mixer

 

Kretsskjema for rele-og pumpekretsen:

 

Pumper

Kretsskjema for roboten:
Robot


Link til endelige koder

 

 

 

 

Firewater – Uke 48

Siden vi fremdeles ikke har fått radiosenderene vi har bestilt, bestemte vi oss i dag for å gå for en nødløsning hvis det viser seg at disse ikke kommer. Vi bruker derfor roboten, koblet til via ledninger, som kommuniserer via software serial med  arduinoen på drinkmixeren. Dette resulterte i omskrivning av koden til roboten og arduinoen. Dette brukte vi en del tid på, samt testing og kalibrering av robotens posisjon. Nå virker dette helt som ønsket, og vi har testet alle de 16 mulige kombinasjonene, og roboten kjører som avtalt til disse. I tillegg har vi lagt inn en tilleggsfunksjon slik at roboten kjører ut på siden av drinkmikseren med den ferdige drinken.

Det vi må gjøre neste gang er å “dekke til” roboten, slik at vi endelig kan begynne å teste med vann, samt å stille inn tiden pumpene skal stå på. Vi skal også feste støtdempere på roboten.

Firewater – Uke 47

Vi venter fremdeles på de nye radiosenderne som vi bestilte forrige gang, og får derfor ikke jobbet videre med roboten i dag. Årsaken til at de ikke virker lenger er mest sannsynlig at har gått på 5V i stedet for 3,3V. Vi tr or og håper at dette er årsaken.

Vi startet dagen med endelig oppkobling av elektronikken til pumpene på drinkmikseren. Videre jobbet vi med å lodde 2 kort med spenningsdelere for de nye radiosenderne, for at de får riktig spenning(3,3V)

Hvis vi får radiosenderne i løpet av uka, satser vi på å fortsette å jobbe førskommende fredag.

Bildene nedenfor viser oppkobling av elektronikken på selve drinkmixeren og kortene med spenningsdelerne og kretsskjema:

2015-11-17 13.37.23 2015-11-17 13.37.15

Firewater – Uke 46

I dag har vi jobbet mye med roboten våres, siden vi fikk en del problemer med emc. Dette har vi brukt store deler av dagen på, samt at vi har forbedret konstruksjonen for at sonaren på roboten skal ha en mer stabil referanse for avstandsmålingene. Vi har også jobbet litt videre med montering av det elektriske på selve konstruksjonen.

Vi koblet opp relekretsen og testet dette med en av pumpene i kommunikasjon med roboten, og dette så ut til å virke som forventet.

Da vi trodde vi nærmet oss med å få ferdigstilt roboten, og den var litt samarbeidsvillig, begynte den å slite litt med radiokommunikasjonen. Etter noen forsøk hvor det virket og noen forsøk hvor det ikke virket, døde den helt, og vi får ikke lenger kommunisert med den. Vi har prøvd en del feilsøking og målinger, sjekket koblinger osv og har endt opp med at radiomottakeren/senderen på roboten mest sannsynlig er defekt. Det passer veldig dårlig nå, siden vi ikke har flere lett tilgjengelig. Dagen ble derfor avsluttet med å bestille ny radiosender i håp om å få den så fort som mulig.

Nedenfor er et par bilder av hvordan konstruksjonen våres ser ut nå:

2015-11-10 13.23.50 2015-11-10 13.24.12

Firewater – Uke 45

I dag begynte vi dagen med å koble opp hele flow-systemet for væsken, fra flasken til den er i koppen. Vi hadde litt problemer med litt lekkasjer her og der, og måtte bruke litt tid på testing av dette før vi fikk det tett. Vi trengte også en strømkilde som ikke hadde en alt for lav grense for strømtrekk, da pumpene trekker mye strøm. Hele dette flow-systemet er nå koblet opp på selve drinkmikseren, så den fremstår som tilnærmet ferdig. Det som mangler er å få på plass all elektronikken. Dette begynte vi også med i dag. Ellers har vi brukt mye tid på roboten. Det viste seg at det var alt for mye støy for ultralydsensoren når den skulle kjøre på skinnene inne i drinkmikseren, slik at sensoren målte helt feil avstandsverdier. Etter flere forsøk med å plassere sensoren ulike steder, har vi endt opp med en plassering som ser ut til å virke ganske greit, men som følge av litt tilpasninger i koden for roboten har vi nå litt problemer når vi kommanderer roboten til å kjøre bakover. Dette jobber vi videre med nå.

Firewater – Uke 44

Som følge av problemet som dukket opp på slutten forrige gang, må vi gjøre om litt på konstruksjonen våres. Vi fikk i dag 4 pumper som vi velger å bruke i stedet for solenoid-ventilene. I designet resulterer det av vi ikke trenger skjenketutene, da flaskene nå må stå rett vei. Vi var nede på biltema for å kjøpe PVC-slange som vi trengte. Vi testet pumpen, og den virker. Siden pumpene trekker en del strøm, er transistorkretsen vi designet forrige gang ubrukelig, og vi går derfor over til å bruke relè i stedet.

Vi fortsatte litt med bygging av konstruksjonen, og har blant annet fått på plass skinner som roboten skal kjøre på, plata som flaskene skal ligge på og flaskeholderne. Roboten er bygd om, slik at vi nå har fått på plass en koppholder til glasset. Problemet vi har nå er at pumpen ikke er tett, så hvis enden av slagen er lavere enn væskenivået i flasken, vil det ikke stoppe å pumpe opp væske. Vi må derfor bryte slangen når vi har pumpet væsken opp av flasken, la den renne gjennom en trakt, og videre gjennom en slange og ned i glasset. Mer av denne konstruksjonen, samt å få på plass elektronikken må vi jobbe med neste gang.

Vi brukte også en del tid på å sammenstille og teste kommunikasjon mellom appen og arduinoen på drinkmikseren, da vi fikk en del uventede problemer. Dette brukte vi mye tid på, men nå håper vi problemet er løst. Ellers skal det  meste av koding være ferdig.

Nedenfor er noen bilder av konstruksjonen, roboten og appen:

2015-10-27 13.04.32 2015-10-27 13.18.47

IMG_0190 2015-10-27 10.54.02

Firewater – uke 43

I dag har vi jobbet med kretsdesign av transistorkretsen som skal åpne/lukke solenoidventilene. Vi har simulert kretsen i multisim og funnet en krets som virker som ønsket. Vi simulerte kretsen med og uten dioden som hindrer emc. Det var skikkelig interessant å se hvor stor betydning det faktisk har.

Kretsskjema for transistorkretsen som styrer solenoidene:

Solenoid switch_rev_2

 

Spenning over solenoiden (uten dioden) når vi slår av ventilen(grunnet emc):

Transistorkrets uten diode

 

Spenning over solenoiden (med dioden) når vi slår av ventilen:

 

Transistorkrets med diode

Vi tegnet også kretsskjema for hele systemet, et for roboten og et for selve drinkmikseren:

Roboten:

kretsskjema1

Drinkmikseren:

kretsskjema mikser

Vi tenkte også å forsette byggingen av konstruksjonen, og startet med testing av solenoidventilene. Her fikk vi et veldig stort problem. De virker ikke som ønsket og krever mest sannsynlig trykk for å kunne få gjennomstrømning av væske. Det gjør de ubrukelige for vår del og vi vurderer derfor å bytte de ut med pumper.

Når det gjelder Wifi problemene vi har hatt,  at vi ikke får feedback fra arduinoen, så legger vi disse på vent. Vi er  ikke er avhengige av å få det opp å gå for å få systemet opp å gå. Vi satte i stedet opp en lcd som viser feedbacken.

Firewater – Uke 42

I dag har vi endelig startet byggingen av selve konstruksjonen, og brukte litt tid fra starten av dagen på dette. I tillegg er appen vår oppe å gå på android. Vi har fortsatt arbeidet med wifi-kommunikasjonen, men har litt problemer med å få til toveiskommunikasjon. Dette kommer vi til å jobbe med fremdeles. Vi bestemte oss også for å bruke 2 arduinoer på selve drinkmikseren, i stedet for kommunisere med SPI, da dette gjorde at vi fikk problemer med samkjøring av bibliotekene for NRF905 og Wifi.

Ellers var vi nede på biltema og handlet en del ting vi manglet til videre bygging av konstruksjonen, så vi håper å komme enda lenger på den neste gang.

Vi anser også koden til roboten og selve drinkmikseren som ferdige inntil videre, da de foreløpig virker som de skal. (Kan evt . hende de må endres litt senere med tanke på detaljene.) Derfor legger vi ut begge kodene her:

Koden til drinkmikseren:

#include <nRF905.h>
#include <nRF905_config.h>
#include <nRF905_defs.h>
#include <nRF905_types.h>
#include <SPI.h>

const int solenoid[4] = {4, 5, A1, A0}; //Utgongar for ventilar

#define RXADDR {0x58, 0x6F, 0x2E, 0x10}
#define TXADDR {0xFE, 0x4C, 0xA6, 0xE5}

const int distance[4] = {80, 70, 60, 50}; //Plassering av flaskane
const float centiliter_constant = 1000; //ms/cl

void setup() {
Serial.begin(9600);
Serial.setTimeout(50);
nRF905_init();

//Sett RX/TX-addresser
byte addr[] = TXADDR;
byte addr1[] = RXADDR;
nRF905_setRXAddress(addr1);
nRF905_setTXAddress(addr);

pinMode(solenoid[0], OUTPUT);
pinMode(solenoid[1], OUTPUT);
pinMode(solenoid[2], OUTPUT);
pinMode(solenoid[3], OUTPUT);
}

void loop() {
int state = 0;
static int amount[4];

if (Serial.available())
{
get_data(&amount[0], state);
}
//Dersom vi har fått bestilling
if (state == 1)
{
make_drink(&amount[0], state);
}
}

void make_drink(int *amount, int& state)
{
byte data_send[1];
byte data_receive[1];
int i = 0;

//Sjekk om vi faktisk har data
boolean k = amount[0] + amount[1] + amount[2] + amount[3];
while (i < 4 && k !=0)
{
//Dersom vi ikkje skal fylle på, gå til neste
while (amount[i] == 0){i++;}

//send kommando til bil om distanse til drink nr.1
data_send[0] = distance[i];
Serial.println(data_send[0]);
nRF905_setData(data_send, sizeof(data_send));
while (!nRF905_send());
Serial.println(“data sent”);

//Sett i receive-modus
nRF905_receive();
//motta kommando om at bil er på rett plass
while (!nRF905_getData(data_receive, sizeof(data_receive)));

//dersom bilen er på rett plass (Mottatt data = 1), hell oppi drikke
if (data_receive[0] == 1)
{
Serial.println(“robot in posisj”);
digitalWrite(solenoid[i], HIGH);
delay(amount[i]*centiliter_constant); //centiliter_const er bestemt på førehand (cl/ms)
digitalWrite(solenoid[i], LOW);
data_receive[0] = 0;
i++;
}

}
state = 0;
//amount[3]=NULL;
}

//Les inn data frå serial
void get_data(int *amount, int& state)
{
//amount[3];
int count = 0;
while (state == 0)
{
switch (count)
{
case 0: amount[0] = Serial.parseInt(); count = 1; break;
case 1: amount[1] = Serial.parseInt(); count = 2; break;
case 2: amount[2] = Serial.parseInt(); count = 3; break;
case 3: amount[3] = Serial.parseInt(); count = 4; state = 1; break;
default: ;

}
}
//Print verdiane til amount
if (state == 1)
{
for (int i = 0; i < 4; i++)
{
Serial.println(amount[i]);
}
}
}

Koden til roboten:

#include <nRF905.h>
#include <nRF905_config.h>
#include <nRF905_defs.h>
#include <nRF905_types.h>
#include <SPI.h>

#define TXADDR {0x58, 0x6F, 0x2E, 0x10}
#define RXADDR {0xFE, 0x4C, 0xA6, 0xE5}

const int pingPin= A0;
const int forwardPin = 5;
const int backwardPin = 6;

void setup() {
Serial.begin(9600);
nRF905_init(); //Start up

byte addr[] = TXADDR;
byte addr1[] = RXADDR;
nRF905_setRXAddress(addr1);
nRF905_setTXAddress(addr);

pinMode(forwardPin, OUTPUT);
pinMode(backwardPin, OUTPUT);

}

void loop()
{
byte data_send[1];
byte data_receive[1];
static int pos = 0;
data_send[0] = 0;
int state = 1;

//Sjekker posisjonen som bilen er i
pos = carPosition();
Serial.print(“Posisjon1 “);
Serial.println(pos);

//Sett radiotransiver i mottaker – modus
nRF905_receive();

// Mottar data
while(!nRF905_getData(data_receive, sizeof(data_receive)));

Serial.print(“data_receive “);
Serial.println(data_receive[0]);

//Kjører til kommandert posisjon
while(state)
{
pos = carPosition();
analogWrite(forwardPin, LOW);
analogWrite(backwardPin, LOW);

if(data_receive[0] – pos <= -2)
{
analogWrite(forwardPin, 100);
Serial.print(“Posisjon < -2 “);
Serial.println(pos);
delay(50);
}
else if(data_receive[0] – pos >= 2)
{

analogWrite(backwardPin, 100);
Serial.print(“Posisjon > 2 “);
Serial.println(pos);
delay(50);
}

else
{
delay(50);
analogWrite(forwardPin, LOW);
analogWrite(backwardPin, LOW);

//Gir beskjed om at den er på kommandert posisjon
data_send[0] = 1;
nRF905_setData(data_send, sizeof(data_send));
while(!nRF905_send());

pos = carPosition();
Serial.print(“p “);
Serial.println(pos);
Serial.print(“d “);
Serial.println(data_receive[0]);
state = 0;
data_receive[0] = 0;
}

}

}

//Posisjonsfunksjon med ping sonar
int carPosition(){
long duration, cm;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT);

duration = pulseIn(pingPin, HIGH);
// The speed of sound: 340 m/s or 29 ms per cm
cm = duration/29/2;

return cm;

delay(10);
}

 

Firewater – Uke 41

I dag fikk vi sjenketuter, solenoid ventiler og wifi-shield som vi har ventet på en stund.  Vi jobbet videre med koden til roboten, og har nå fått denne til å virke som ønsket ved at den får en oppgitt avstand, og kjører til denne.

Siden vi fikk WiFi – modulen vår, fikk vi jobbet videre med denne koden og optimalisert den. Det ser også ut som at denne koden virker slik vi ønsker.

Vi hadde håpet å starte å bygge selve konstruksjonen, men har ikke sag osv som vi trenger tilgjengelig, så vi fikk ikke startet på dette.

Nedenfor ser vi at arduinoen mottar kommando fra pc’en via wifi.

12140715_10154342697758065_1814709828086822925_n

 

 

Bilder av roboten som skal kjøre frem og tilbake under drinkmikseren med glasset:

2015-10-06 11.14.06

2015-10-06 11.14.18

 

Linken nedenfor viser film av testkjøring av roboten hvor den får kommando om plassering, og kjører til denne. Bildet nedenfor viser responsen roboten sender tilbake.

 

https://youtu.be/gwc23C36Xks

CALLANDRESP

 

3D modell av konstruksjonen:

12141810_10154342413868065_5305899840861762276_n

Firewater – Uke 40

Denne uken er vi godt i gang med programmeringen av selve koden. Vi har jobbet en del med koden til både drikmikseren og til roboten. Da disse skal kommunisere via radiosignaler, valgte vi å bytte bort Arduino Duen til en Nano i stedet,  da vi fant ut at det gjør jobben mindre komplisert.

Vi har i dag brukt en del tid på å sende/motta posisjonssignaler  mellom drikmikseren og roboten. Vi kom et stykke på vei, men har også hatt litt småproblemer. Roboten mottar og tolker rett signalene hvis den må rygge for å nå kommandert posisjon, men vi litt problemer med når den skal kjøre fremover.  Dette kommer vi til å jobbe mer med fortløpende, og håper det bare er en liten detalj i koden.

Ellers har vi jobbet en del med bluetoothkommunikasjon mellom app og telefon, uten store resultater. Etter en del tukling med dette, gjorde vi heller appen kompatibel med wi-fi. I tillegg har vi  lagde en 3D modell av konstruksjonen, så vi kan starte med bygging så fort vi har mulighet.