Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. {{backlinks>.}} ====== Magic Mirror ohne Mirror und Magic ===== ==== Autor ==== Jonas ==== Idee und Fernziel ==== Das Ziel ist es, einen Magic Mirror zu bauen, der sich mithilfe von vier Infrarot-Sensoren zusätzlich steuern lässt. ==== Minimalprojekt ==== Das Minimalprojekt ist es, vier Infrarot-Sensoren mit einem Arduino steuren zu können und ihnen eigenständige Commands zuweisen. ===== Bericht ===== ==== Material ==== -Arduino Uno -USB-Kabel -4 Infrarot-Sensoren und Breadboard -Für LED des Sensors ein 150 Ohm Widerstand und für Phototransistor 50k Ohm Widerstand -Kabel -Serialport Library für Ruby (https://rubygems.org/gems/serialport/versions/1.3.1) ==== Aufbau ==== Infrarot-Sensoren: Der Plus-Pol der LED und des Phototransistors befindet sich auf der unbeschriebenen Seite des Sensors. Darum werden die Stromquellen da angeschlossen. Nach der LED ist es wichtig, einen 150 Ohm Widerstand einzubauen. Desweiteren muss ein 50k Ohm nach dem Phototransistor vorhanden sein. Der Analoganschluss muss dabei zwischem dem Phototransistor und seinem Widerstand geschalten sein. Für jeden Sensor wird ein Groundpin, ein Analogpin und zwei Pins(für die Stromversorgung) benötigt. ==== Code ==== Arduino Code: <hidden code> <code c++> #define LED1 11 #define SENSOR1 A0 #define STROM1 12 #define LED2 3 #define SENSOR2 A1 #define STROM2 2 #define LED3 9 #define SENSOR3 A2 #define STROM3 8 #define LED4 7 #define SENSOR4 A3 #define STROM4 6 void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); } void loop() { // put your main code here, to run repeatedly: digitalWrite(LED1, HIGH); digitalWrite(STROM1, HIGH); delay(2); int i1 =analogRead(SENSOR1); digitalWrite(LED1, 0); delay(2); int i11 =analogRead(SENSOR1); digitalWrite(STROM1, 0); delay(2); Serial.print("m"); Serial.println(i1-i11); digitalWrite(LED2, HIGH); digitalWrite(STROM2, HIGH); delay(2); int i2 =analogRead(SENSOR2); digitalWrite(LED2, 0); delay(2); int i22 =analogRead(SENSOR2); digitalWrite(STROM2, 0); delay(20); Serial.print("y"); Serial.println(i2-i22); digitalWrite(LED3, HIGH); digitalWrite(STROM3, HIGH); delay(2); int i3 =analogRead(SENSOR3); digitalWrite(LED3, 0); delay(2); int i33 =analogRead(SENSOR3); digitalWrite(STROM3, 0); delay(2); Serial.print("q"); Serial.println(i3-i33); digitalWrite(LED4, HIGH); digitalWrite(STROM4, HIGH); delay(2); int i4 =analogRead(SENSOR4); digitalWrite(LED4, 0); delay(2); int i44 =analogRead(SENSOR4); digitalWrite(STROM4, 0); delay(2); Serial.print("p"); Serial.println(i4-i44); delay(2000); } </code> </hidden> Rubycode: <hidden code:> <code ruby> require "serialport" #params for serial port port_str = "/dev/ttyUSB0" #may be different for you baud_rate = 115200 data_bits = 8 stop_bits = 1 parity = SerialPort::NONE sp = SerialPort.new(port_str, baud_rate, data_bits, stop_bits, parity) i2 = "" #just read forever while true do while (i = sp.gets) do # print i i2 += i if i.scan(/\n/)[0] == "\n" if i2.scan(/p\K\d+/)[0].to_i > 200 # Hier Code einfügen was passieren soll, wenn Hand festgestellt puts "Oben Rechts" system "firefox" end if i2.scan(/q\K\d+/)[0].to_i > 200 # Hier Code einfügen was passieren soll, wenn Hand festgestellt puts "Oben Links" system "unity-control-center --overview " end if i2.scan(/y\K\d+/)[0].to_i > 200 # Hier Code einfügen was passieren soll, wenn Hand festgestellt puts "Unten Links" a = `ps -ef` puts a baum = a.scan(/(\d+{3,5}).{34}\/usr\/lib\/firefox\/firefox/)[0][0].to_i puts "kill #{baum}" #system "kill #{baum}" baum = "" end if i2.scan(/m\K\d+/)[0].to_i > 200 # Hier Code einfügen was passieren soll, wenn Hand festgestellt "Unten Rechts" # a = `ps -ef` #tree = a.scan(/(\d+{3,5}).{34}unity-control-center --overview/)[0][0].to_i # puts "kill #{tree}" #system "kill #{tree}" #tree = "" end i2 = "" end #puts i.class #String end end sp.close </code> </hidden> ==== Fazit ==== Das Minimalprojekt wurde erreicht. Nun wäre das weitere Vorgehen so, dass man einen Magic Mirror baut, um die Infrarot-Sensoren implementieren zu können. Die BU hat einen grossartigen Einblick in das Thema Arduino gegeben und das Interesse für Arduinos geweckt. Ebenfalls ist man zum ersten Mal der Programmiersprache C++ begegnet. ==== Fotos und Film ==== Gesamtes Projekt: {{:efinf:blc2016:bu1:projekt3:img_20170316_154240-min.jpg?400|}} Aufbau eines Sensors: {{:efinf:blc2016:bu1:projekt3:img_20170316_154343-min.jpg?400|}} {{:efinf:blc2016:bu1:projekt3:img_20170316_154354-min.jpg?400|}} efinf/blc2016/bu1/projekt3/projekt.txt Last modified: 2017/03/16 16:21by noel_ottiger