In this article, we will use Odysseus to process measurements from two light dependent resistors (LDR). To do so, we use the Arduino open-source electronics prototyping platform.
Requirements
- RS232 wrapper bundle
- Arduino IDE or dfu-programmer
- Arduino Board
- 2x Light dependent resistor
- 2x Resistor (10kΩ)
- Soldering iron and solder
- Wires
- USB Cable to connect the Arduino to your computer
The Hardware
For this example we will use an Arduino Mega 2560. To measure the voltage at the LDR we simple build a voltage divider as shown the following image.
Next, we solder all the parts together. We use three pins to connect the wires later. However, you can also just solder the wires on the parts.
After that, the three wires of both LDRs are connected to the Arduino (red: 5V, black: GND, and green on A0). In the image we used the ScrewShield to connect the wires.
When all wires are connected you can plugin the USB-cable and start writing the software for the Arduino.
The Software
To measure the voltage at the LDR we simple use the analogRead method with the pin id as parameter. The output is done by the Serial.println method that puts the readings on the serial connection as a CSV string.
#include <stdio.h> const int analogInPin1 = A0; const int analogInPin2 = A1; int sensorValue1 = 0; int sensorValue2 = 0; void setup() { Serial.begin(9600); } void loop() { sensorValue1 = analogRead(analogInPin1); Serial.print(sensorValue1); Serial.print(","); Serial.println(sensorValue2); delay(500); }
The Query
The query reads the sensor measurements from the serial connection on device ttyACM0. To do so, the Access operator uses the RS232 Transport Handler and the CSV Protocol Handler. Further, we set our stream schema to light1 as Double and light2 respectively.
arduino= ACCESS({source='arduino', wrapper='GenericPush', transport='RS232', protocol='CSV', dataHandler='Tuple', options=[['port', '/dev/ttyACM0'],['delimiter', ',']], schema=[['light1', 'Double'],['light2', 'Double']] })
After writing down the query you can start it and open the operator graph to see the measurements in the List View.
6 Comments
Anonymous
Feb 12, 2013Hi, I hope someone could help me with my problem.
I tried to write a program for arduino to get data into the computer.
this is what i wrote / copied
///source
#PARSER CQL
#TRANSCFG Standard
#QUERY
CREATE STREAM source (windspd float, winddrctn integer)
WRAPPER 'GenericPush'
PROTOCOL 'CSV'
TRANSPORT 'RS232'
DATAHANDLER 'Tuple'
OPTIONS ( 'port' '/dev/ttyACM2', 'baud' '9600') ///oder auch jedem anderen Port
this Query i can run without any errors.
///query
#PARSER CQL
#TRANSCFG Standard
#ADDQUERY
SELECT * FROM source;
Error:
Script Execution Error
de.uniol.inf.is.odysseus.core.server.planmanagement.optimization.exception.QueryOptimizationException: Exeception while initialize query.
Additional info:
Transformation Failed in rule Transform View (de.uniol.inf.is.odysseus.transform.rules.TAccessAOViewRule) - 8970561 Transformation Failed in rule AccessAO (generic) --> AccessPO (de.uniol.inf.is.odysseus.transform.rules.TAccessAOGenericRule) - 6099092 transformation failed ; No transport handler RS232 found.
I also tried the folloing
///source
#PARSER PQL
#TRANSCFG Standard
#QUERY
arduino= ACCESS({source='arduino',
wrapper='GenericPush',
transport='RS232',
protocol='CSV',
dataHandler='Tuple',
options=[['port', ‘/dev/ttyACM2'],['delimiter', ',']],
schema=[['windspeed', 'float'],['winddirection', 'integer']]
})
I get the following error already while starting the script
Script Execution Error
Lexical error at line 6, column 19. Encountered: "\u2018" (8216), after : ""
Thanks for your Help
Jonas Franz
Christian Kuka (库科)
Feb 12, 2013Looks like the Transport Handler for RS232 is missing. You can list all loaded bundles in the OSGi Console using "ss". Please check if the required bundle "de.uniol.inf.is.odysseus.wrapper.rs232" is installed.
Dennis Geesen
Feb 12, 2013If you use Odysseus Studio (the GUI-Version) you may also check, if you have installed the "Wrapper Feature" that provides the RS232 adapter. Look here for further details: How to install new features
Anonymous
Feb 12, 2013Hey, Thanks for the fast answer. I checked both. I installed the Wrapper feature and checked weather its installed and YES it is
. Do you have any other advice?
Thanks in advance.
Jonas Franz
Dennis Geesen
Feb 12, 2013hmmm...
first: your second query (the PQL-Version) has a wrong character at the beginning of ‘/dev/ttyACM2' --> this must be an apostrophe ' and not a single quotation mark ` or other single quotes...
second: If the bundle is installed, you may check, if the bundle is running...
use: "ss rs232" in the osgi-console and you should see one line where the bundle's state should be "ACTIVE". If the bundle is not started (e.g. in lazy-mode), you may start the bundle by hand using "start <id>" where you replace <id> with the id of the bundle that is shown by the "ss rs232" command before.
Dennis Geesen
Feb 12, 2013I just saw that the rs232 adapter was set to lazy-loading, which invokes that the bundle is not certainly started
so I hope, that's it. The new build at midnight will contain the fix and you can update your version!