use pro mini as sensor with attiny85 as controller
This commit is contained in:
parent
4cee82f28d
commit
9862b91bf1
@ -10,20 +10,7 @@ private:
|
|||||||
public:
|
public:
|
||||||
SonarSensor(short id) : GenericSensor(id) {}
|
SonarSensor(short id) : GenericSensor(id) {}
|
||||||
|
|
||||||
void setup() {
|
|
||||||
pinMode(VCC_PIN, OUTPUT);
|
|
||||||
turnOff();
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int scan() {
|
unsigned int scan() {
|
||||||
return sonar.convert_cm(sonar.ping_median());
|
return sonar.convert_cm(sonar.ping_median());
|
||||||
}
|
}
|
||||||
|
|
||||||
void turnOn() {
|
|
||||||
digitalWrite(VCC_PIN, HIGH);
|
|
||||||
}
|
|
||||||
|
|
||||||
void turnOff() {
|
|
||||||
digitalWrite(VCC_PIN, LOW);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -12,9 +12,7 @@
|
|||||||
platform = atmelavr
|
platform = atmelavr
|
||||||
board = attiny85
|
board = attiny85
|
||||||
framework = arduino
|
framework = arduino
|
||||||
lib_deps =
|
build_src_filter = +<switch.cpp>
|
||||||
teckel12/NewPing@^1.9.4
|
|
||||||
sui77/rc-switch @ ^2.6.4
|
|
||||||
lib_extra_dirs =
|
lib_extra_dirs =
|
||||||
../libraries
|
../libraries
|
||||||
upload_protocol = stk500v1
|
upload_protocol = stk500v1
|
||||||
@ -23,3 +21,14 @@ upload_flags =
|
|||||||
-b$UPLOAD_SPEED
|
-b$UPLOAD_SPEED
|
||||||
upload_port = /dev/ttyACM0
|
upload_port = /dev/ttyACM0
|
||||||
upload_speed = 19200
|
upload_speed = 19200
|
||||||
|
|
||||||
|
[env:pro_mini]
|
||||||
|
platform = atmelavr
|
||||||
|
board = pro16MHzatmega168
|
||||||
|
framework = arduino
|
||||||
|
build_src_filter = +<oil_sensor.cpp>
|
||||||
|
lib_deps =
|
||||||
|
teckel12/NewPing@^1.9.4
|
||||||
|
sui77/rc-switch @ ^2.6.4
|
||||||
|
lib_extra_dirs =
|
||||||
|
../libraries
|
||||||
|
|||||||
@ -1,55 +1,37 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <TinyPower.h>
|
|
||||||
|
|
||||||
#define SENDER_PIN PIN_B2
|
#define SENDER_GND 10
|
||||||
#define TRIGGER_PIN PIN_B3
|
#define SENDER_DATA 11
|
||||||
#define ECHO_PIN PIN_B4
|
#define SENDER_VCC 12
|
||||||
#define VCC_PIN PIN_B1
|
#define TRIGGER_PIN 2
|
||||||
|
#define ECHO_PIN 3
|
||||||
|
#define NOTIFY_PIN 9
|
||||||
|
|
||||||
#define MAX_DISTANCE 200 // 2 meters
|
#define MAX_DISTANCE 200 // 2 meters
|
||||||
|
|
||||||
#include "SonarSensor.h"
|
#include "SonarSensor.h"
|
||||||
|
|
||||||
#define SEND_INTERVAL 450 // 450*8s = ~1 hour
|
|
||||||
#define SEND_VCC_INTERVAL (SEND_INTERVAL*12) // ~12 hours
|
|
||||||
|
|
||||||
|
|
||||||
SonarSensor oilSensor(OIL_SENSOR);
|
SonarSensor oilSensor(OIL_SENSOR);
|
||||||
|
|
||||||
volatile int counter = 0;
|
|
||||||
volatile bool shouldSend = true;
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
oilSensor.setup();
|
Serial.begin(9600);
|
||||||
TinySwitch::setup(SENDER_PIN);
|
Serial.println("starting...");
|
||||||
TinyPower::setup();
|
|
||||||
TinyPower::enableWdt(WDTO_8S);
|
pinMode(SENDER_GND, OUTPUT);
|
||||||
|
digitalWrite(SENDER_GND, LOW);
|
||||||
|
pinMode(SENDER_VCC, OUTPUT);
|
||||||
|
digitalWrite(SENDER_VCC, HIGH);
|
||||||
|
TinySwitch::setup(SENDER_DATA);
|
||||||
|
|
||||||
|
delay(300);
|
||||||
|
unsigned int distance = oilSensor.scan();
|
||||||
|
Serial.println(distance);
|
||||||
|
if (distance) oilSensor.sendValueAndVoltage(distance);
|
||||||
|
delay(200);
|
||||||
|
pinMode(NOTIFY_PIN, OUTPUT);
|
||||||
|
digitalWrite(NOTIFY_PIN, LOW);
|
||||||
|
Serial.println("finished");
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
if (shouldSend) {
|
|
||||||
shouldSend = false;
|
|
||||||
oilSensor.turnOn();
|
|
||||||
delay(500);
|
|
||||||
unsigned int distance = oilSensor.scan();
|
|
||||||
oilSensor.turnOff();
|
|
||||||
if (distance) {
|
|
||||||
if (counter) {
|
|
||||||
oilSensor.sendValue(distance);
|
|
||||||
} else {
|
|
||||||
oilSensor.sendValueAndVoltage(distance);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
TinyPower::sleep();
|
|
||||||
}
|
|
||||||
|
|
||||||
ISR(WDT_vect) {
|
|
||||||
counter++;
|
|
||||||
if ((counter % SEND_INTERVAL == 0)) {
|
|
||||||
shouldSend = true;
|
|
||||||
if ((counter % SEND_VCC_INTERVAL == 0)) {
|
|
||||||
counter = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
41
oil_sensor/src/switch.cpp
Normal file
41
oil_sensor/src/switch.cpp
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#include <Arduino.h>
|
||||||
|
#include <TinyPower.h>
|
||||||
|
|
||||||
|
#define CONTROLLER_PIN PIN_B4
|
||||||
|
#define NOTIFICATION_PIN PIN_B0
|
||||||
|
|
||||||
|
#define HOUR_INTERVAL 450 // 450*8s = ~1 hour
|
||||||
|
#define WAKE_INTERVAL (HOUR_INTERVAL*12) // ~12 hours
|
||||||
|
|
||||||
|
|
||||||
|
volatile int counter = 0;
|
||||||
|
volatile bool wakeUp = true;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
pinMode(PIN_B3, INPUT);
|
||||||
|
pinMode(CONTROLLER_PIN, OUTPUT);
|
||||||
|
digitalWrite(CONTROLLER_PIN, LOW);
|
||||||
|
pinMode(NOTIFICATION_PIN, INPUT_PULLUP);
|
||||||
|
TinyPower::setup();
|
||||||
|
TinyPower::enableWdt(WDTO_8S);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
if (wakeUp) {
|
||||||
|
wakeUp = false;
|
||||||
|
digitalWrite(CONTROLLER_PIN, HIGH);
|
||||||
|
}
|
||||||
|
TinyPower::sleep(NOTIFICATION_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
ISR(WDT_vect) {
|
||||||
|
counter++;
|
||||||
|
if ((counter % WAKE_INTERVAL == 0)) {
|
||||||
|
wakeUp = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ISR(PCINT0_vect) {
|
||||||
|
if (!digitalRead(NOTIFICATION_PIN))
|
||||||
|
digitalWrite(CONTROLLER_PIN, LOW);
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user