CANSAT & ARDUINO step by step Jens Dalsgaard Nielsen SATLAB Aalborg Universitet Danmark jdn@space.aau.dk 1/51
Arduino CANSAT - MÅL At måle ved hjælp af sensor temperatur, tryk, acceleration, CO2, lys,... At sende målte data til jord At gemme målte data ombord i CANSAT (backup) 2/51
Arduino CANSAT - MÅL 2 KISS - Keep It Simple Stupid Meget enkle programkode: 1) Læs sensorer 2)Gem måledata og send til ground station 3)Vent 4)Gå til 1) Læs igen 3/51
Programmering Al funktionalitet gennem programmering Programmeringssprog C Program struktur Sensor håndtering Kommunikationshåndtering 5/51
C / C++ Imperativt sprog - DU specificerer udførelsen af opgaven inkl rækkefølge 6/51
int i,j; // erklaering af variable af type heltal i = 4; // i = 4*3 + 2*3; i = i+4 ; //adder 4 til i if ( i == 4) { j = 33; // kommentar /* kommentar over flere linier */ } 7/51
Q Q Q Q Q Hvor mange har kodet en Arduino før? hvor mange har programmeret før? meget / noget / lidt / intet Hvis meget / noget så... hvilket sprog? 8/51
Flere ting samtidig 1)Installation og test af SW 2)Igang med C programmering 3)Igang med struktur af programmer 4)Igang med at håndtere sensorer i CANSAT 9/51
Det første problem - Installation Kom på WLAN (eller CD) SW http://arduino.cc/ Specielt for windows xp/vista/7 special attention der skal installeres drivere Følg instrukser 10/51
Er det muligt? JA :-) Er det svært? NEJ? men læs vejledning først. Et check: W7 uden drivere blinker TX lysdioden IKKE når arduino sender data over serielle forbindelse 11/51
Andre operativsystemer? Linux ingen installation af ekstra drivere MAC ingen installation af ekstra drivere Der findes også besværligere måder at gøre det på Eclipse og andre værktøjer 12/51
Kommunikation Forbindelse mellem Arduino og PC USB kabel - ikke kritisk Hastighed - kritisk Konfiguration - hastighed ( langsom) DFT Baudrate (bit pr sekund) standard værdier 9600 baud ~ 800 tegn pr sekund 115200 baud ~ 9600 tegn pr sekund Skal blot passe i Arduino og PC (snakke samme hastighed) 13/51
Arduino programstruktur 14/51
Arduino programstruktur Læs sensor fortolke læsning sende data hjem 17/51
Kørbart eksempel 18/51
her er jeg her er jeg her er jeg her er jeg (med 1 sekund mellem linierne) Eksempel 19/51
Første måling 20/51
analog måling: Arduino har 6 analoge kanaler der kan måle spænding i området 0-5V. analogread(kanal nr) ; læse alle int i,data; for (i = 0 ; i < 6 ; i=i+1) { data = analogread(i); Serial.print(data); Serial.print(, ); } 21/51
Omregning af værdier heltal (int) [-32768... 0... 32767] kommatal (float) - 1*10^38...1*10^38 ca Arduino måler spænding i heltal 0V ~= 0 - i måletal 5V ~= 1023 så man skal selv regne om! 22/51
Sensor temperatur - LM35 Lineær: 10 mv/grad Celcius fra +2 til +150 gr Celcius analogread(kanal) 23/51
Første måling - II Indendøre : 20 grader 20 * 10mV = 200 mv = 0.2V Vi måler: 40 hvorfor? 24/51
Første måling - II Indendøre : 20 grader 20 * 10mV = 200mV Vi måler 40 hvorfor? fordi (0.2V/5V)*1023 = 40 altså ingen Volt 25/51
Ingeniør/SI enheder 1 tælletal svarer til 5/1023 V ok???? - ledende spørgsmål... 26/51
Ingeniør/SI enheder NOPE vi arbejder jo i heltal 20 grader tælletal 40 5*40=/1023 = 200/1023 = 0!!! (der rundes ned) 27/51
Løsning 1 send tælletal (40) lav selv omregning hjemme på PC 28/51
Løsning 2 - kommatal tvinges over og regne i kommatal 29/51
Tryk og højde 1 atm std 101.325kPa Aalborg 120909 16:30 101.5 kpa I 400 m ca 95 kpa 30/51
Tryk sensor mpx 4115 0m ~= 4.4V 400m ~= 3.9V 0.5V/400m eller 0.005V/4m ( 1 tælletal) 31/51
Accelerometer 32/51
intet specielt! Storage, radio osv osv Alt der skrives med Serial.print(ln) skrives også til radio sdkort så... 33/51
34/51
Digitale input/output Der er digital input og output: høj/sand ~= 5V lav/falsk ~= 0V Kan benyttes til kontakter mm 35/51
36/51
37/51
digitalt input Problem: hvad nu hvis der intet er tilslutte digitale indgang? Så svæver den == ikke pålidelig Arduino kan forbinde digitale udgang med intern modstand til 5V. Ingen tilslutning på indgang så måles der høj(5v) pinmode(pin, INPUT); // set pin to input digitalwrite(pin, HIGH); // turn on pullupresistor(20kohm) 38/51
Analog output 0-255 i tælletal frekvens ca 490 Hz dvs ca 2 msec pr periode 39/51
40/51
setup simpel output 41/51
Rigtig måling 42/51
øvelse1 mål spænding på analog 3 skriv ud sæt analog 3 med ledning fra hhv 3.3V og 5V 43/51
next step modular coding Formål: at kunne forberede et forsøg Ide: At man i forvejen kan lave noget funktionalitet. Metode: arduino projekt en skjult fil 44/51
45/51
46/51
Funktioner - modularisering Det talte sprog ;-) setup loop maal senddata SovLIdt gåtiltop 47/51
48/51
49/51
til tasterne 50/51
Kalibrering ikke kun programmering 51/51