Paso 12: Firmware
Programación el barebone es bastante simple. Todo lo que necesitas es un Arduino Uno con el microcontrolador eliminado (verá el barebone como el controlador).
http://Arduino.CC/en/Main/Standalone
http://Arduino.CC/en/Tutorial/ArduinoToBreadboard
Yo soldado un encabezado a los 5V, ground, reset, rx y tx, así que me puedo conectar Arduino de mi sensor a un Arduino uno que tiene el chip Atmega quitado. De esta manera puedo programar el Arduino lo haría con cualquier otro Arduino.
Usted también necesitará instalar la biblioteca de capacitiveSensor en el IDE de Arduino: http://playground.arduino.cc/Main/CapacitiveSensor?from=Main.CapSense
Cargar el firmware
El firmware se puede descargar en los archivos adjuntos. El CLS_Sensor_firmware es el firmware que necesita cargarse el sensor de nivel capacitivo. El firmware CLS_sensor_reader puede ser subido a otro Arduino y utiliza para comunicarse con el sensor. El lector Arduino debe conectarse al sensor a través de I2C, con resistencias de pull-up de 4k7ohm 2. En el siguiente paso se explicará todos los comandos que pueden utilizar. También puede utilizar fragmentos de código del lector para añadir a su propio código, por lo que fácilmente puede establecer y leer el sensor sin tener que escribir las funciones usted mismo.
Cómo funciona el código
El sensor funciona bastante hacia adelante. Cada N segundos observa el tiempo en el temporizador millis(). Empieza entonces a 100 ciclos de CapacitiveSensor. Luego se mide el tiempo otra vez y resta la hora de salida de los últimos tiempos. Este es el valor bruto por que el sensor compara el nivel de líquido. El sensor también hace un 0-255 valor y la distancia en mm desde el valor sin formato, por comparación con el conjunto mínimo y valor máximo.
Valores se almacenan en la EEPROM para que sean no volátiles. Cuando el sensor se encienda, se leer los valores de la EEPROM y comenzar a medir.
También el sensor tiene una línea I2C para comunicar con un microcontrolador maestro. La dirección I2C del sensor es 42. El maestro se comunica con el sensor de la siguiente manera.
Los comandos que pueden enviarse al sensor son:
- 10: enviar 0-255 nivel valor (1 byte);
- 20: enviar distancia en mm (devuelve primero 2 bytes, el byte alto y el byte bajo);
30: tiempo de enviar crudo medida (devuelve primero 2 bytes, el byte alto y el byte bajo);
- 40: 0% valor de sensor (adicional no pasa nada);
- 50: 100% valor de sensor (adicional no pasa nada);
- 60: definir la longitud de sensor en la unidad que desee (2 bytes adicionales se esperan a que especificar la longitud del sensor de la unidad elegida)
- 70: leer el valor crudo de límite inferior set (devuelve 2 bytes (byte alto primero) con el conjunto de menor valor crudo);
80: leer el valor crudo de límite superior (devuelve 2 bytes (byte alto primero) con el superior valor crudo);
- 90: leer la longitud de sensor set (devuelve 2 bytes (byte alto primero) con el metraje en la unidad que elegido)
Un error importante en Wire.h
La biblioteca de alambre es tiene un error curioso en él cuando se comunica 2 Arduino. Cuando el maestro ha enviado un requestFrom al esclavo, el esclavo puede no devolver de esta manera:
Por el contrario, debe devolver el valor de esta manera:
Si no realiza de esta manera, el maestro sólo verá el último byte enviado y todos los demás son ignorados. Puede parecer simple, pero aquí esta cuestión me costo 3 dias para averiguar.
!!! 3 DÍAS!!!
(Si fuera posible también utilizaría capital 3).