Описание распиновки gpio на raspberry pi 3

Содержание:

Разъем расширения Raspberry Pi

На Рисунке 2 показано расположение и назначение выводов разъема расширения Raspberry Pi. Первые выводы подобных разъемов на печатных платах, как правило, могут быть идентифицированы по квадратной контактной площадке на нижнем слое платы. На 40-контактный разъем расширения RPi выведены цифровые входы и выходы, совместимые с логическими уровнями 3.3 В.

Рисунок 2. Расположение и назначение выводов 40-контактного разъема расширения RPi.

Совместимость с логическими уровнями 3.3 В означает, что RPi будет интерпретировать входной уровень близкий к 0 В как логический «0», а уровень выше 2 В как логическую «1». Подача на вход напряжения выше 3.3 может вывести RPi из строя. Соответственно, когда GPIO порт сконфигурирован как выход, RPi будет устанавливать на нем напряжение близкое к 0, либо к 3.3 В.

В статье мы будем говорить о выводах, отмеченных на Рисунке 2 розовым, белым, красным и оранжевым цветом. Остальные порты используются последовательными интерфейсами передачи данных.

Распиновка разъемов GPIO Raspberry Pi

Внимание! В отличие от плат Arduino, напряжение логических уровней Raspberry Pi является 3,3 В. Максимальное напряжение, которое могут выдержать вход/выходы составляет 3,3 В а не 5 В

Подав напряжение, например 5 В, можно вывести одноплатник из строя.

Таблица распиновки GPIO pin (WiringPi Pin)

WiringPi Pin Назначение Physical Pin Назначение WiringPi Pin
Питание 3.3В 1 2 Питание 5В
8 GPIO 2 (SDA1) I²C 3 4 Питание 5В
9 GPIO 3 (SCL1 ) I²C 5 6 Земля
7 GPIO 4 (GPCLK0) 7 8 GPIO 14 (TXD0) 15
Земля 9 10 GPIO 15 (RXD0) 16
GPIO 17 (GPIO_GEN0) SPI1_CE1 11 12 GPIO 18 (PWM0) SPI1_CE0 1
2 GPIO 27 (GPIO_GEN2) 13 14 Земля
3 GPIO 22 (GPIO_GEN3) 15 16 GPIO 23 4
Питание 3.3В 17 18 GPIO 24 5
12 GPIO 10 (SPI0_MOSI) 19 20 Земля
13 GPIO 9 (SPI0_MISO) 21 22 GPIO 25 6
14 GPIO 11 (SPI0_SCLK) 23 24 GPIO 8 SPI0_CE0 10
Земля 25 26 GPIO 7 SPI0_CE1 11
ID_SD 27 28 ID_SC
21 GPIO 5 (GPCLK1) 29 30 Земля
22 GPIO 6 (GPCLK2) 31 32 GPIO 12 (PWM0) 26
23 GPIO 13 (PWM1) 33 34 Земля
24 GPIO 19 (PWM1) (SPI1_MISO) 35 36 GPIO 16 SPI1_CE2 27
25 GPIO 26 37 38 GPIO 20 (SPI1_MOSI) 28
Земля 39 40 GPIO 21 (SPI1_SCLK) 29
  • Physical Pin: нумерация, отвечающая за физическое расположение контакта на гребенке.
  • GPIO: нумерация контактов процессора Broadcom. Может пригодиться при работе с пакетом .
  • WiringPi Pin: нумерация контактов для пакета Wiring Pi. Это Arduino-подобная библиотека для работы с GPIO-контактами.
  • ШИМ: плата имеет два канала ШИМ по два потока в каждом.

    • PWM0, ;
    • PWM1, .
  • I²C: SDA1, SCL1. Для общения с периферией по синхронному протоколу, через два провода.
  • SPI: К  можно подключить два ведомых устройства, а к  — три. Выбор осуществляется сигналом на пине CEx.

    • SCLK — Serial CLocK
    • CE — Chip Enable (often called Chip Select)
    • MOSI — Master Out Slave In
    • MISO — Master In Slave Out
    • MOMI — Master Out Master In
  • UART: , . Асинхронный протокол последовательной передачи данных по двум проводам  и 

Новый путь: интерфейс chardev

sysfs«deprecated»(gpiochip)/dev/dev/gpiochipN/sys/bus/gpiochipN

Стек работы библиотеки libgpiodechocat

  • Выделение линий GPIO связано с процессом, который он его использует. При завершение процесса, так же в случае аварийного завершения, линии GPIO используемые процессом освобождаются автоматически;
  • Дополнительно, можно всегда определить какой процесс в данное время использует определенную линию GPIO;
  • Можно одновременно читать и писать в несколько линий GPIO одновременно;
  • Контроллеры GPIO и линии GPIO можно найти по названию;
  • Можно настроить состояние вывода контакта (open-source, open-drain и т. д.);
  • Процесс опроса для перехвата событий (прерывания от линий GPIO) надежен.

Особенности GPIO «Малины»

В первую очередь необходимо рассмотреть ключевые особенности этого интерфейса. И самое главное в GPIO Raspberry Pi – это pings (пины). Именно они используются для связи одноплатника с периферией.

В совокупности у «Малины» есть 26 GPIO (портов), однако самих элементов больше:

  • 2 из них отвечают за подачу напряжения в 5 Вольт;
  • 2 – 3,3 Вольта;
  • 8 применяются для заземления;
  • 2 используются исключительно для подключения расширений.

Все они выстроены в 2 ряда. Если расположить плату горизонтально и так, чтобы интерфейс оказался вверху, то к первой паре элементов можно подключать (запитывать) устройства, требующие напряжения в 5 Вольт. Снизу, в свою очередь, находится 1 на 3,3, а второй такой же располагается в этом же ряду, примерно посередине – между 22 и 10 портами.

Чтобы ознакомиться с распиновкой GPIO Raspberry следует изучить схему. Её рекомендуется загрузить на компьютер, чтобы при необходимости можно было быстро обратиться к данной информации – заучить сразу расположение всех элементов не получится.

Создание приложения обработки прерывания от кнопки

Push buttonСветодиод36Кнопка38

dotnet-led-buttondotnet new console -o dotnet-led-button

\Projects\dotnet-led-button\

Шаг 3 — Добавление контроллера управления GPIO c драйвером LibGpiodDriver

Описание кода:

  • controller.OpenPin(LED_PIN,PinMode.Output) — открывает контакт светодиода, и выставляет режим работы на — вывод;
  • controller.OpenPin(BUTTON_PIN,PinMode.Input) — открывает контакт кнопки, и выставляет режим работы на — ввод (сигнал поступает от кнопки.

CallbackCallback

Описание кода:

Шаг 5 — Публикация для архитектуры ARM

\Projects\dotnet-led-button\

\Projects\dotnet-led-button\bin\Release\net5.0\linux-arm\publish\

\Projects\dotnet-led-button\bin\Release\net5.0\linux-arm64\publish\

Распиновка DSI разъема дисплея

Display Serial Interface (DSI) — спецификация Mobile Industry Processor Interface (MIPI) Alliance. направленная на снижение затрат на дисплейную подсистему в мобильных устройствах. В основном она ориентирована на LCD и тому подобные технологии дисплея. Спецификация определяет последовательную шину и протокол связи между хостом (источник изображения) и устройством (получателем изображения).

Pin Назначение
1 DISP_GND
2 DISP_D1_N
3 DISP_D1_P
4 DISP_GND
5 DISP_CK_N
6 DISP_CK_P
7 DISP_GND
8 DISP_D0_N
9 DISP_D0_P
10 DISP_GND
11 DISP_SCL
12 DISP_SDA
13 DISP_GND
14 DISP_3V3
15 DISP_3V3

Первые шаги: управление светодиодом

Простейший пример использования выходов – управление светодиодом или лампочкой, или каким-нибудь приводом или мотором. Для преобразования выходного сигнала RPi во что-то, что будет управлять нужным устройством, обычно требуется электронная схема. Все, что необходимо для небольшого светодиода – последовательный токоограничительный резистор, защищающий светодиод и выход RPi. Сопротивление резистора выбирается из диапазона 100 Ом … 1 кОм, в зависимости от используемого светодиода и необходимой яркости при установке на выходе логической «1».

Рисунок 3. Подключение светодиода к разъему GPIO RPi с применением
макетной платы.

Подключение светодиода к контактам разъема GPIO с помощью беспаечной макетной платы показано на Рисунке 3, а сама схема – на Рисунке 4. Соединение GND (0 В) было взято с вывода 6 разъема GPIO, для управления светодиодом используется порт GPIO22 (вывод 15). Можно использовать любой порт GPIO, отмеченный розовым цветом на Рисунке 2.

Рисунок 4. Принципиальная схема подключения
светодиода к плате RPi.

После того, как выполнены и проверены все соединения, можно приступать к написанию кода или сценария управления светодиодом. Выбор языка зависит от вас. Один из примеров на популярном языке Python содержится в (Листинге 1).

Листинг 1. Пример программы на Python для простого мигания светодиодом.

# Светодиод подключен к GPIO22 (контакт 15)
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(22, GPIO.OUT)
GPIO.output(22, True)
time.sleep(3)
GPIO.cleanup()

Сохраните код в файл с именем led-test.py, а затем запустите его, выполнив команду:

sudo python led-test.py

Другая программа (Листинг 2) демонстрирует пример управления светодиодом. Светодиод мигает 10 раз

(Примечание: в Python, в отличие от других языков программирования, важно использование отступов в коде)

Листинг 2. Исходный код программы на Python (светодиод мигает 10 раз).

# Светодиод подключен к GPIO22 (контакт 15)
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
for x in range(0,10):
  GPIO.setup(22, GPIO.OUT)
  GPIO.output(22, True)
  time.sleep(0.05)
  GPIO.output(22, False)
  time.sleep(0.45)
GPIO.cleanup()

Другой способ управления портами GPIO основан на использовании Shell-скрипта (сценария оболочки). Этот метод кажется немного более сложным (если вы не любите писать скрипты), но он хорош просто для расширения кругозора, поскольку многие языки программирования часто позволяют запускать командные скрипты, и в случае необходимости это может быть одним из быстрых способов управления портами GPIO из других языков. Кроме того, описанный в Листинге 3 способ является стандартным для различных платформ, поэтому ваш код может быть перенесен на другие платы.

Листинг 3. Командный скрипт (Shell-скрипт) для управления светодиодом, подключенным к GPIO22 Raspberry Pi.

#!/bin/sh
GPIO_PATH=/sys/class/gpio
LED_PIN=22 #GPIO 22 is pin 15
echo «$LED_PIN» > $GPIO_PATH/export
echo «out» > $GPIO_PATH/gpio$LED_PIN/direction
echo «1» > $GPIO_PATH/gpio$LED_PIN/value
sleep 1
echo «$LED_PIN» > $GPIO_PATH/unexport

Первая строка скрипта выглядит как комментарий, но она указывает оболочке Linux, что делать со скриптом при выполнении, поэтому изменять ее нельзя. Остальные строки скрипта используются для контроля соответствующего GPIO порта, конфигурирования его как выхода, установки на нем высокого уровня и выполнения задержки на 1 с. В конце порт освобождается, чтобы дать возможность использовать его в других программах.

Другим распространенным языком программирования, с которым вы можете встретиться, является Си, или его старший брат Си++. Примеры исходного кода на Си или Си++ будут приведены далее, когда мы приступим к работе с цифровыми входами.

Your First Circuit: Blink the LED!typeof __ez_fad_position!=’undefined’&&__ez_fad_position(‘div-gpt-ad-raspberrytips_com-large-mobile-banner-1-0’)

Ok, that’s the end of the theory part, and the beginning of your first circuit tutorial.Let’s practice

Master your Raspberry Pi in 30 daysSale: 10% off today.Download the eBook.Uncover the secrets of the Raspberry Pi in a 30 days challenge.Learn useful Linux skills and practice multiples projects.Get it Now!

Breadboard Configuration

As always, start to plug the pins without a power source plugged.

To get started you need:

  • 1x LED
  • 2x male/female jumper wires
  • 1x resistor

Take the two jumper wires and plug them like this:

  • One from the ground line to a ground pin of the Raspberry Pi (for example, the third one from the second row, port 6)
  • The other from an input/output port (for example, the fourth one of the first row, port 7)

You now have two cables, connected to only one side.On the other side, you need to connect them to the breadboard.

Plug the ground jumper wire to the ground line of the breadboard (any port).Plug the other cable into one column of the breadboard (anywhere).

It should look like this:

Finally, put the resistor between the ground line and the column near the other cable.And put a light with one foot on each column, the shorter in the resistor/ground column.

Something like this:

Yes, I know my resistor seems to be having a hard time

You can now boot the Raspberry Pi and jump into SSH (or GUI if you prefer) to create the Python script.As soon as the Raspberry Pi is on, avoid touching the circuit.

Python script

The first basic script we can code is to turn on the LED light to check that everything works.To do this, Raspberry Pi OS already includes any libraries you need.

  • In a terminal, or with your favorite code editor, create a new python file:
    nano led_on.py
  • Paste these lines inside:

    I commented on everything so it should be clear.The only trap is the pin number to use in the LED variable.You may have a different numeration in your breadboard expansion board or sticker, but you have to use the BCM number from pinout.xyz.

  • Save and Exit (CTRL+X)
  • Run the script with:
    python led_on.py

The LED will turn on for 5 seconds and then turn off.If not, double-check every previous paragraph to see what you have missed.If your circuit seems good, check the LED direction, there is a + and – side.

If you have any comment, suggestion or just want to chat with us about this tutorial,you can post your messages in the community on Patreon. See you there!

Create Node-RED flow for controlling GPIO

First, run Node-RED from your Raspberry Pi terminal:

node-red

Wait for node-RED a minute until you see the following message:

24 Feb 09:55:16 -  Starting flows
24 Feb 09:55:17 -  Started flows
24 Feb 09:55:17 -  Server now running at http://127.0.0.1:1880/

Launch your browser and point browser url to , please noted that the IP address should be Raspberry Pi’s IP address, if you are not sure the IP address of the Raspberry Pi, run the following command from terminal to find out:

hostname -I

What you see on the browser is Node-RED editor, you will see node palette on the left that consists of many pre-defined nodes by category, and info(the one with ‘i‘ icon)/debug(the one with bug icon) side bar on the right.  In the center is the canvas where we could create our flow.

Read Raspberry Pi GPU temperature

In order to read Raspberry Pi GPU temperature, as you remember from our reference code of simple_gpio.py, we will need to execute a linux command to get the result.

  1. Drag an “inject” node from the node palette to the flow, and open it by double clicking on it and uncheck the checkbox of “Inject once after 0.1 seconds, then” and click on Done button;
  2. Drag an “exec” node under the “advanced” category  from the palette to the flow, and edit the settings as shown below. This will setup the node to execute a bash command as and return the output string as
  3. Connect the two nodes we created by dragging from the “inject” node output circle to “exec” node input circle to create a connection;
  4. To display the temperature, we will use a “debug” node to display the message payload. Go ahead drag a “debug” node to the flow and wire it to the “stdout” output of “exec” node.

Setup exec node to get GPU temperature

We are done with the “programming” for displaying GPU temperature. Click on the debug icon on the right hand side sidebar, and click on the red Deploy button on the upper right corner of the browser. You should see the  output from the  “Debug” node.

Control LED via GPIO

We will use two “inject” nodes to turn on and turn off LED.

  1. Drag an “inject” node and set the property to  by clicking on the dropdown menu, and then set the value to . Remember to uncheck the “inject once…” checkbox;
  2. Drag another “inject” node and set the property to and set its value to  for this one;
  3. Drag “rpi gpio” Output node (the one with a raspberry pi icon on the right is the output node) and set it to pin ;
  4. Connect both “inject” nodes to “rpi gpio“.

Setup inject node as a switchSetup rpi gpio node to control GPIO18

The final flow should looks like the picture below.

Simple-gpio-flow

Click on Deploy to run the flow. Click on the button on the left of each “inject” node will generate either 1 or 0 which will set the GPIO18 correspondently to turn on and off the LED.

We have achieved the same result as the simple_gpio.py did without writing a single line of code!

Как устроено GPIO на RPi3?

Теперь можно перейти к вопросу, который касается того, какая распиновка GPIO имеется на Raspberry Pi 3. В первую очередь необходимо сказать, что общее количество пинов на соответствующей панели равняется 40. Каждый из них имеет свой номер.

Все они подразделяются на 3 группы. К первой относятся питающие (на англоязычных схемах маркируются как Power) – они подают электричество в 3,3 и 5 Вольт. При этом у разных контактов данного назначения различное напряжение. Это обязательно следует учитывать при подключении модулей.

Ко второй – заземляющие (могут именоваться RND или Ground). Они нужны, чтобы отводить электричество, тем самым обеспечивая безопасное использование.

К третьей – порты (имеют обозначение BCM). Именно они служат теми контактами, которые могут принимать и отправлять сигналы. Пользователь может подключать модули к любым из них. Самое главное – чтобы было удобно обеспечивать питание подсоединённых компонентов.

Разобравшись с тем, какие типы контактов присутствуют в GPIO, можно перейти непосредственно к тому, какие из них конкретно за что отвечают. Самый простой способ освоить распиновку – это изучить схему. Но если такой возможности нет, можно обойтись и описанием.

Предположим, что плата расположена горизонтально таким образом, что GPIO на ней находится в левом верхнем углу. В таком случае номера портов будут располагаться так:

  • левый нижний – 1;
  • левый верхний – 2;
  • нижний во втором ряду – 3;
  • верхний во втором ряду – 4 и т.д.

Из списка выше должно быть понятно, по какому принципу выполнена нумерация соответствующего интерфейса. Теперь можно перейти к тому, контакты под какими номерами имеют какое назначение.

Питающие на 3,3 Вольта – 1 и 17, а на 5 Вольт – 2 и 4 (они находятся рядом). Заземляющие внизу – 9, 25 и 39, заземляющие вверху – 6, 14, 20, 30 и 34. Все остальные контакты – это порты (BCM).

Особенности нумерации GPIO

Чтобы начать использование GPIO в Raspberry Pi 3, необходимо знать какие существуют особенности нумерации контактов у данного интерфейса

Важно понимать, что в процессоре «Малины» не записаны номера пинов, которые не работают на вход/выход, то есть не являются портами

Поэтому при управлении GPIO на Raspberry Pi 3 необходимо знать нумерацию BCM. Она в значительной степени отличается от той, которая рассмотрена в разделе выше. Так, 3 контакт (он является портом) имеет номер BCM2. Именно такой следует указывать при написании кода.

Понятно, что из-за этого может возникнуть путаница. Ввиду этого на Raspberry Pi 3 рекомендуется использовать Wiring Pi. Это специальная библиотека, которая имеет собственную нумерацию. Так, например, 3 порт (который является BCM 2) определяется как WiringPi 8. Возможно, это покажется еще более нелогичным. Но после ознакомления с соответствующей схемой все встанет на свои места.

Что нужно знать о GPIO RPI3?

Модули возможно подключать к абсолютно любым портам GPIO «Малины», и они будут нормально работать

Но важно знать, что в системе есть пара контактов, которые зарезервированы системой для особых целей. Ими являются BCM 0 и BCM 1 (их номера на обычной схеме – 27 и 28)

Они предназначаются специально для установки плат расширения. Поэтому при возможности их не нужно использовать для подключения других модулей.

Еще один важный момент – осторожное использование питания через GPIO Raspberry Pi 3. Ток на внешние устройства через «Малину» может подаваться с силой до 50 мА

Это достаточно много для столь небольшого девайса. Поэтому подавать ток под такой силой нужно только по крайней необходимости. В противном случае можно не только испортить модуль, но и процессор самой RPi.

Contributing

Contributions are always appreciated, whether that’s in the form of bug reports, pull requests or helping to diagnose bugs and help other users on the issues page.

Due to the nature of this project it can be quite time-consuming to test against real hardware, so the automated test suite is all the more important. I will not accept any pull requests that cause the build to fail, and probably will not accept any that do not have corresponding test coverage.

You can run the tests with npm:

and create a coverage report with:

There is also an integration test that you can run on Raspberry Pi hardware, having connected two GPIO pins across a resistor. The command to run the test will provide further instructions on how to set up the hardware:

C (WiringPi) Example

The intention of WiringPi is to make your I/O code look as Arduino-ified as possible. However, keep in mind that we’re no longer existing in the comfy confines of Arduino — there’s no or , just .

Follow along here as we create an example C file, incorporate the WiringPi library, and compile and run that program.

Create blinker.c

Using the terminal, make a folder of your choice.

Navigate to a folder of your choice.

Create a new file named «blinker.c».

Then open that file in a text editor (Nano or MousePad/Leafpad are included with Raspbian).

Note: Previously, Leafpad was the default GUI text editor for Raspberry Pi Images. It is now replaced by Mousepad. You can find Mousepad under the Raspberry Pi Start Menu under Accessories > Text Editor. You can still install leafpad manually with the command. Once installed, you can specify the text editor to open up the file.

The last command above will open your «blinker.c» file in Mousepad/Leafpad, while leaving your terminal functioning — in-directory — in the background.

Program!

Here’s an example program that includes a little bit of everything we talked about on the last page. Copy and paste, or write it yourself to get some extra reinforcement.

Once you’ve finished, Save and return to your terminal.

Compile and Execute!

Unlike Python, which is an interpreted language, before we can run our C program, we need to build it.

To compile our program, we’ll invoke gcc. Enter this into your terminal, and wait a second for it to finish compiling:

That command will create an executable file — «blinker». The «-l wiringPi» part is important, it loads the wiringPi library. A successful compilation won’t produce any messages; if you got any errors, try to use the messages to track them down.

Type this to execute your program:

The blinker program should begin doing it’s thing. Make sure you’ve set up the circuit just as modeled on the hardware setup page. Press the button to blink the LED, release to have it turn off. The PWM-ing LED will be brightest when the button is released, and dim when the button is pressed.

Основное применение GPIO управления Raspberry Pi-регулировка яркости и изменение цвета многоцветного диода

http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>yle=»margin-bottom:5px;»>Теги:  малиновый пирог

Встречайте многоцветные диоды

Встречайте многоцветные диоды

Контакт R: Управление включением / выключением красного диода Контакт G: включение / выключение зеленого диода управления Контакт B: включение / выключение синего диода управления GND: земля

Здесь мы делаем каждый штифт:

Инициализируйте каждый вывод

Инициализация широтно-импульсной модуляции до максимума и запуск

Возьмите красный свет в качестве примера

Затемнение:

Регулировка цвета:

Способ управления яркостью и цветом одновременно:

Интеллектуальная рекомендация

Введение 1. Основное содержание этого руководства ASP.NET Введение в основное промежуточное ПО Через настройкуASP.NET Основное промежуточное ПО реализует проверку запросов 2. Экологическая информация …

Сначала создайте индекс и создайте отображение поля, полевое хобби используется IK_SMART Psychoacter Не забудьте использовать запрос на поставку, затем индекс и тип должны быть последовательными выше …

1. После установки vscode перейдите вИнтерфейс запуска наCtrl + Shift + P Появится окно команд, показанное ниже, и введите «display», Введите; как показано ниже 2. Удалите содержимое перед д…

Веб-сервер установки IDEA часто встречает установку и неудачи, запустить сбой. В сочетании с IDEA используется, расчесывание процесс установки веб-сервера, рекомендуется для загрузки серверов Tomcat и…

Доброе утро всем, на этот раз я предлагаю вам прочитать код приложения камеры Android9.0, которое не только для рабочих нужд, но и для личных заметок, чтобы помочь вам учиться. Местоположение исходног…

Вам также может понравиться

Как правило, написано многопараметрическое классу, будет несколько разных конструкторов для звонков клиентов, что приводит к слишком низкой гибкости, и если она поддерживается, головная боль. Использу…

Навыки использования логических операторов Логическое ИЛИ Логическое ИЛИ (||) синтаксис expr1 || expr2 Вернуть expr1, если expr1 истинно; в противном случае вернуть expr2. || выберет первое (крайнее л…

Что такое FFTW? FFTW (более быстрое преобразование Фурье на Западе) — это стандартный набор языка C для быстрого вычисления дискретного Фурье, разработанный М. Фриго и С. Джонсоном из Массачусетского …

Я видел статью Учителя Яо в ​​Чжиху, и она показалась мне очень полезной, поэтому делайте заметки! ! ! Прежде всего, мы получили жалобы от пользователей, что в сети некоторых операторов сети в некотор…

Вставьте текстовый текст код здесь, чтобы простираться вправо, текст превышает максимальную ширину текста, с … заменить текст позади…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector