{"id":55,"date":"2013-11-02T20:53:21","date_gmt":"2013-11-02T18:53:21","guid":{"rendered":"http:\/\/grenzdebiel.dyndns.org\/wordpress\/?p=55"},"modified":"2015-07-24T16:36:17","modified_gmt":"2015-07-24T14:36:17","slug":"adxl","status":"publish","type":"post","link":"https:\/\/blog.grenzdebiel.dynv6.net\/?p=55","title":{"rendered":"ADXL &#8211; 3-Achsenbeschleunigungssensor"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-thumbnail wp-image-175\" src=\"http:\/\/grenzdebiel.no-ip.biz\/wordpress\/wp-content\/uploads\/2013\/11\/ADXL330-150x150.jpg\" alt=\"adxl330\" width=\"150\" height=\"150\" \/>Zum Einsatz kommt hier ein ADXL330. Der ADXL330 ist ein 3-Achsenbeschleunigungssensor bis maximal 3<a title=\"g-Kraft\" href=\"http:\/\/de.wikipedia.org\/wiki\/G-Kraft\" target=\"_blank\">g<\/a>.<\/p>\n<p>Die Ausgabe erfolgt mit einer variablen Spannung in abh\u00e4ngigkeit zur Beschleunigung.<br \/>\n<!--more-->Anbei ein Video wo ein ADXL330 mit einem Arduino ausgelesen\/verabeitet wird und die Daten zu einem mit Proccessing erstellten 3D-Modell gesendet und dargestellt wird:<\/p>\n<p><iframe loading=\"lazy\" width=\"420\" height=\"315\" src=\"\/\/www.youtube-nocookie.com\/embed\/KqHT2gZOF2o\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>Datenblatt: <a title=\"ADXL330\" href=\"http:\/\/www.analog.com\/static\/imported-files\/data_sheets\/ADXL330.pdf\" target=\"_blank\">http:\/\/www.analog.com\/static\/imported-files\/data_sheets\/ADXL330.pdf<\/a><\/p>\n<p>Arduino Sketch:<\/p>\n<pre class=\"lang:arduino decode:true brush: c; gutter: true\">#include &lt;LiquidCrystal.h&gt;\r\n\r\nint adxlX=2;\r\nint adxlY=1;\r\nint adxlZ=0;\r\n\r\nint KalibTast=2;\r\nvolatile int Prellen     = 250;\r\nvolatile unsigned long letzter_irq=millis();\r\n\r\nint adxlXK=0;\r\nint adxlYK=0;\r\nint adxlZK=0;\r\nint adxlRauschen=2;\r\nint Kalibrieren=0;\r\n\r\n\/\/LiquidCrystal lcd(12, 11, 5, 4, 3, 2);\r\nLiquidCrystal lcd(12, 11, 7, 6, 5, 4);\r\n\r\nvoid setup(void)\r\n{\r\n     pinMode(KalibTast,INPUT);\r\n     attachInterrupt(0,Kalib,FALLING);\r\n     Serial.begin(9600);\r\n\r\n     lcd.begin(16,2);\r\n     Kalibrieren=1;\r\n     Kalib();\r\n     delay(1000);\r\n}\r\n\r\nvoid loop ()\r\n{\r\n     int i=0;\r\n\r\n     int x=0;\r\n     int y=0;\r\n     int z=0;\r\n\r\n     int x1=0;\r\n     int y1=0;\r\n     int z1=0;\r\n\r\n     x=analogRead(adxlX)-adxlXK;\r\n     y=analogRead(adxlY)-adxlYK;\r\n     z=analogRead(adxlZ)-adxlZK;\r\n\r\n     if(x &lt;= -adxlRauschen or x &gt;= adxlRauschen)\r\n               x1=x;\r\n\r\n     if(y &lt;= -adxlRauschen or y &gt;= adxlRauschen)\r\n               y1=y;\r\n\r\n     if(z &lt;= -adxlRauschen or z &gt;= adxlRauschen)\r\n               z1=z;\r\n\r\n     lcd.clear();\r\n     lcd.setCursor(0,0);\r\n     lcd.print(\"X=\");\r\n     lcd.print(x1);\r\n     lcd.print(\"     Y=\");\r\n     lcd.print(y1);\r\n     lcd.setCursor(0,1);\r\n     lcd.print(\"Z=\");\r\n     lcd.print(z1);\r\n\r\n     Serial.print(x1,DEC);\r\n     Serial.print(\" \");\r\n     Serial.print(y1,DEC);\r\n     Serial.print(\" \");\r\n     Serial.print(z1,DEC);\r\n     Serial.println();\r\n\r\n     delay(50);\r\n}\r\n\r\nvoid Kalib (void)\r\n{\r\n     unsigned long akt_irq;\r\n     akt_irq=millis();\r\n     if(akt_irq - letzter_irq &gt; Prellen or Kalibrieren == 1)\r\n     {\r\n               lcd.clear();\r\n               lcd.setCursor(0,0);\r\n               lcd.print(\"Kalibriere...\");\r\n\r\n               adxlXK=analogRead(adxlX);\r\n               adxlYK=analogRead(adxlY);\r\n               adxlZK=analogRead(adxlZ);\r\n\r\n               letzter_irq=akt_irq;\r\n               if(Kalibrieren == 1) { Kalibrieren=0; }\r\n     }\r\n}<\/pre>\n<p>Proccessing Sketch:<\/p>\n<pre class=\"lang:java decode:true brush: c; gutter: true  \">import processing.serial.*;\r\n\r\nSerial port;\r\nString message = null;\r\nString elements[] = null;\r\nint[] sensorValues = new int[3];\r\n\r\nfloat boxSize = 50;\r\nfloat margin = boxSize*2;\r\nfloat depth = 400;\r\ncolor boxFill;\r\n\r\nvoid setup()\r\n{\r\n     size(800,400,P3D);\r\n     noStroke();\r\n     println(Serial.list());\r\n     port = new Serial(this, Serial.list()[6], 9600);\r\n     frameRate(25);\r\n}\r\n\r\nvoid draw() {\r\n     background(255);\r\n\r\n     translate(width\/2, height\/2, -depth);\r\n     rotateZ(radians(360-(sensorValues[0]*1.5)));\r\n     rotateX(radians(360-((sensorValues[1]*1.5)-90)));\r\n\r\n     for (float i =- depth\/2+margin; i &lt;= depth\/2-margin; i += boxSize){\r\n               pushMatrix();\r\n               for (float j =- height+margin; j &lt;= height-margin; j += boxSize){\r\n                         pushMatrix();\r\n                         for (float k =- width+margin; k &lt;= width-margin; k += boxSize){\r\n                                   boxFill = color(abs(i), abs(j), abs(k), 50);\r\n                                   pushMatrix();\r\n                                   translate(k\/1.5, j\/1.5, i\/1.5);\r\n                                   fill(boxFill);\r\n                                   box(boxSize, boxSize, boxSize);\r\n                                   popMatrix();\r\n                         }\r\n                         popMatrix();\r\n               }\r\n               popMatrix();\r\n     }\r\n}\r\n\r\nvoid serialEvent(Serial p){\r\n     message = port.readStringUntil(13);\r\n     if (message != null) {\r\n               try {\r\n                         elements = splitTokens(message);\r\n                         for (int i =0; i &lt; elements.length &amp;&amp; i &lt; 3; i++ ) {\r\n                                   sensorValues[i] = int(elements[i]);\r\n                         }\r\n               }\r\n               catch (Exception e){\r\n               }\r\n     }\r\n\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Zum Einsatz kommt hier ein ADXL330. Der ADXL330 ist ein 3-Achsenbeschleunigungssensor bis maximal 3g. Die Ausgabe erfolgt mit einer variablen Spannung in abh\u00e4ngigkeit zur Beschleunigung.<\/p>\n","protected":false},"author":3,"featured_media":175,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[59,57,4,58],"class_list":["post-55","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hardware","tag-3d","tag-adxl330","tag-arduino-2","tag-proccessing"],"_links":{"self":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts\/55","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=55"}],"version-history":[{"count":2,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts\/55\/revisions"}],"predecessor-version":[{"id":205,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts\/55\/revisions\/205"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/media\/175"}],"wp:attachment":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=55"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=55"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}