Compare commits

..

32 Commits

Author SHA1 Message Date
Kenwood af4c8f978b Merge branch 'crawler-software' 2021-07-04 23:06:20 -04:00
Kenwood 046c1f7846 Merge cad into master 2021-07-04 23:06:16 -04:00
Kenwood 6fbb53b6bd Fix a bug where arduino would crash on incorrectly sized i2c payload 2021-07-04 22:10:05 -04:00
Kenwood f6bb087799 Merge branch 'crawler-software' of https://kitsunehosting.net/gitea/Kenwood/lewis-crawler into crawler-software 2021-07-04 21:38:39 -04:00
Kenwood 21330c945d Finalize (mostly) new and improved slavecode 2021-07-04 21:37:58 -04:00
Kenwood b5ba5f6f9e Add stack overflow working pycode! 2021-07-05 02:37:18 +01:00
Kenwood 32bd0f5b55 Add sanity check 2021-07-04 20:36:13 -04:00
Kenwood 13eb27b9c3 Remove unnecicary loop 2021-07-04 20:34:15 -04:00
Kenwood f34cb81c7a Update new sorting/recv mechanism 2021-07-04 20:32:04 -04:00
Kenwood 209e15d41f Merge branch 'crawler-software' of https://kitsunehosting.net/gitea/Kenwood/lewis-crawler into crawler-software 2021-07-05 01:03:53 +01:00
Kenwood de214dfc6b Edit servo extent 2021-07-05 01:03:33 +01:00
Kenwood 8f7e12ec90 Create readme.md with basic install docs. 2021-07-04 18:39:08 -04:00
Kenwood 03564ed485 Shrink hat-holes 2021-07-04 15:31:06 -04:00
Kenwood 19acde6d43 Add 'hat flanges' to midsection 2021-07-04 15:28:54 -04:00
Kenwood d2f85f6aad Fix rename 2021-07-04 15:25:18 -04:00
Kenwood 6f1e5af90f Cleanup requirements.txt 2021-07-04 12:22:21 -04:00
Kenwood 2ee6bbef90 Modify crawler service file. 2021-07-04 12:18:43 -04:00
Kenwood 941b5ac4e8 Create crawler service file. 2021-07-04 12:16:41 -04:00
Kenwood 227815ac32 Everything moves a lot smoother without serial: todo jump speed? 2021-07-04 00:07:36 -04:00
Kenwood 83a33cc202 Finalize better reading of full string over i2c and splitting 2021-07-03 23:57:17 -04:00
Kenwood aa575f67a3 Create/modify read string code 2021-07-03 22:54:50 -04:00
Kenwood 67daffd667 Cleanup slave software again. 2021-06-29 22:57:51 -04:00
Kenwood acc5bffb71 Merge branch 'crawler-software' of https://kitsunehosting.net/gitea/Kenwood/lewis-crawler into crawler-software 2021-06-29 22:47:00 -04:00
Kenwood c0b5d40653 Cleanup slave software 2021-06-29 22:46:25 -04:00
Kenwood 6a74fcb472 Added crawler discord bot 2021-06-30 03:19:09 +01:00
Kenwood e8dd3c3fe9 Copy in functioning tests from pi 2021-06-30 00:56:08 +01:00
Kenwood 8fede6107b Move .ino into the correct folder 2021-06-28 01:30:35 -04:00
Kenwood 75cb115330 Modify code +- limits for pwm sweep 2021-06-28 01:29:59 -04:00
Kenwood c2439c8fa1 Copy in example servo code, pwm is way better! 2021-06-28 01:23:43 -04:00
Kenwood 7cc49a0406 Copy in slave example code from droneworkshop 2021-06-27 22:57:07 -04:00
Kenwood 3bde28770c Add default artifacts 2021-06-21 21:19:16 -04:00
Kenwood 4dcb454067 Organize everything 2021-06-21 21:16:39 -04:00
13 changed files with 222 additions and 1 deletions

7
README.md Normal file
View File

@ -0,0 +1,7 @@
# To install on robot
```
git clone <url>
cd lewis-crawler/crawler_software/raspberry_pi
make install?
```

View File

@ -0,0 +1,63 @@
/* Crawler Slave
*
* This code runs on the crawler i2c network
* and provides a cleaner, less CPU intensive control over PWM devices.
*/
#include <Wire.h>
#include <Servo.h>
// This servo is used to wipe and clean the camera lens
Servo windowWiperServo;
// Variables populated over i2c from master
int id;
int val;
void setup() {
// For debugging
//Serial.begin(115200);
// Attach the wiper servo to pin 9
windowWiperServo.attach(9);
// This is the address the pi will speak to us at
Wire.begin(0x4);
// Call receiveEvent when data received
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.
void loop() {
delay(50);
}
// This method runs when we receive a message
void receiveEvent(int n) {
Wire.read(); // Remove smbus trash
if (true) { // Dont do anything if this is not true
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);
break;
}
}
// Prevents a bug where if bytes are left in buffer, arduino crashes.
while (Wire.available()) {
Wire.read();
}
}

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
picamera
picamera

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,73 @@
from discord_webhook import DiscordWebhook
from picamera import PiCamera
from time import sleep
from gps import *
from smbus import SMBus
import time
addr = 0x4 # bus address
bus = SMBus(1) # indicates /dev/ic2-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:
for _x in range (0, 2):
for i in range(78, 130):
writeData("WIPE-" + str(i))
time.sleep(0.02)
for i in range(130, 78, -1):
writeData("WIPE-" + str(i))
time.sleep(0.02)
except OSError:
print("Could not speak to ardujmemo")
def get_uptime():
with open('/proc/uptime', 'r') as f:
uptime_seconds = float(f.readline().split()[0])
return uptime_seconds
def getPositionData(gps):
location = [None]
while(location[0] == None):
print("Trying again")
nx = gpsd.next()
# For a list of all supported classes and fields refer to:
# https://gpsd.gitlab.io/gpsd/gpsd_json.html
if nx['class'] == 'TPV':
latitude = getattr(nx,'lat', "Unknown")
longitude = getattr(nx,'lon', "Unknown")
#print "Your position: lon = " + str(longitude) + ", lat = " + str(latitude)
location = [latitude, longitude]
return location
gpsd = gps(mode=WATCH_ENABLE|WATCH_NEWSTYLE)
loc = getPositionData(gpsd)
webhookURL = "https://discord.com/api/webhooks/856609966404534272/TR9tnLq2sIGZoOeADNswmGRNlzBcqM5aKihfU6snVTP9WhSSoVVvi7nT6i-ZfZS7Hcqm"
print(loc[0])
print(loc[1])
webhook = DiscordWebhook(url=webhookURL, content="Uptime: " + str( round( ((get_uptime() / 60) / 60 ), 2 )) + " hours. Lat is " + str(loc[0]) + ", long is " + str(loc[1]))
camera = PiCamera()
sleep(3) # let iso settle out
camera.capture('still.jpg')
with open("still.jpg", "rb") as f:
webhook.add_file(file=f.read(), filename='still.jpg')
response = webhook.execute() # Hit send

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")

View File

@ -0,0 +1,35 @@
# Raspberry Pi Master for Arduino Slave
# i2c_master_pi.py
# Connects to Arduino via I2C
# DroneBot Workshop 2019
# https://dronebotworkshop.com
from smbus import SMBus
import time
addr = 0x8 # bus address
bus = SMBus(1) # indicates /dev/ic2-1
numb = 1
print ("Enter num")
for _x in range (0, 4):
for i in range(76, 130):
bus.write_byte(addr, i)
time.sleep(0.02)
for i in range(130, 76, -1):
bus.write_byte(addr, i)
time.sleep(0.02)
#while numb == 1:
#
# ledstate = input(">>>> ")
#
# if ledstate == "1":
# bus.write_byte(addr, 0x1) # switch it on
# elif ledstate == "0":
# bus.write_byte(addr, 0x0) # switch it on
# else:
# numb = 0

View File

@ -0,0 +1,12 @@
import RPi.GPIO as GPIO # Import Raspberry Pi GPIO library
from time import sleep # Import the sleep function from the time module
GPIO.setwarnings(False) # Ignore warning for now
GPIO.setmode(GPIO.BOARD) # Use physical pin numbering
GPIO.setup(12, GPIO.OUT, initial=GPIO.LOW) # Set pin 8 to be an output pin and set initial value to low (off)
while True: # Run forever
GPIO.output(12, GPIO.HIGH) # Turn on
sleep(1) # Sleep for 1 second
GPIO.output(12, GPIO.LOW) # Turn off
sleep(1) # Sleep for 1 second

View File

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB