use pro mini as sensor with attiny85 as controller
This commit is contained in:
parent
4cee82f28d
commit
9862b91bf1
@ -10,20 +10,7 @@ private:
|
||||
public:
|
||||
SonarSensor(short id) : GenericSensor(id) {}
|
||||
|
||||
void setup() {
|
||||
pinMode(VCC_PIN, OUTPUT);
|
||||
turnOff();
|
||||
}
|
||||
|
||||
unsigned int scan() {
|
||||
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
|
||||
board = attiny85
|
||||
framework = arduino
|
||||
lib_deps =
|
||||
teckel12/NewPing@^1.9.4
|
||||
sui77/rc-switch @ ^2.6.4
|
||||
build_src_filter = +<switch.cpp>
|
||||
lib_extra_dirs =
|
||||
../libraries
|
||||
upload_protocol = stk500v1
|
||||
@ -23,3 +21,14 @@ upload_flags =
|
||||
-b$UPLOAD_SPEED
|
||||
upload_port = /dev/ttyACM0
|
||||
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 <TinyPower.h>
|
||||
|
||||
#define SENDER_PIN PIN_B2
|
||||
#define TRIGGER_PIN PIN_B3
|
||||
#define ECHO_PIN PIN_B4
|
||||
#define VCC_PIN PIN_B1
|
||||
#define SENDER_GND 10
|
||||
#define SENDER_DATA 11
|
||||
#define SENDER_VCC 12
|
||||
#define TRIGGER_PIN 2
|
||||
#define ECHO_PIN 3
|
||||
#define NOTIFY_PIN 9
|
||||
|
||||
#define MAX_DISTANCE 200 // 2 meters
|
||||
|
||||
#include "SonarSensor.h"
|
||||
|
||||
#define SEND_INTERVAL 450 // 450*8s = ~1 hour
|
||||
#define SEND_VCC_INTERVAL (SEND_INTERVAL*12) // ~12 hours
|
||||
|
||||
|
||||
SonarSensor oilSensor(OIL_SENSOR);
|
||||
|
||||
volatile int counter = 0;
|
||||
volatile bool shouldSend = true;
|
||||
|
||||
void setup() {
|
||||
oilSensor.setup();
|
||||
TinySwitch::setup(SENDER_PIN);
|
||||
TinyPower::setup();
|
||||
TinyPower::enableWdt(WDTO_8S);
|
||||
Serial.begin(9600);
|
||||
Serial.println("starting...");
|
||||
|
||||
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() {
|
||||
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