Initial commmit
This commit is contained in:
@@ -1,2 +1,5 @@
|
||||
# rocket_motor_thrust_meter
|
||||
# Rocket Motor Thrust Meter
|
||||
|
||||
Thrust meter for meassuring thrust of custom rocket motors
|
||||
|
||||

|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
/*
|
||||
|
||||
Use following command to receive the data
|
||||
|
||||
socat -u UDP-RECVFROM:9998,fork -
|
||||
|
||||
Format of the data is a CSV deliminated by ;
|
||||
|
||||
counter, voltage, wifi strength
|
||||
|
||||
*/
|
||||
|
||||
#include <Wire.h>
|
||||
#include <WiFi.h>
|
||||
#include <WiFiUdp.h>
|
||||
|
||||
// ---------------- USER CONFIG ----------------
|
||||
const char* WIFI_SSID = "control-tower-24";
|
||||
const char* WIFI_PASSWORD = "expaexpa";
|
||||
|
||||
// Destination for UDP packets
|
||||
const char* UDP_TARGET_IP = "192.168.1.255"; // <-- change to your receiver's IP
|
||||
const uint16_t UDP_TARGET_PORT = 9998;
|
||||
|
||||
// How often to read + send (ms)
|
||||
const unsigned long SEND_INTERVAL_MS = 100;
|
||||
|
||||
// Arduino AD 24-bit převodník s 2 kanály
|
||||
|
||||
// piny pro připojení SCK a DT z modulu
|
||||
int pSCK = 7;
|
||||
int pDT = 4;
|
||||
|
||||
WiFiUDP udp;
|
||||
|
||||
// definování různých nastavení kanálů a jejich zesílení
|
||||
#define kanal_A_zesil_128 1
|
||||
#define kanal_B_zesil_32 2
|
||||
#define kanal_A_zesil_64 3
|
||||
|
||||
unsigned long lastSendTime = 0;
|
||||
|
||||
void connectWiFi() {
|
||||
Serial.print("Connecting to WiFi");
|
||||
WiFi.setTxPower(WIFI_POWER_19_5dBm);
|
||||
WiFi.setSleep(false);
|
||||
WiFi.setAutoReconnect(true);
|
||||
WiFi.persistent(true); // saves credentials to flash, faster reconnect
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
|
||||
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(400);
|
||||
Serial.print(".");
|
||||
}
|
||||
|
||||
Serial.println();
|
||||
Serial.print("WiFi connected. IP address: ");
|
||||
Serial.println(WiFi.localIP());
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
// nastavení pinů modulu jako výstup a vstup
|
||||
pinMode(pSCK, OUTPUT);
|
||||
pinMode(pDT, INPUT);
|
||||
// komunikace přes sériovou linku rychlostí 9600 baud
|
||||
Serial.begin(9600);
|
||||
// probuzení modulu z power-down módu
|
||||
digitalWrite(pSCK, LOW);
|
||||
|
||||
connectWiFi();
|
||||
|
||||
// spuštění prvního měření pro nastavení měřícího kanálu
|
||||
spusteniMereni(kanal_A_zesil_64);
|
||||
}
|
||||
|
||||
long counter = 0;
|
||||
|
||||
void loop()
|
||||
{
|
||||
// Reconnect WiFi if dropped
|
||||
if (WiFi.status() != WL_CONNECTED) {
|
||||
connectWiFi();
|
||||
}
|
||||
|
||||
unsigned long now = millis();
|
||||
if (now - lastSendTime >= SEND_INTERVAL_MS) {
|
||||
lastSendTime = now;
|
||||
|
||||
long rssi = WiFi.RSSI(); // dBm
|
||||
long odpor = spusteniMereni(kanal_A_zesil_64);
|
||||
|
||||
// Build payload: counter;temperature;pressure;rssi\n
|
||||
char payload[64];
|
||||
snprintf(payload, sizeof(payload), "%ld;%ld;%ld\n", counter, odpor, rssi);
|
||||
|
||||
counter = counter + 1;
|
||||
|
||||
Serial.print("Sending UDP packet: ");
|
||||
Serial.println(payload);
|
||||
|
||||
udp.beginPacket(UDP_TARGET_IP, UDP_TARGET_PORT);
|
||||
udp.print(payload);
|
||||
udp.endPacket();
|
||||
}
|
||||
}
|
||||
|
||||
// vytvoření funkce pro měření z nastaveného kanálu
|
||||
long spusteniMereni(byte mericiMod)
|
||||
{
|
||||
byte index;
|
||||
long vysledekMereni = 0L;
|
||||
// načtení 24-bit dat z modulu
|
||||
while(digitalRead(pDT));
|
||||
for (index = 0; index < 24; index++)
|
||||
{
|
||||
digitalWrite(pSCK, HIGH);
|
||||
vysledekMereni = (vysledekMereni << 1) | digitalRead(pDT);
|
||||
digitalWrite(pSCK, LOW);
|
||||
}
|
||||
// nastavení měřícího módu
|
||||
for (index = 0; index < mericiMod; index++)
|
||||
{
|
||||
digitalWrite(pSCK, HIGH);
|
||||
digitalWrite(pSCK, LOW);
|
||||
}
|
||||
// konverze z 24-bit dvojdoplňkového čísla
|
||||
// na 32-bit znaménkové číslo
|
||||
if (vysledekMereni >= 0x800000)
|
||||
vysledekMereni = vysledekMereni | 0xFF000000L;
|
||||
// přepočet výsledku na mikrovolty podle zvoleného
|
||||
// kanálu a zesílení
|
||||
switch(mericiMod) {
|
||||
case 1: vysledekMereni = vysledekMereni/128/2; break;
|
||||
case 2: vysledekMereni = vysledekMereni/32/2; break;
|
||||
case 3: vysledekMereni = vysledekMereni/64/2; break;
|
||||
}
|
||||
return vysledekMereni ;
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 280 KiB |
Reference in New Issue
Block a user