CategoryPrototyypin rakentaminen – BUS4TN007-1

Tutustutaan Arduino Uno/Mega sulautettuun järjestelmään, ja rakennetaan oma prototyyppi.

Oma prototyyppi, Hellemittari!

Suunnittelimme ja rakensimme luokkakaveri Samuelin kanssa oman prototyypin kurssin lopputyönä. Näin kesän alkussa on tarvetta laittaa kuntoon oma Hellemittari!

Hellemittari mittaa LM35 lämpömittarisensorilla ilman lämpötilaa. Me puolestaan loimme siihen visuaalisen näyttötavan sekä mittaria on mahdollista lukea myös etänä. Kun teimme proton yhteistyöllä niin sovimme, että minä hoidan mittauspuolen eli mittaan ilman lämpötilan ja syötän sen tietokantaamme. Samuel taas puolestaan hoitaa lämpötilan hakemisen sekä yhteis työllä työstimme visuaalisen lämpötilan näyttötavan.

Kun lähdetään paremmin tarkastelemaan itse lämpötila mittaria se näyttänee tältä:

2012-05-14-077

Ylläoleva piiri kertoo ilman lämpötilan, kun sitä siltä kysytään. Lähdekoodit löytyvät alta:

/**
 * Niko Kiuru
 * License: GPL version 2 or later
 */
float tempc = 0; // Celsius
int readPin = 0;
char variable = 0;
void setup() {
Serial.begin(9600); // bit/s
pinMode(13, OUTPUT);
}

void loop() {
variable = Serial.read();
if (variable == 's') {
tempc = analogRead(readPin);
tempc = (5.0 * tempc * 100.0)/1024.0;
Serial.print(tempc);
variable = 0;
delay(100);
}
}

Kyseistä Arduinoa ohjataan meidän tekemällä python ohjelmalla, joka lähettää tietyn väliajoin pyyntöjä Arduinolle ilman lämpötilasta. Alta löytyy lähdekoodit:

## Niko Kiuru
## License: GPL version 2 or later
import serial
import urllib2
import time

ser = None

def main():
global ser
ser = serial.Serial("/dev/ttyACM1")
print("Temperature Server Starting...")
while (ser):
print("Serial port " + ser.portstr + " opened.")
ch = 's'
print("Sending...")
ser.write(ch)
degree = ser.read(5)
print degree
# url = osoite johon otetaan yhteyttä degree parametrilla
# Esimerkki urli:
url = 'www.esimerkkidomain.com?degree=%s' % degree
urllib2.urlopen(url)
time.sleep(5)

print("Temperature Server shutdown")

if __name__ == "__main__":
main()

Tietokanta puoli toteutettiin php:n get parametreilla, jotka se vie mysql tietokantaan. Lähdekoodit alla:

/**
 * Niko Kiuru
 * License: GPL version 2 or later
 */
 $result["degree"], "time" => $result["datetime"]);
$degree_r = $result["degree"];
}

//$degreeList = json_encode($degreeList);
//print_r($degreeList);
echo $degree_r;
}

mysql_close($connect);
?>

Ylläolevan koodin saa helposti muokattua json-rajapintaa nuodattavaksi, mutta ajan loputtua emme ehtineet saamaan python ohjelman json-dekooderia toimimaan kunnolla jotta olisimme voineet käyttää sitä. Loput vaiheista toteutti Samuel, ja hän käy lävitse tekovaiheita omassa blogi postauksessaan. Linkki Samuelin blogi postaukseen: http://kontsu.wordpress.com/2012/05/14/arduino-remote-thermometer/

Ja lopuksi vielä kuva valmiista protosta:

Demovideo:

Arduinon ohjaaminen Pythonilla

Arduinon etäohjaaminen on suhteellisen helppoa. Tässä artikkelissa käyn lävitse kuinka tämä tapahtuu Pythonilla. Sama toimenpide on lähestulkoon yhtä helppoa myös muilla ohjelmointikielillä.

Ensiksi viedään Arduinoon seuraavanlainen koodin pätkä:

#!/usr/bin/env python
# remoteControl.py - Graphical user interface for remote control.
# (c) Kimmo Karvinen & Tero Karvinen http://BotBook.com

import serial
import gtk

ser=None # global variable

def sendSerial(widget, ch):
global ser
print("Sending "+ch)
ser.write(ch)

def main():
global ser
# File name might differ between Linux, Windows, and Mac OS X
ser = serial.Serial('/dev/ttyUSB0', 9600)

if (ser):
print("Serial port " + ser.portstr + " opened.")

window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("destroy", gtk.main_quit)

vbox=gtk.VBox()
window.add(vbox)
row1=gtk.HBox()
off1 = gtk.Button("1 off")
off1.connect("clicked", sendSerial, "2")
row1.pack_start(off1)
vbox.pack_start(row1)
on1 = gtk.Button("1 on")
on1.connect("clicked", sendSerial, "8")
row1.pack_start(on1)

row2=gtk.HBox()
vbox.pack_start(row2) # vertical box starts at the bottom
off2 = gtk.Button("2 off")
off2.connect("clicked", sendSerial, "3")
row2.pack_start(off2)
on2 = gtk.Button("2 on")
on2.connect("clicked", sendSerial, "7")
row2.pack_start(on2)

row3=gtk.HBox()
vbox.pack_start(row3)
off3 = gtk.Button("3 off")
off3.connect("clicked", sendSerial, "4")
row3.pack_start(off3)
on3 = gtk.Button("3 on")
on3.connect("clicked", sendSerial, "6")
row3.pack_start(on3)

window.show_all()
gtk.main()
print ("Thanks for using BotBook.com remote control.")

if __name__ == "__main__":
main()

Seuraavaksi luodaan Pythonilla seuraavanlainen ohjelma:

#!/usr/bin/env python
# packingVBox.py - Pack many widgets on top of each other.
# (c) Kimmo Karvinen & Tero Karvinen http://BotBook.com

import gtk

window=gtk.Window()
window.connect("destroy", gtk.main_quit)

vbox=gtk.VBox()
window.add(vbox)

b1=gtk.Button("Button 1")
vbox.pack_start(b1)

b2=gtk.Button("Button 2")
vbox.pack_start(b2)

window.show_all()
gtk.main()

Ajamalla ylläolevan Python ohjelman näytöllesi piirretään 4 laatikkio, joita painamalla annat käskyjä Arduinollesi. Kyseinen ohjelma mahdollistaa virransyötön portteihin 2, 8, 3 ja 7.

Usb-hiiri ja Arduino

Valitsin uuden sensorin Arduino:ni, mutta tällä kertaa tyydyin vain kirjalliseen tarkasteluun. Sensoria hakiessani koitin miettiä hyvin arkisia välineitä ja valinnaksi osui usb-hiiri. Hiiri oli mielestäni hauska vaihtoehto, kun se sisältää itsessään monia sensoreita.

Pienellä googlettamisella jo löytyi sopiva esimerkki projekti, joka oli dokumentoitu [email protected] (http://www.circuitsathome.com/mcu/controlling-robotic-arm-with-arduino-and-usb-mouse) -blogissa. Esimerkki projektissa hiiri oli liitetty ohjaamaan “Robotic Arm Inverse Kinematics” -robottia (http://www.circuitsathome.com/mcu/programming/robotic-arm-inverse-kinematics-on-arduino).

Hiiren toimintaa kuvastavassa esimerkkikoodista (https://github.com/felis/USB_Host_Shield/blob/master/examples/arm_mouse.pde), pystyy helposti itse lähtemään rakentamaa omaa ohjausjärjestelmää omiin projekteihin.

Arduino ja button

Viime viikolla sain koululta käyttööni button-anturin. Button on nelijalkainen anturi, jossa on nappi. Sen tarkoitus on sulkea/johtaa sähköä. Button on yksi helpoimmista ellei helpoin arduinoon liitettävä anturi.

Alla olevasta kuvasta pystyy näkemään liitännät mitä olen Button-anturin kanssa käyttänyt:

(Punainen johto on + ja musta -.)

Parallax QTI Sensor käyttöönotto yritys

Yritin ottaa Arduinon kanssa käyttöön Parallax QTI Sensor REV B:n. Valmistajan sivuilta kyseinen tuote löytyy linkin takaa: http://www.parallax.com/tabid/768/ProductID/100/Default.aspx.

En löytänyt kunnollista kytkentäkaaviota, jolloin en päässyt kytkemään sitä Arduinoon. Valmistajan dokumentaatio komponentista: http://www.parallax.com/Portals/0/Downloads/docs/prod/compshop/qtilinesensorrev1.pdf.

Esimerkki koodit löyty vain Basicillä.

© 2017 Niko Kiuru

Theme by Anders NorenUp ↑