Hallo tweakers,
Ik ben op dit moment druk bezig met mijn PWS. Hiervoor wil ik o.a. een motor aansturen door middel van een druksensor. Wanneer er hoge druk op de sensor is moet de motor een kant op draaien en wanneer er geen druk is een andere kant. Wanneer de druk gemiddeld is moet de motor stil staan. Ik gebruik hiervoor een raspberry pi 3b+ en de volgende verdere onderdelen:
- de motortjes: https://www.conrad.nl/p/j...est&searchSuggest=product
- een uitbreidingsplaat voor de raspberry: https://www.conrad.nl/p/j...h=1&vat=true&insert_kz=8J
- de druksensoren: https://www.conrad.nl/p/j...est&searchSuggest=product
- een analoog naar digitaal converter voor de sensoren: https://www.conrad.nl/p/j...est&searchSuggest=product
Verder gebruik ik nog een aantal jumpercables om alles te verbinden.
Ik heb alles correct aangesloten aan elkaar en de sensoren en motorjes werken apart van elkaar goed. Ik kan via de codes in de commandline de druk en volt van de sensor per seconde aflezen. Ook kan ik de motor laten loopen zodat deze steeds evenver naar links als naar rechts draait, en dit dan constant totdat ik de code afbreek. De vraag is nu hoe ik de twee codes van deze motorjes en sensortjes kan samenvoegen zodat wanneer de volt onder de 1 is de motor linksom draait, de volt tussen 1 en 2 is de motor stil staat en als de volt boven de 2 is rechtom draait. Het moet dus een constante loop worden die naar de voltwaarde van de sensor kijkt en hierop de motor aanpast.
De codes heb ik van internet gehaald en zo aangepast dat ze in mijn situatie werken.
Hier een foto van de setup. Je ziet de twee sensoren en twee motoren (1 met tandwiel om later iets te kunnen laten bewegen).
:strip_exif()/f/image/BWb60OAIA0SjT8MooXhyXtdQ.jpg?f=fotoalbum_large)
Ik zal hieronder de huidige codes zetten. De eerste is voor een sensor, de tweede voor een motor.
Hier de code van de motor:
Hopelijk kunnen jullie mij helpen. Alvast erg bedankt!
En mocht er extra informatie of iets nodig zijn laat het dan natuurlijk weten.
Ik ben op dit moment druk bezig met mijn PWS. Hiervoor wil ik o.a. een motor aansturen door middel van een druksensor. Wanneer er hoge druk op de sensor is moet de motor een kant op draaien en wanneer er geen druk is een andere kant. Wanneer de druk gemiddeld is moet de motor stil staan. Ik gebruik hiervoor een raspberry pi 3b+ en de volgende verdere onderdelen:
- de motortjes: https://www.conrad.nl/p/j...est&searchSuggest=product
- een uitbreidingsplaat voor de raspberry: https://www.conrad.nl/p/j...h=1&vat=true&insert_kz=8J
- de druksensoren: https://www.conrad.nl/p/j...est&searchSuggest=product
- een analoog naar digitaal converter voor de sensoren: https://www.conrad.nl/p/j...est&searchSuggest=product
Verder gebruik ik nog een aantal jumpercables om alles te verbinden.
Ik heb alles correct aangesloten aan elkaar en de sensoren en motorjes werken apart van elkaar goed. Ik kan via de codes in de commandline de druk en volt van de sensor per seconde aflezen. Ook kan ik de motor laten loopen zodat deze steeds evenver naar links als naar rechts draait, en dit dan constant totdat ik de code afbreek. De vraag is nu hoe ik de twee codes van deze motorjes en sensortjes kan samenvoegen zodat wanneer de volt onder de 1 is de motor linksom draait, de volt tussen 1 en 2 is de motor stil staat en als de volt boven de 2 is rechtom draait. Het moet dus een constante loop worden die naar de voltwaarde van de sensor kijkt en hierop de motor aanpast.
De codes heb ik van internet gehaald en zo aangepast dat ze in mijn situatie werken.
Hier een foto van de setup. Je ziet de twee sensoren en twee motoren (1 met tandwiel om later iets te kunnen laten bewegen).
:strip_exif()/f/image/BWb60OAIA0SjT8MooXhyXtdQ.jpg?f=fotoalbum_large)
Ik zal hieronder de huidige codes zetten. De eerste is voor een sensor, de tweede voor een motor.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import time
import board
import busio
import adafruit_ads1x15.ads1015 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
# Create the I2C bus
i2c = busio.I2C(board.SCL, board.SDA)
# Create the ADC object using the I2C bus
ads = ADS.ADS1015(i2c)
# Create single-ended input on channel 0
chan = AnalogIn(ads, ADS.P1)
# Create differential input between channel 0 and 1
# chan = AnalogIn(ads, ADS.P1, ADS.P2)
print("{:>5}\t{:>5}".format("Druk", "Volt"))
while True:
print("{:>5}\t{:>5.3f}".format(chan.value, chan.voltage))
time.sleep(2) |
Hier de code van de motor:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| import RPi.GPIO as GPIO
import time
motorPins = (7, 16, 18, 22)
CCWStep = (0x01,0x02,0x04,0x08)
CWStep = (0x08,0x04,0x02,0x01)
def setup():
print ('Program is starting...')
GPIO.setmode(GPIO.BOARD) # Numbers GPIOs by physical location
for pin in motorPins:
GPIO.setup(pin,GPIO.OUT)
def moveOnePeriod(direction,ms):
for j in range(0,4,1): #cycle for power supply order
for i in range(0,4,1): #assign to each pin, a total of 4 pins
if (direction == 1):#power supply order clockwise
GPIO.output(motorPins[i],((CCWStep[j] == 1<<i) and GPIO.HIGH or GPIO.LOW))
else : #power supply order anticlockwise
GPIO.output(motorPins[i],((CWStep[j] == 1<<i) and GPIO.HIGH or GPIO.LOW))
if(ms<3): #the delay can not be less than 3ms, otherwise it will exceed speed limit of the motor
ms = 3
time.sleep(ms*0.001)
def moveSteps(direction, ms, steps):
for i in range(steps):
moveOnePeriod(direction, ms)
def motorStop():
for i in range(0,4,1):
GPIO.output(motorPins[i],GPIO.LOW)
def loop():
while True:
moveSteps(1,3,512)
time.sleep(0.5)
moveSteps(0,3,512)
time.sleep(0.5)
def destroy():
GPIO.cleanup()
if __name__ == '__main__':
setup()
try:
loop()
except KeyboardInterrupt:
destroy() |
Hopelijk kunnen jullie mij helpen. Alvast erg bedankt!
En mocht er extra informatie of iets nodig zijn laat het dan natuurlijk weten.
:strip_exif()/f/image/N9AJFpAcdC3JPLcOAdJv5PZ5.jpg?f=fotoalbum_large)
:strip_exif()/f/image/pttz0Wvd1ILWz4d7k4NSNP1Q.jpg?f=fotoalbum_large)
:strip_exif()/f/image/7wQu8c1LjCCOsJfYNYH9VcAQ.jpg?f=fotoalbum_large)