Skip to main content

Infrarotsteuerung

Ein Infrarotsensor kann zum Erkennen von Hindernissen oder der Verfolgung einer schwarzen Linie genutzt werden. Die folgende Klasse steuert den Sensor.

from machine import Pin,Timer

import micropython, timemicropython

micropython.alloc_emergency_exception_buf(100)

class IR:
    '''This class manages the IR-sensor. Write your code in Robot.ir_detected()'''
    def __init__(self, pinNo)pinNo,callback_func):
        self.out = pinNo
        self.ir_detected = callback_func
        self.ir = Pin(pinNo, Pin.IN, Pin.PULL_UP)
        self.ir.irq(trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING, handler=self.obstacle)
        self.detected=False
        self.timer = Timer()
        
    def reset_detected(self,t):
        self.detected = False
        
    def obstacle(self, pin):
        '''This is called on any change in the IR-sensor. '''
        if not self.detected:
            print(f" Pin value: {pin.value()},Pin number: {self.out}.")ir_detected(pin,self.out)
            self.detected = True
            self.timer.init(mode=Timer.ONE_SHOT, period=100, callback=self.reset_detected)

def main():
  ir = IR(18)
  while True:
    time.sleep_ms(500)

if __name__ == "__main__":
    # execute only if run as a script
    main()

Der Code muss unter dem Dateinamen „infrared.py“ auf dem Pico gespeichert werden.

ZumDer TestenInfrarotsensor kannwird manfolgendermaßen dieim Datei,eigenen soProgramm wieeingebunden. sieDas ist,Beispiel inist Thonnyfür starten.zwei Darauf achten, dass der Pin richtig bezeichnet ist.Infrarotsensoren.

from infrared import IR
IR_PIN_LEFT=0
IR_PIN_RIGHT=1

def ir_detected(pin, pinno):
    print(f"Pin: {pin}, pin number: {pinno}")
    if pinno == IR_PIN_LEFT:
        print("links")
    elif pinno == IR_PIN_RIGHT:
        print("right")
    
ir_left = IR(0, ir_detected)
ir_right = IR(1, ir_detected)