{"id":1075,"date":"2015-10-13T08:17:13","date_gmt":"2015-10-13T08:17:13","guid":{"rendered":"http:\/\/dronesonen.hibu.no\/?p=1075"},"modified":"2015-10-13T08:17:13","modified_gmt":"2015-10-13T08:17:13","slug":"firewater-uke-42","status":"publish","type":"post","link":"https:\/\/dronesonen.usn.no\/?p=1075","title":{"rendered":"Firewater &#8211; Uke 42"},"content":{"rendered":"<p>I dag har vi endelig startet byggingen av selve konstruksjonen, og brukte litt tid fra starten av dagen p\u00e5 dette. I tillegg er appen v\u00e5r oppe \u00e5 g\u00e5 p\u00e5 android. Vi har fortsatt arbeidet med wifi-kommunikasjonen, men har litt problemer med \u00e5 f\u00e5 til toveiskommunikasjon. Dette kommer vi til \u00e5 jobbe med fremdeles. Vi bestemte oss ogs\u00e5 for \u00e5 bruke 2 arduinoer p\u00e5 selve drinkmikseren, i stedet for kommunisere med SPI, da dette gjorde at vi fikk problemer med samkj\u00f8ring av bibliotekene for NRF905 og Wifi.<\/p>\n<p>Ellers var vi nede p\u00e5 biltema og handlet en del ting vi manglet til videre bygging av konstruksjonen, s\u00e5 vi h\u00e5per \u00e5 komme enda lenger p\u00e5 den neste gang.<\/p>\n<p>Vi anser ogs\u00e5 koden til roboten og selve drinkmikseren som ferdige inntil videre, da de forel\u00f8pig virker som de skal. (Kan evt . hende de m\u00e5 endres litt senere med tanke p\u00e5 detaljene.) Derfor legger vi ut begge kodene her:<\/p>\n<p><strong>Koden til drinkmikseren:<\/strong><\/p>\n<p>#include &lt;nRF905.h&gt;<br \/>\n#include &lt;nRF905_config.h&gt;<br \/>\n#include &lt;nRF905_defs.h&gt;<br \/>\n#include &lt;nRF905_types.h&gt;<br \/>\n#include &lt;SPI.h&gt;<\/p>\n<p>const int solenoid[4] = {4, 5, A1, A0}; \/\/Utgongar for ventilar<\/p>\n<p>#define RXADDR {0x58, 0x6F, 0x2E, 0x10}<br \/>\n#define TXADDR {0xFE, 0x4C, 0xA6, 0xE5}<\/p>\n<p>const int distance[4] = {80, 70, 60, 50}; \/\/Plassering av flaskane<br \/>\nconst float centiliter_constant = 1000; \/\/ms\/cl<\/p>\n<p>void setup() {<br \/>\nSerial.begin(9600);<br \/>\nSerial.setTimeout(50);<br \/>\nnRF905_init();<\/p>\n<p>\/\/Sett RX\/TX-addresser<br \/>\nbyte addr[] = TXADDR;<br \/>\nbyte addr1[] = RXADDR;<br \/>\nnRF905_setRXAddress(addr1);<br \/>\nnRF905_setTXAddress(addr);<\/p>\n<p>pinMode(solenoid[0], OUTPUT);<br \/>\npinMode(solenoid[1], OUTPUT);<br \/>\npinMode(solenoid[2], OUTPUT);<br \/>\npinMode(solenoid[3], OUTPUT);<br \/>\n}<\/p>\n<p>void loop() {<br \/>\nint state = 0;<br \/>\nstatic int amount[4];<\/p>\n<p>if (Serial.available())<br \/>\n{<br \/>\nget_data(&amp;amount[0], state);<br \/>\n}<br \/>\n\/\/Dersom vi har f\u00e5tt bestilling<br \/>\nif (state == 1)<br \/>\n{<br \/>\nmake_drink(&amp;amount[0], state);<br \/>\n}<br \/>\n}<\/p>\n<p>void make_drink(int *amount, int&amp; state)<br \/>\n{<br \/>\nbyte data_send[1];<br \/>\nbyte data_receive[1];<br \/>\nint i = 0;<\/p>\n<p>\/\/Sjekk om vi faktisk har data<br \/>\nboolean k = amount[0] + amount[1] + amount[2] + amount[3];<br \/>\nwhile (i &lt; 4 &amp;&amp; k !=0)<br \/>\n{<br \/>\n\/\/Dersom vi ikkje skal fylle p\u00e5, g\u00e5 til neste<br \/>\nwhile (amount[i] == 0){i++;}<\/p>\n<p>\/\/send kommando til bil om distanse til drink nr.1<br \/>\ndata_send[0] = distance[i];<br \/>\nSerial.println(data_send[0]);<br \/>\nnRF905_setData(data_send, sizeof(data_send));<br \/>\nwhile (!nRF905_send());<br \/>\nSerial.println(&#8220;data sent&#8221;);<\/p>\n<p>\/\/Sett i receive-modus<br \/>\nnRF905_receive();<br \/>\n\/\/motta kommando om at bil er p\u00e5 rett plass<br \/>\nwhile (!nRF905_getData(data_receive, sizeof(data_receive)));<\/p>\n<p>\/\/dersom bilen er p\u00e5 rett plass (Mottatt data = 1), hell oppi drikke<br \/>\nif (data_receive[0] == 1)<br \/>\n{<br \/>\nSerial.println(&#8220;robot in posisj&#8221;);<br \/>\ndigitalWrite(solenoid[i], HIGH);<br \/>\ndelay(amount[i]*centiliter_constant); \/\/centiliter_const er bestemt p\u00e5 f\u00f8rehand (cl\/ms)<br \/>\ndigitalWrite(solenoid[i], LOW);<br \/>\ndata_receive[0] = 0;<br \/>\ni++;<br \/>\n}<\/p>\n<p>}<br \/>\nstate = 0;<br \/>\n\/\/amount[3]=NULL;<br \/>\n}<\/p>\n<p>\/\/Les inn data fr\u00e5 serial<br \/>\nvoid get_data(int *amount, int&amp; state)<br \/>\n{<br \/>\n\/\/amount[3];<br \/>\nint count = 0;<br \/>\nwhile (state == 0)<br \/>\n{<br \/>\nswitch (count)<br \/>\n{<br \/>\ncase 0: amount[0] = Serial.parseInt(); count = 1; break;<br \/>\ncase 1: amount[1] = Serial.parseInt(); count = 2; break;<br \/>\ncase 2: amount[2] = Serial.parseInt(); count = 3; break;<br \/>\ncase 3: amount[3] = Serial.parseInt(); count = 4; state = 1; break;<br \/>\ndefault: ;<\/p>\n<p>}<br \/>\n}<br \/>\n\/\/Print verdiane til amount<br \/>\nif (state == 1)<br \/>\n{<br \/>\nfor (int i = 0; i &lt; 4; i++)<br \/>\n{<br \/>\nSerial.println(amount[i]);<br \/>\n}<br \/>\n}<br \/>\n}<\/p>\n<p><strong>Koden til roboten:<\/strong><\/p>\n<p>#include &lt;nRF905.h&gt;<br \/>\n#include &lt;nRF905_config.h&gt;<br \/>\n#include &lt;nRF905_defs.h&gt;<br \/>\n#include &lt;nRF905_types.h&gt;<br \/>\n#include &lt;SPI.h&gt;<\/p>\n<p>#define TXADDR {0x58, 0x6F, 0x2E, 0x10}<br \/>\n#define RXADDR {0xFE, 0x4C, 0xA6, 0xE5}<\/p>\n<p>const int pingPin= A0;<br \/>\nconst int forwardPin = 5;<br \/>\nconst int backwardPin = 6;<\/p>\n<p>void setup() {<br \/>\nSerial.begin(9600);<br \/>\nnRF905_init(); \/\/Start up<\/p>\n<p>byte addr[] = TXADDR;<br \/>\nbyte addr1[] = RXADDR;<br \/>\nnRF905_setRXAddress(addr1);<br \/>\nnRF905_setTXAddress(addr);<\/p>\n<p>pinMode(forwardPin, OUTPUT);<br \/>\npinMode(backwardPin, OUTPUT);<\/p>\n<p>}<\/p>\n<p>void loop()<br \/>\n{<br \/>\nbyte data_send[1];<br \/>\nbyte data_receive[1];<br \/>\nstatic int pos = 0;<br \/>\ndata_send[0] = 0;<br \/>\nint state = 1;<\/p>\n<p>\/\/Sjekker posisjonen som bilen er i<br \/>\npos = carPosition();<br \/>\nSerial.print(&#8220;Posisjon1 &#8220;);<br \/>\nSerial.println(pos);<\/p>\n<p>\/\/Sett radiotransiver i mottaker &#8211; modus<br \/>\nnRF905_receive();<\/p>\n<p>\/\/ Mottar data<br \/>\nwhile(!nRF905_getData(data_receive, sizeof(data_receive)));<\/p>\n<p>Serial.print(&#8220;data_receive &#8220;);<br \/>\nSerial.println(data_receive[0]);<\/p>\n<p>\/\/Kj\u00f8rer til kommandert posisjon<br \/>\nwhile(state)<br \/>\n{<br \/>\npos = carPosition();<br \/>\nanalogWrite(forwardPin, LOW);<br \/>\nanalogWrite(backwardPin, LOW);<\/p>\n<p>if(data_receive[0] &#8211; pos &lt;= -2)<br \/>\n{<br \/>\nanalogWrite(forwardPin, 100);<br \/>\nSerial.print(&#8220;Posisjon &lt; -2 &#8220;);<br \/>\nSerial.println(pos);<br \/>\ndelay(50);<br \/>\n}<br \/>\nelse if(data_receive[0] &#8211; pos &gt;= 2)<br \/>\n{<\/p>\n<p>analogWrite(backwardPin, 100);<br \/>\nSerial.print(&#8220;Posisjon &gt; 2 &#8220;);<br \/>\nSerial.println(pos);<br \/>\ndelay(50);<br \/>\n}<\/p>\n<p>else<br \/>\n{<br \/>\ndelay(50);<br \/>\nanalogWrite(forwardPin, LOW);<br \/>\nanalogWrite(backwardPin, LOW);<\/p>\n<p>\/\/Gir beskjed om at den er p\u00e5 kommandert posisjon<br \/>\ndata_send[0] = 1;<br \/>\nnRF905_setData(data_send, sizeof(data_send));<br \/>\nwhile(!nRF905_send());<\/p>\n<p>pos = carPosition();<br \/>\nSerial.print(&#8220;p &#8220;);<br \/>\nSerial.println(pos);<br \/>\nSerial.print(&#8220;d &#8220;);<br \/>\nSerial.println(data_receive[0]);<br \/>\nstate = 0;<br \/>\ndata_receive[0] = 0;<br \/>\n}<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>\/\/Posisjonsfunksjon med ping sonar<br \/>\nint carPosition(){<br \/>\nlong duration, cm;<br \/>\npinMode(pingPin, OUTPUT);<br \/>\ndigitalWrite(pingPin, LOW);<br \/>\ndelayMicroseconds(2);<br \/>\ndigitalWrite(pingPin, HIGH);<br \/>\ndelayMicroseconds(10);<br \/>\ndigitalWrite(pingPin, LOW);<br \/>\npinMode(pingPin, INPUT);<\/p>\n<p>duration = pulseIn(pingPin, HIGH);<br \/>\n\/\/ The speed of sound: 340 m\/s or 29 ms per cm<br \/>\ncm = duration\/29\/2;<\/p>\n<p>return cm;<\/p>\n<p>delay(10);<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I dag har vi endelig startet byggingen av selve konstruksjonen, og brukte litt tid fra starten av dagen p\u00e5 dette. I tillegg er appen v\u00e5r oppe \u00e5 g\u00e5 p\u00e5 android. Vi har fortsatt arbeidet med wifi-kommunikasjonen, men har litt problemer med \u00e5 f\u00e5 til toveiskommunikasjon. Dette kommer vi til \u00e5 jobbe med fremdeles. Vi bestemte [&hellip;]<\/p>\n","protected":false},"author":39,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30],"tags":[],"class_list":["post-1075","post","type-post","status-publish","format-standard","hentry","category-smart-systems-2015-firewater"],"_links":{"self":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts\/1075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/users\/39"}],"replies":[{"embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1075"}],"version-history":[{"count":1,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts\/1075\/revisions"}],"predecessor-version":[{"id":1082,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=\/wp\/v2\/posts\/1075\/revisions\/1082"}],"wp:attachment":[{"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dronesonen.usn.no\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}