This commit is contained in:
Kenwood 2021-07-15 10:36:04 -04:00
commit 6106c46bd8
19 changed files with 121 additions and 16 deletions

1
.gitignore vendored
View File

@ -9,3 +9,4 @@ __pycache__
*.png *.png
*.jpg *.jpg
*.wav *.wav
*.pdf

Binary file not shown.

14
README.md Normal file
View File

@ -0,0 +1,14 @@
# To install on robot
```
git clone https://kitsunehosting.net/gitea/Kenwood/lewis-crawler /srv/crawler
cd /srv/crawler/crawler_software/raspberry_pi
make install
```
# Updating
```
cd /srv/crawler
git pull
```

Binary file not shown.

Binary file not shown.

BIN
crawler_cad/Frame.FCStd Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -5,7 +5,7 @@
# What board to build for and its core # What board to build for and its core
CORE ?= arduino:avr CORE ?= arduino:avr
FQBN ?= arduino:avr:nano FQBN ?= arduino:avr:nano:cpu=atmega328old
# What port to build on # What port to build on
ifndef SERIAL_DEV ifndef SERIAL_DEV
@ -20,13 +20,13 @@ endif
all: requirements build upload all: requirements build upload
build: crawler_slave.ino build: requirements crawler_slave.ino
arduino-cli core install $(CORE) arduino-cli core install $(CORE)
arduino-cli compile -b $(FQBN) crawler_slave arduino-cli compile -b $(FQBN) crawler_slave
upload: upload: requirements crawler_slave.ino
echo "Would install to $(SERIAL_DEV)" arduino-cli upload -b $(FQBN) crawler_slave -p $(SERIAL_DEV)
requirements: requirements:
@if [ -e requirements.txt ]; \ @if [ -e requirements.txt ]; \

View File

@ -10,16 +10,28 @@
// This servo is used to wipe and clean the camera lens // This servo is used to wipe and clean the camera lens
Servo windowWiperServo; Servo windowWiperServo;
// Variables populated over i2c from master
int id;
int val;
void setup() { void setup() {
// For debugging
//Serial.begin(115200);
// Attach the wiper servo to pin 9 // Attach the wiper servo to pin 9
windowWiperServo.attach(9); windowWiperServo.attach(9);
// This is the address the pi will speak to us at // This is the address the pi will speak to us at
Wire.begin(0x8); Wire.begin(0x4);
// Call receiveEvent when data received // Call receiveEvent when data received
Wire.onReceive(receiveEvent); Wire.onReceive(receiveEvent);
// Setup LED
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
//Serial.println("Started");
} }
// Just loop to keep the running code alive, and wait for events to happen. // Just loop to keep the running code alive, and wait for events to happen.
@ -28,9 +40,26 @@ void loop() {
} }
// This method runs when we receive a message // This method runs when we receive a message
void receiveEvent(int howMany) { void receiveEvent(int n) {
while (Wire.available()) { // loop through all but the last Wire.read(); // Remove smbus trash
int pos = Wire.read(); // receive byte as a int if (true) { // Dont do anything if this is not true
windowWiperServo.write(pos); id = Wire.read(); // ID of the servo/device to access
val = Wire.read(); // Value to assign
//Serial.println(id);
//Serial.println(val);
switch(id) {
case 1:
windowWiperServo.write(val); // Set a val
delay(5); // pause for a moment
windowWiperServo.detach(); // Detach (stop moving) the servo
break;
}
}
// Prevents a bug where if bytes are left in buffer, arduino crashes.
while (Wire.available()) {
Wire.read();
} }
} }

View File

@ -0,0 +1,18 @@
# A makefile for installing the robot's python
# software and setting it up.
#
# Requires sudo
#
# Kitsune Scientific 2021
all: install
upload: crawler.service
sudo cp crawler.service /etc/systemd/system/crawler.service
sudo systemctl daemon-reload
sudo systemctl enable crawler.service
sudo systemctl start crawler.service
sudo systemctl status crawler

View File

@ -0,0 +1,11 @@
[Unit]
Description=Crawler service overseer, manages running main crawler software
After=multi-user.target
[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/python /srv/crawler/crawler.py
[Install]
WantedBy=multi-user.target

View File

@ -1,2 +1,2 @@
PySSTV PySSTV
picamera picamera

View File

@ -5,18 +5,30 @@ from gps import *
from smbus import SMBus from smbus import SMBus
import time import time
addr = 0x8 # bus address addr = 0x4 # bus address
bus = SMBus(1) # indicates /dev/ic2-1 bus = SMBus(1) # indicates /dev/ic2-1
numb = 1 numb = 1
def writeData(value):
byteValue = StringToBytes(value)
bus.write_i2c_block_data(addr,0x00,byteValue) #first byte is 0=command byte.. just is.
return -1
def StringToBytes(val):
retVal = []
for c in val:
retVal.append(ord(c))
return retVal
try: try:
for _x in range (0, 2): for _x in range (0, 2):
for i in range(70, 130): for i in range(78, 130):
bus.write_byte(addr, i) writeData("WIPE-" + str(i))
time.sleep(0.02) time.sleep(0.02)
for i in range(130, 70, -1): for i in range(130, 78, -1):
bus.write_byte(addr, i) writeData("WIPE-" + str(i))
time.sleep(0.02) time.sleep(0.02)
except OSError: except OSError:
print("Could not speak to ardujmemo") print("Could not speak to ardujmemo")

View File

@ -0,0 +1,20 @@
import smbus
import time
import struct
# for RPI version 1, use bus = smbus.SMBus(0)
bus = smbus.SMBus(1)
# This is the address we setup in the Arduino Program
address = 0x04
try:
for _x in range (0, 2):
for i in range(78, 130):
bus.write_i2c_block_data(address, 0, [1, i])
time.sleep(0.02)
for i in range(130, 78, -1):
bus.write_i2c_block_data(address, 0, [1, i])
time.sleep(0.02)
except OSError:
print("Could not speak to ardujmemo")